flutter - 使用 Navigator 重新加载 bool
问题描述
当我返回主屏幕时,我想重新加载我的布尔值Navigator()
。布尔值是该项目是否在收藏夹中。实际上,当我点击一个收藏按钮,然后我进入收藏页面,我将这个项目删除到这个列表中,然后我回到我的主页,变化是不可见的。我如何通过导航器重新加载它?这是我的代码:
主页.dart
import 'package:flutter/material.dart';
import 'package:my_app_from_scratch/data.dart';
import 'package:my_app_from_scratch/favorite.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class Item {
final String title;
final String description;
final String imageURL;
final int countdown;
final int id;
Item({this.title, this.description, this.imageURL, this.countdown, this.id});
}
class _HomeState extends State<Home> {
List<Item> savedItems = new List<Item>();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
actions: [
IconButton(
icon: Icon(Icons.favorite_border),
onPressed: () => pushToFavorite(context))
],
),
body: ListView.builder(
itemCount: itemData.length,
itemBuilder: (context, index) {
bool isSaved = savedItems.contains(itemData[index]);
return Row(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
itemData[index].title,
style: TextStyle(
fontSize: 22, fontWeight: FontWeight.bold),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(itemData[index].description),
),
],
),
Spacer(),
Padding(
padding: const EdgeInsets.all(12.0),
child: GestureDetector(
child: Icon(
isSaved ? Icons.favorite : Icons.favorite_border,
color: isSaved ? Colors.red : null,
),
onTap: () {
setState(() {
if (isSaved) {
savedItems.remove(itemData[index]);
} else {
savedItems.add(itemData[index]);
}
});
},
),
),
],
);
}));
}
Future pushToFavorite(BuildContext context) {
return Navigator.of(context).push(MaterialPageRoute(
builder: (context) => Favorite(favoriteItem: savedItems)));
}
}
最喜欢的.dart
import 'package:flutter/material.dart';
import 'package:my_app_from_scratch/home.dart';
class Favorite extends StatefulWidget {
final List<Item> favoriteItem;
const Favorite({Key key, @required this.favoriteItem}) : super(key: key);
@override
_FavoriteState createState() => _FavoriteState();
}
class _FavoriteState extends State<Favorite> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Favourite'),
leading: IconButton(
onPressed: Back,
icon: Icon(Icons.arrow_back),
),
),
body: widget.favoriteItem.length > 0
? ListView.builder(
itemCount: widget.favoriteItem.length,
itemBuilder: (context, index) {
bool isSaved =
widget.favoriteItem.contains(widget.favoriteItem[index]);
return Row(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
widget.favoriteItem[index].title,
style: TextStyle(
fontSize: 22, fontWeight: FontWeight.bold),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(widget.favoriteItem[index].description),
),
],
),
Spacer(),
Padding(
padding: const EdgeInsets.all(12.0),
child: GestureDetector(
child: Icon(
isSaved ? Icons.favorite : Icons.favorite_border,
color: isSaved ? Colors.red : null,
),
onTap: () {
setState(() {
if (isSaved) {
widget.favoriteItem
.remove(widget.favoriteItem[index]);
} else {
widget.favoriteItem
.add(widget.favoriteItem[index]);
}
});
},
),
),
],
);
})
: Center(
child: Text('Il n\'y a rien'),
),
);
}
void Back() {
Navigator.pop(
context,
setState(() {})
);
}
}
我是初学者,请帮助我,谢谢!
解决方案
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
final bool isFavorite;
Home({isFavorite = false});
}...
class _HomeState extends State<Home> {
List<Item> savedItems = new List<Item>();
final bool isFavorite;
HomeState({isFavorite});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(...
当您导航到主屏幕时,如果它最喜欢,则将 isFavorite 传递为 true。
推荐阅读
- java - 远程和分布式对象的类比
- ios - 使用 AppsFlyer 和 React Native 启动 Universal Link 时未调用 continueUserActivity
- flutter - 如何在不编辑 Flutter 中的装饰的情况下将 suffixIcon 添加到 TextFormField?
- python - 如何在数组的元素中找到第n次出现,然后在python中用零替换第n次出现后的数字
- python-3.x - 如何在 Django 中通过 FileField 上传 NamedTemporaryFile
- c++ - 指向子类是模板类的基类的共享指针
- python - 就像 cv2.boundingrect 一样,围绕从 mediapipe 手部界标检测返回的所有点创建一个矩形
- javascript - 为什么在 React-Router-Dom 的路由器中需要“历史”?
- java - NullPointerException:尝试调用虚方法bottomnavigation.BottomNavigationView.setOnNavigationItemSelectedListener
- visual-studio-code - 什么 vs 命令从 URI 路径打开 vscode 中的文件?