我有一个使用Provider软件包的简单应用程序。在使用Provider的类中,我在线获取了一些数据并建立了一个集合。然后,我在其他两个屏幕上使用它。我在main.dart中设置了MultiProvider。
return MultiProvider(
providers: [
ChangeNotifierProvider<UserStationInfoProvider>.value(
value: UserStationInfoProvider(),
),
ChangeNotifierProvider<UserStationList>.value(
value: UserStationList(),
),
],
child: MaterialApp(
在UserStationList中,是我正在上网的项目的列表,以及一个整数,指示用户选择了哪个项目。我在几个屏幕中使用此数据。当我启动仿真器并更改代码并保存代码时,就会出现问题。 main.dart中的代码将再次运行。 重新设置了提供程序,我丢失了项目集合以及保存所选项目的整数。如果我不再次获取数据,那么我将没有任何数据,无论是否获取数据,我都会丢失整数值。
有什么办法解决吗?我开始认为也许我在使用Provider而不应该使用它。
这一直很好。进入
答案 0 :(得分:4)
发生这种情况是因为您是直接在build方法内部创建状态。
这是一种反模式,将使您在小部件重建时失去状态(在热重载时会发生这种情况,不仅如此)。
provider
还明确指出,我们不应该不要使用.value
构造函数来创建值,而应使用默认构造函数。
因此您可以更改您的:
ChangeNotifierProvider.value(
value: MyModel()
)
进入:
ChangeNotifierProvider(
builder: (_) => MyModel()
)