是否有其他方法可以在提供程序 Flutter 中更新自定义列表视图中的数据
Posted
技术标签:
【中文标题】是否有其他方法可以在提供程序 Flutter 中更新自定义列表视图中的数据【英文标题】:Is there other method to update data in custom listview in provider Flutter 【发布时间】:2020-11-09 16:13:48 【问题描述】:我正在从 firebase 获取数据并显示在列表视图中。我将数据存储在列表中,然后通知它,但列表长度仍然为空。 我研究了所有相关问题,但仍未得到解决方案。
每当我在 firebase 中添加一些新数据时,我都希望它同时出现在 listview 中。因此,我在这里使用提供者。也请给我一些想法。
提前谢谢你
这是代码
class Home121 extends StatefulWidget
@override
_Home121State createState() => _Home121State();
final fb = FirebaseDatabase.instance.reference().child("Data");
@override
Widget build(BuildContext context)
Future<void> StoreData() async
dynamic key=CreateCryptoRandomString(32);
fb.child(key).set(
"id": key,
"link": "EasyCoding",
).then((value)
ShowToastNow();
);
return ChangeNotifierProvider<TaskManager>(
create: (context) => TaskManager(),
child: Scaffold(
appBar: AppBar(
title: Text("Kkkk"),
),
body: Container(
margin: EdgeInsets.all(
8,
),
child: Consumer<TaskManager>(
builder: (context, myModel, child)
return myModel.list.length==0? Text("zero"):ListView.builder(
itemCount:myModel.list.length,
itemBuilder: (context,index)
return Text(
myModel.list[index].Name,
style: TextStyle(
fontSize: 20,
),
);
,
);
)
),
)
);
@override
void initState()
TaskManager task=TaskManager();
task.GetData();
class TaskManager extends ChangeNotifier
List<Model> list=new List();
GetData()
//get data here
AddNewTask()
// add data to databse
list.add(model);
notifyListeners();
编辑:
class MyClass extends StatelessWidget
@override
Widget build(BuildContext context)
return ChangeNotifierProvider<TaskManager>(
create: (context) => TaskManager(),
child: Home121());
【问题讨论】:
【参考方案1】:这是因为在initState()
中,您正在创建TaskManager
的另一个实例并在该实例上调用GetData()
方法。
因此Consumer
小部件使用的TaskManager
实例不同,因此其中的列表始终为空。
相反,您需要在 initState()
.. 中执行此操作。
void initState()
TaskManager task = Provider.of<TaskManager>(context);
task.GetData();
通过这样做,您在 Consumer
小部件使用的同一实例上调用 GetData()
方法。
【讨论】:
谢谢先生,但现在它给出了太多错误,例如在此 Home121 小部件上方找不到正确的 ProviderBuildContext
。有几种常见的情况:build()
方法中删除ChangeNotifierProvider<TaskManager>
,并用ChangeNotifierProvider<TaskManager>
包裹Home121()
小部件。
仍然报错:在 _Home121State.initState() 完成之前调用了dependOnInheritedElement()。
您能否编辑问题以包括您如何对代码进行最后一次更改?
不确定,但您可以删除它并尝试用ChangeNotifierProvider<TaskManager>
包裹MaterialApp()
吗?以上是关于是否有其他方法可以在提供程序 Flutter 中更新自定义列表视图中的数据的主要内容,如果未能解决你的问题,请参考以下文章
满足 'firebase_admob' 的规范,但它们需要 Flutter 中更高的最小部署目标
有啥方法可以将提供者依赖注入到 Flutter 中的普通类中?