-1

我正在使用提供程序包来检测“todaysTasks”的变化,但正如您所见,“todayTasks”取决于存储 DayTasks 列表的 DaysRecords,所以我想要的是每当我推送 DayTask 时重建我的根小部件(即 MyApp)在 DaysRecords.recordsList 中,但无法找到任何方法来做到这一点。这个有什么解决办法吗??

class MyApp extends StatelessWidget {
  static const routeName = '/root';
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    DayTasks todaysTasks = DaysRecords.recordsList.last;
    return ChangeNotifierProvider(
      create: (context) => todaysTasks,
4

1 回答 1

0

您可以使用 ChangeNotifierProvider 包装 MyApp 的父小部件(我猜,它是 Main 方法上的 MaterialApp),而不是包装在 MyApp 中。

然后在 MyApp 的 build 方法中初始化对应的 provider 或者使用一个 consumer 来重建(管理你的 state)。

void main() {
  runApp(MaterialApp(
    home: RootWidget(),
  ));
}

class RootWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (context) => SomeProvider(),
      child: MyApp(),
    );
  }
}

class MyApp extends StatelessWidget {
  static const routeName = '/root';

  @override
  Widget build(BuildContext context) {
    final provider = Provider.of<SomeProvider>(context, listen: true);

    // DayTasks todaysTasks = provider.recordsList.last;
    return Scaffold(
      body: AppBar(
        automaticallyImplyLeading: false,
      ),
    );
  }
}
于 2020-10-14T21:55:19.313 回答