【问题标题】:Call a future method on Provider initialization在 Provider 初始化时调用 future 方法
【发布时间】:2020-12-22 07:03:18
【问题描述】:

如何在初始化时从提供者调用方法?

想拨打CoolProvider().fetchCoolData()

return ChangeNotifierProvider(
      create: (context) => CoolProvider(),
      child: Stack(
        alignment: Alignment.bottomCenter,
        children: [
          SomeWidgetWithConsumer(),
          AnotherWidgetWithConsumer(),
        ],
      ),
    );

【问题讨论】:

    标签: flutter dart flutter-provider


    【解决方案1】:

    好吧,如果你想获取一些东西,它可能是 Future。如果是这种情况,您可以简单地将ChangeNotifierProvider 的子代包裹为FutureBuilder。查看 Flutter 文档以了解如何使用它!

    【讨论】:

      【解决方案2】:

      你可以这样做。

      return ChangeNotifierProvider(
            create: (context) => CoolProvider()..fetchCoolData(),
            child: Stack(
              alignment: Alignment.bottomCenter,
              children: [
                SomeWidgetWithConsumer(),
                AnotherWidgetWithConsumer(),
              ],
            ),
          );
      

      【讨论】:

      • 不错!尝试用 1 个点进行操作,但没有成功。第二个点有什么作用?
      • 干得好 Jigar,这很漂亮。我没想到:)
      • 您可以在此处阅读有关双点(级联符号)的信息 - dart.dev/guides/language/language-tour#cascade-notation-
      • 另外,我如何知道数据是否正在加载到消费者中?
      • 为此,您可以在CoolProvider 中有一个bool 变量loading。在fetchCoolData 方法中,您可以在开始时设置为真,在await 之后设置为假(这意味着在获取数据之后)。每当您将loading 更改为true 或false 时,请在下一行调用notifyListeners(),这样所有正在收听此特定ChangeNotifierConsumers 都会收到更改通知。
      猜你喜欢
      • 2020-06-12
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 2011-04-01
      • 2020-01-12
      • 2012-05-25
      • 1970-01-01
      相关资源
      最近更新 更多