问题描述
我有一个ListView.builder
的物品,我们可以点击心脏将其添加到收藏夹。我想将添加到“收藏夹”的所有项目放在另一个屏幕的另一个ListView.builder
中。我也希望通过单击心脏可以将收藏夹项替换为收藏夹ListView。我该怎么做?这是我的代码:
Home_screen.dart
import 'package:Flutter/material.dart';
import 'package:cached_network_image/cached_network_image.dart';
import '../recyclerview/data.dart';
import 'package:chrolix/constants.dart';
import 'package:Flutter_countdown_timer/Flutter_countdown_timer.dart';
int itemCount = item.length;
List<bool> selected = new List<bool>();
class MyHomePage extends StatefulWidget {
MyHomePage({Key key,this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
initState() {
for (var i = 0; i < itemCount; i++) {
selected.add(false);
}
super.initState();
}
Icon notFavorite = Icon(Icons.favorite_border,size: 32,);
Icon inFavorite = Icon(Icons.favorite,);
@override
Widget build(BuildContext context) {
return new Scaffold(
body: ListView.builder(
scrollDirection: Axis.vertical,physics: BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()),itemCount: itemCount,itemBuilder: (BuildContext context,int index) {
return Container(
child: new Row(
children: <Widget>[
//Image
new Container(
margin: new EdgeInsets.only(top: 5.0,left: 0.0),child: new CachednetworkImage(
imageUrl: item[index].imageURL,height: MediaQuery.of(context).size.width / 3,width: MediaQuery.of(context).size.width / 2,fit: BoxFit.cover,),new Container(
height: MediaQuery.of(context).size.width / 3,child : new Column(
crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[
//Text
new Row(
mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.start,mainAxisSize: MainAxisSize.min,children: <Widget>[
Spacer(),//Titre
Container(
padding: const EdgeInsets.only(top: 15.0 ),child: Text(
item[index].title,style: kItemTitle,//Decription
Container(
padding: const EdgeInsets.only(left: 10.0,top: 15.0),child:Text(
item[index].description,style: kItemDescription,Spacer(),],Container(
padding: const EdgeInsets.only(top: 10.0),child: CountdownTimer(
daysSymbol: new Text("j "),houRSSymbol: new Text(" : "),minSymbol: new Text(" : "),secSymbol: new Text(""),endTime: item[index].countdown,textStyle: TextStyle(fontSize: 28,fontWeight: FontWeight.bold),onEnd: () {
print('onEnd');
},Container(
padding: const EdgeInsets.only(left: 8.0,top: 8.0),child: Row(
mainAxisAlignment: MainAxisAlignment.start,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[
GestureDetector(
child: selected.elementAt(index) ? inFavorite : notFavorite,onTap: () {
setState(() {
selected[index] = !selected.elementAt(index);
});
},);
}
)
);
}
}
Favorite_screen.dart
import 'package:Flutter/material.dart';
import 'package:chrolix/constants.dart';
import 'package:chrolix/nav.dart';
import 'package:get/get.dart';
class Favoris extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: //Put here the LisView.builder with the favorite items
)
}
}
我没有看到其他可以回答我的问题。谢谢!
更新:我使用了提供商的软件包
解决方法
推荐的方法是使用provider。这用于将变量共享给树下的多个小部件。
这不仅需要编写StackOverflow答案,所以我将把您链接到flutter上的相关文章,该文章基本上解释了您想做的一切: Here is is.
如果链接断开,则可以通过搜索“简单的应用程序状态管理混乱”来找到它