【问题标题】:Flutter is using provider to load data is the right option?Flutter 使用提供程序加载数据是正确的选择吗?
【发布时间】:2021-01-12 21:06:51
【问题描述】:

所以我有一种情况,我从服务器请求一个小部件。 小部件位于主页上,让我们以数据量大且请求需要时间的最坏情况为例。 我是否应该将小部件更改为无状态并创建一个提供程序,在我使用所有初始数据运行应用程序之前我将对其进行初始化? 我是否应该在主页包含小部件的所有数据并将主题作为道具提供,我想念这里管理状态的概念,我来自 vue,我尝试编写我的第一个应用程序,我正在努力如何通过路由构建我的数据。 我想如果有人解释或提供一个很好的来源来展示如何初始化来自第三方的数据 在主页重新加载之前。 哪种方法更好地在应用重新加载之前获取所有应用数据或每次使用现金从 db 请求数据

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您可能在其他应用程序中也看到过这种方法,即在数据加载并准备好显示之前显示启动画面。这种方法主要用于一开始就加载大量数据的应用程序。您可以在 initState 中实现这一点,如下所示。

      @override
      void initState() {
      loadData();
     splashTimer = Timer(Duration(seconds: 4), () {
      _goToHome();
    });
    super.initState();
    }
    

    【讨论】:

    • 虽然这可能会产生所需的行为,但您必须在调用 _goToHome(); 之前检查数据是否实际加载,因为 OP 提到他想在打开主屏幕之前完成所有加载。跨度>
    • 真正的先生,您是对的。我们应该等到数据加载完毕,而不是等待 4 秒。
    • 为您解答。如果我在我的路线之间移动,我可以显示小部件拥有的最后一个数据或它最重建的数据,在这种情况下使用提供程序将使其更可重用?
    【解决方案2】:

    flutter 中的状态管理是一个争论不休的话题,没有最好的方法,但肯定用一个总比没有好。但是也有例外,有时不建议将状态管理添加到应用程序的简单部分。对于您的情况,可以在没有完整状态管理解决方案的情况下完成,例如使用FutureBuilder。或者也可以使用ProviderBloCRedux...

    作为一个幼稚的一般规则,如果状态要在小部件树中传递超过 1 或 2 级,您可能应该根据用例开始寻找状态管理解决方案。正如我已经说过的,没有一种最好的状态管理解决方案。

    此外,只要您知道自己在做什么,就可以使用多个,但一般来说,最好不要使用多个。


    关于问题的第二部分,这完全取决于数据的性质及其大小。如果数据很大,用户使用的可能性很小,最好按需加载,同时预先加载所有数据会增加后端的成本。

    然而,提前获取数据,使用户体验更加无缝(在使用应用程序时无需等待,但在应用程序首次加载时他将不得不多等一点)。

    所以如您所见,这是一种平衡。此外,服务器和应用程序进行某种类型的缓存也有好处,因为它有助于减少服务器端的工作并减少手机上的带宽使用。

    一个缓存图像的示例,您可以使用 Cached Network Image Link,示例来自 Flutter Cookbook Link

    【讨论】:

    • ty 我在服务器端使用兑现,我想我会有大数据,所以我尝试平衡它告诉我我的主页是否有广告所以我每次进入时都请求它使用提供者的主页作为外壳
    • 决定是否在某个路由上请求数据通常与提供者或任何状态管理解决方案无关,它仅取决于您的数据。在某些情况下,您的数据在不断变化,您必须每次都更新,有时则相反。正如我所说,这取决于您的数据。
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多