在VSCode中保存时,Flutter Provider软件包会重新初始化

时间:2019-10-03 03:40:59

标签: flutter

我有一个使用Provider软件包的简单应用程序。在使用Provider的类中,我在线获取了一些数据并建立了一个集合。然后,我在其他两个屏幕上使用它。我在main.dart中设置了MultiProvider。

return MultiProvider(
  providers: [
    ChangeNotifierProvider<UserStationInfoProvider>.value(
      value: UserStationInfoProvider(),
    ),
    ChangeNotifierProvider<UserStationList>.value(
      value: UserStationList(),
    ),
  ],
  child: MaterialApp(

在UserStationList中,是我正在上网的项目的列表,以及一个整数,指示用户选择了哪个项目。我在几个屏幕中使用此数据。当我启动仿真器并更改代码并保存代码时,就会出现问题。 main.dart中的代码将再次运行。  重新设置了提供程序,我丢失了项目集合以及保存所选项目的整数。如果我不再次获取数据,那么我将没有任何数据,无论是否获取数据,我都会丢失整数值。

有什么办法解决吗?我开始认为也许我在使用Provider而不应该使用它。

这一直很好。进入

1 个答案:

答案 0 :(得分:4)

发生这种情况是因为您是直接在build方法内部创建状态。

这是一种反模式,将使您在小部件重建时失去状态(在热重载时会发生这种情况,不仅如此)。

provider还明确指出,我们不应该不要使用.value构造函数来创建值,而应使用默认构造函数。

因此您可以更改您的:

ChangeNotifierProvider.value(
  value: MyModel()
)

进入:

ChangeNotifierProvider(
  builder: (_) => MyModel()
)