【发布时间】:2021-01-16 22:15:39
【问题描述】:
我的主文件中的提供程序中有一个包含函数的列表。如果我通过小部件中的功能更新此列表(通过按下按钮),它似乎可以工作,但不会改变屏幕上的任何内容...
我有两个 Screens,应该使用相同的 List 归档,所以我需要 Provider Functions。 在我看来(当然不一定是正确的)我对功能进行了正确的编码,所以问题可能是屏幕没有更新,尽管我使用了消费者。如果您能告诉我代码中的错误,那就太好了。
如果你能看看我的问题,我会很高兴 - 谢谢!
主文件:
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
【问题讨论】:
-
您没有参考正确的列表
-
这是什么意思?我不明白我必须在哪里进行更改,因为在我的小部件中我只调用函数,这不起作用......如果你能告诉我我必须在哪个地方更改代码,那就太好了。谢谢;)
-
当然,检查答案,看看这是否适合你,但可能存在一些语法错误。
标签: list flutter dart provider flutter-change-notifier