包含最喜欢的项目的 ListView

Ria*_*nou 2 favorites listview dart flutter

我有一个ListView.builder 带有物品的物品,我们可以单击一颗心来添加到收藏夹。我想将添加到收藏夹的所有项目放在另一个 ListView.builder屏幕的另一个项目中。我也希望通过单击心形可以抑制收藏夹列表视图的收藏夹项目。我怎样才能做到这一点?这是我的代码:

\n

Home_screen.dart

\n
import 'package:flutter/material.dart';\nimport 'package:cached_network_image/cached_network_image.dart';\nimport '../recyclerview/data.dart';\nimport 'package:chrolix/constants.dart';\nimport 'package:flutter_countdown_timer/flutter_countdown_timer.dart';\n\nint itemCount = item.length;\nList<bool> selected = new List<bool>();\n\nclass MyHomePage extends StatefulWidget {\n  MyHomePage({Key key, this.title}) : super(key: key);\n  final String title;\n\n  @override\n  _MyHomePageState createState() => _MyHomePageState();\n}\n\nclass _MyHomePageState extends State<MyHomePage> {\n  @override\n  initState() {\n    for (var i = 0; i < itemCount; i++) {\n    selected.add(false);\n    }\n    super.initState();\n  }\n \n  Icon notFavorite = Icon(Icons.favorite_border, size: 32,);\n  Icon inFavorite = Icon(Icons.favorite, size: 32,);\n\n  @override\n  Widget build(BuildContext context) {\n    return new Scaffold(\n      body:  ListView.builder(\n        scrollDirection: Axis.vertical,\n        physics: BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()),\n        itemCount: itemCount,\n        itemBuilder: (BuildContext context, int index) {\n      return Container(\n        child: new Row(\n          children: <Widget>[\n            //Image\n            new Container(\n              margin: new EdgeInsets.only(top: 5.0, left: 0.0),\n              child: new CachedNetworkImage(\n                imageUrl: item[index].imageURL,\n                height: MediaQuery.of(context).size.width / 3,\n                width: MediaQuery.of(context).size.width / 2,\n                fit: BoxFit.cover,\n              ),\n            ),\n            new Container(\n              height: MediaQuery.of(context).size.width / 3,\n              width: MediaQuery.of(context).size.width / 2,\n              child : new Column(\n                crossAxisAlignment: CrossAxisAlignment.center,\n                children: <Widget>[\n            //Text\n                  new Row(\n                  mainAxisAlignment: MainAxisAlignment.center,\n                  crossAxisAlignment: CrossAxisAlignment.start,\n                  mainAxisSize: MainAxisSize.min,\n                  children: <Widget>[\n                    Spacer(),               \n                   //Titre\n                    Container(\n                    padding: const EdgeInsets.only(top: 15.0 ),\n                    child: Text(\n                      item[index].title,\n                      style: kItemTitle,\n                      ),\n                    ),\n                    //Decription\n                    Container(\n                    padding: const EdgeInsets.only(left: 10.0, top: 15.0),\n                    child:Text(\n                      item[index].description,\n                      style: kItemDescription,\n                      ),\n                    ),\n                    Spacer(),\n                  ],\n                ),\n                Container(\n                padding: const EdgeInsets.only(top: 10.0),\n                child: CountdownTimer(\n                  daysSymbol: new Text("j "),\n                  hoursSymbol: new Text("\xe2\x80\x8a:\xe2\x80\x8a"),\n                  minSymbol: new Text("\xe2\x80\x8a:\xe2\x80\x8a"),\n                  secSymbol: new Text(""),\n                  endTime: item[index].countdown,\n                  textStyle: TextStyle(fontSize: 28, fontWeight: FontWeight.bold),\n                  onEnd: () {\n              print('onEnd');\n            },\n                ),\n                ),\n                Container( \n                  padding: const EdgeInsets.only(left: 8.0, top: 8.0),\n                  child: Row(\n                  mainAxisAlignment: MainAxisAlignment.start,\n                  crossAxisAlignment: CrossAxisAlignment.center,\n                  children: <Widget>[\n                    GestureDetector(\n                    child: selected.elementAt(index) ? inFavorite : notFavorite,\n                    onTap: () {\n                      setState(() {\n                        selected[index] = !selected.elementAt(index);\n                      });\n                    },\n                ),\n                ],),\n              ),\n              ],),\n            ),        \n          ],\n        ),\n      );\n    }\n    )\n  );\n}\n}\n
Run Code Online (Sandbox Code Playgroud)\n

最喜欢的_screen.dart

\n
import 'package:flutter/material.dart';\nimport 'package:chrolix/constants.dart';\nimport 'package:chrolix/nav.dart';\nimport 'package:get/get.dart';\n\n\nclass Favoris extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: //Put here the LisView.builder with the favorite items\n    )\n  }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我没有看到其他可以回答我的问题。谢谢 !

\n

更新:我已经使用了提供商的包

\n

Lul*_*ntu 5

推荐的方法是使用provider。这用于将变量共享到树下的多个小部件。

这需要的不仅仅是 StackOverflow 答案的编写,因此我会将您链接到 flutter 中的一篇相关文章,该文章基本上解释了您想要做的所有事情: 这里是。

如果链接已损坏,您可以通过搜索“简单应用程序状态管理 flutter”找到它