【问题标题】:How to rebuild the root widget of flutter?如何重建flutter的root widget?
【发布时间】:2021-01-29 08:15:04
【问题描述】:

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

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,

【问题讨论】:

    标签: flutter flutter-provider flutter-routes flutter-build


    【解决方案1】:

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

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

    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,
          ),
        );
      }
    }
    

    【讨论】:

    • 我没有 MyApp 的父小部件,它的 void main()=>runApp(MyApp()) 然后 MyApp 的子小部件是 Material App。如果我需要对此进行任何更改以使其正常工作,请帮助我
    • 而且我在 void main() 中没有任何“上下文”,我不确定它是否重要
    • 我更新了答案。我希望它能满足您的需求。
    猜你喜欢
    • 2021-08-28
    • 2019-07-26
    • 2018-01-28
    • 1970-01-01
    • 2020-10-01
    • 2021-12-19
    • 2019-04-01
    • 1970-01-01
    • 2019-08-26
    相关资源
    最近更新 更多