flutter - 如何在颤振中创建同一提供者的多个实例
问题描述
我正在使用提供程序来获取数据并通知侦听器,如下所示:
class CategoryProvider with ChangeNotifier {
Future<void> getData() async {
......
......
notifyListeners();
}
}
我的CategoryListView
小部件正在收听此提供程序,如下所示:
Widget build(BuildContext context) {
var collectionData = Provider.of<CategoryProvider>(context);
}
我正在推动CategoryListView
如下的新实例:
Navigator.of(context).pushNamed(CategoryListView.routeName);
我正在推送CategoryListView
来自CategoryListView
小部件本身的新实例。它在推送新实例时工作正常,但在导航回来时,所有CategoryListView
小部件都显示最新的小部件的数据,CategoryListView
因为它正在侦听同一个提供程序。如何创建提供者的新实例并将其关联到小部件实例?有没有更好的方法来处理这个问题?
解决方案
我已经解决了它,我正在发布解决方案,以便它可以帮助某人。
provider 的新实例在CategoryListView
以下类中声明:
final CategoryProvider collectionData = CategoryProvider();
同样,我没有将关联数据CategoryListView
作为导航器参数传递,而是将其作为构造函数值传递,以便在initState()
函数中可以访问这些值。
因此,推送一个新的实例CategoryListView
从
Navigator.of(context).pushNamed(CategoryListView.routeName);
至
Navigator.push(context, MaterialPageRoute(builder: (context) =>
CategoryPage(constructorValue) ));
在initState()
函数上,为提供者设置必要的值并进行必要的函数调用。
collectionData.catalogueId = widget.catalogueId;
collectionData.loadNextPage();
On Widget build(BuildContext context)
,监听提供者从
Widget build(BuildContext context) {
var collectionData = Provider.of<CategoryProvider>(context);
}
至
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Color(0xff04063E),
title: Text(widget.catalogueName != null ? widget.catalogueName : ""),
),
body: ChangeNotifierProvider.value(
value: collectionData,
child: Consumer<CategoryProvider>(builder: (_, ctl, __) {
return _buildUI(collectionData);
}),
),
);
}
_buildUI(collectionData)
从提供实例构建 UI 的函数在哪里collectionData
。
此外,在 dispose 上处理提供程序实例:
@override
void dispose() {
collectionData.dispose();
super.dispose();
}
推荐阅读
- c# - 处理 NewtonSoft 反序列化中的错误不起作用
- rss - 如何在 github 页面中阅读 RSS 和显示帖子
- dart - 如何使用颤振制作水彩笔
- maven - 用于功能独立视图的多模块 Maven 项目
- javascript - 从 JS 函数调用函数
- r - 创建数据时,它没有名称
- push-notification - OneSignal - 发送带有玩家 ID 的通知
- android - 使 TextInputLayout 上的标签颜色与 editText 提示文本颜色不同
- reactjs - 在 Apollo React Mutation 组件中自定义变量
- spring-boot - 谷歌应用引擎灵活不加载 Spring Boot 应用程序的上下文路径