【问题标题】:Api call when open screen using Provider in Flutter在 Flutter 中使用 Provider 打开屏幕时的 API 调用
【发布时间】:2022-01-20 08:04:22
【问题描述】:

我在使用提供程序时感到困惑。一些开发者在打开应用程序屏幕时使用 FutureBuilder 获取 API,如下所示

var provider = locator<AppIntroProvider>(); //GetIt Dependancy Infection
 @override
 void initState() {
   super.initState();
 }

 @override
 Widget build(BuildContext context) {
   return Scaffold(
     body: FutureBuilder(
       future:  provider.getAppIntroItems(),
       builder: (context, AsyncSnapshot<dynamic> snapshot) => snapshot
           .data ==
           null
           ? Container(
         color: Colors.red,
       ) : MyDataListWidget(),
     ),
   );
 }

但我在 InitState 中实现 API 调用并使用 Consumer 监听数据,就像这样。

var provider = locator<AppIntroProvider>(); //GetIt DI

 @override
 void initState() {
   provider.getAppIntroItems();
   super.initState();
 }

 @override
 Widget build(BuildContext context) {
   //provider = Provider.of<AppIntroProvider>(context); //If I don't use GetIt DI
   return Scaffold(
     body: Consumer<AppIntroProvider>(
       builder: (context, appInfoProvider, child) => appInfoProvider
                   .appIntroItemsDao ==
               null
           ? Container(
               color: Colors.red,
             )
           : MyDataListWidget(),
     ),
   );
 }

我的问题是

  1. 使用 FutureBuilder 而不是 Consumer 的目的是什么?
  2. 有什么不同?
  3. 什么是实现 API 调用的正确和更有效的方法?

【问题讨论】:

    标签: flutter flutter-provider


    【解决方案1】:

    FutureBuilder 只是一个简单的小部件,它处理一些操作,例如在 init 状态下获取未来,最终您可以同时使用它们。

    如果我想处理不同的状态,例如 Loading、Error、HasData,我通常使用 FutureBuilder,它可以更容易地在构建器函数中控制它们

    Consumer 只允许您访问您的状态管理数据。

    此外,如果您不使用 FutureBuilder,则必须保持加载状态,例如在首次启动请求时将其设置为正在加载,然后在完成后将其设置为 false。如果你想在某处使用加载状态,这会很有用

    【讨论】:

    • 感谢您的回答。那么如果你想要状态管理数据如何访问。只是将消费者包装到 Future Builder?如果你想要更多的状态,比如没有互联网连接怎么办?
    • 要处理没有互联网连接,我建议使用像connectivity_plus这样的包,您可以继续使用定位器和GetIt将Consumer包装到FutureBuilder也是一个不错的选择
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2023-03-24
    • 2022-07-09
    相关资源
    最近更新 更多