如何解决Flutter:在提供商槽功能中更新列表时,我的屏幕没有更新
我的主文件中有一个提供者具有功能的列表。如果我通过小部件中的功能(通过按按钮)更新此列表,则它似乎可以工作,但不会更改屏幕上的任何内容...
我有两个屏幕,应该使用相同的列表进行归档,因此我需要提供程序功能。 我认为(当然不一定是正确的)我对功能进行了编码,所以问题可能出在屏幕没有更新,我使用了Consumer。如果您能在我的代码中向我显示错误,那就太好了。
如果您能解决我的问题,我将非常高兴-谢谢!
MainFile:
void main() => runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => MyList()),],child: MyApp(),),);
class MyList extends ChangeNotifier {
final List<String> heute = [
'Ereignis 1','Ereignis 2','Ereignis 3','Ereignis 4','Ereignis 5'
];
UnmodifiableListView<String> get items => UnmodifiableListView(heute);
int get totallength => heute.length;
void addItem(String item) {
heute.add(item);
notifyListeners();
}
void deleteItem(int index) {
heute.removeAt(index);
notifyListeners();
}
void removeAll() {
heute.clear();
notifyListeners();
}
}
小部件:
class ContainerListe extends StatefulWidget {
@override
_ContainerListeState createState() => _ContainerListeState();
}
class _ContainerListeState extends State<ContainerListe> {
final heute = MyList();
void addItem(String item) {
setState(() {
heute.addItem(item);});
Navigator.of(context).pop();
}
void removeAll(){setState(() {
setState(() {
heute.removeAll();});
});}
void deleteItem(int index) {
setState(() {
heute.deleteItem(index);
});}
void newEntry() {
showDialog<AlertDialog>(
context: context,builder: (BuildContext context)
{return AddItemDialogWHW(addItem);});}
@override
Widget build(BuildContext context) {
final heute = MyList();
final elemente = heute.items;
return Consumer<MyList>(
builder: (context,mylist,child)
{
return
Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [
Container(
width: 400.0,height: 550.0,child: Align(
alignment: Alignment.bottomCenter,child:
ListView.builder(
itemCount: Provider
.of<MyList>(context,listen: true)
.totallength,itemBuilder: (context,i) {
return
Column(
children: [
ContainerVorlage(
elemente[i],() => deleteItem(i),SizedBox(
height: 15,)
;
},)
)),SizedBox(
height: 40,AddButton(
() => newEntry(),]);
});
}
}
//More Code
解决方法
首先,从_ContainerListeState
删除此行
final heute = MyList();
然后使用您可以使用的MyList
对象中的方法
return Consumer<MyList>(builder: (context,mylist,child)
... // rest code
ContainerVorlage(
elemente[i],() => mylist.deleteItem(i),),
,
您正在根据自己的构建方法创建新对象,并将其用于添加删除操作,它与获得长度的部分无关。
为了正确删除,请使用它,例如:
mylist.deleteItem(i)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。