微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flutter:在提供商槽功能中更新列表时,我的屏幕没有更新

如何解决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 举报,一经查实,本站将立刻删除。