Flutter Flitter中最喜欢的按钮在重新启动应用程序中不受欢迎
我有一个带有收藏夹图标的ListView项目,我想添加功能,以便将列表添加到收藏夹列表中。数据已成功添加到收藏夹列表。 这里是主页Flutter Flitter中最喜欢的按钮在重新启动应用程序中不受欢迎,flutter,dart,Flutter,Dart,我有一个带有收藏夹图标的ListView项目,我想添加功能,以便将列表添加到收藏夹列表中。数据已成功添加到收藏夹列表。 这里是主页 body: ListView.builder( itemCount: 100, cacheExtent: 20.0, padding: const EdgeInsets.symmetric(vertical: 16), itemBuilder: (context, index) => ItemTi
body: ListView.builder(
itemCount: 100,
cacheExtent: 20.0,
padding: const EdgeInsets.symmetric(vertical: 16),
itemBuilder: (context, index) => ItemTile(index),
),
还有我用过的ListTile类
var favoritesList = Provider.of<Favorites>(context);
child: ListTile(
leading: CircleAvatar(
backgroundColor: Colors.primaries[index % Colors.primaries.length],
),
title: Text(
'Item $index',
key: Key('text_$index'),
),
trailing: IconButton(
key: Key('icon_$index'),
icon: favoritesList.items.contains(index)
? Icon(Icons.favorite, color: Colors.redAccent)
: Icon(Icons.favorite_border),
onPressed: () {
!favoritesList.items.contains(index)
? favoritesList.add(index)
: favoritesList.remove(index);
Scaffold.of(context).showSnackBar(
SnackBar(
content: Text(favoritesList.items.contains(index)
? 'Added to favorites.'
: 'Removed from favorites.'),
duration: Duration(seconds: 1),
),
);
},
),
),
var-favoritesList=Provider.of(上下文);
孩子:ListTile(
领先:CircleAvatar(
背景色:Colors.primaries[索引%Colors.primaries.length],
),
标题:正文(
“项目$index”,
key:key('text_$index'),
),
尾随:图标按钮(
key:key('icon_$index'),
图标:favoritesList.items.contains(索引)
?图标(图标。收藏夹,颜色:颜色。红色重音)
:图标(图标。收藏夹边框),
已按下:(){
!favoritesList.items.contains(索引)
?收藏夹列表添加(索引)
:收藏夹列表。删除(索引);
Scaffold.of(上下文).showSnackBar(
小吃条(
内容:文本(favoritesList.items.contains(索引)
?“已添加到收藏夹。”
:“已从收藏夹中删除。”),
持续时间:持续时间(秒数:1),
),
);
},
),
),
我有一个模特班的最爱
class Favorites extends ChangeNotifier {
final List<int> _favoriteItems = [];
List<int> get items => _favoriteItems;
void add(int itemNo) {
_favoriteItems.add(itemNo);
notifyListeners();
}
void remove(int itemNo) {
_favoriteItems.remove(itemNo);
notifyListeners();
}
}
类收藏夹扩展了ChangeNotifier{
最终列表_favoriteItems=[];
列表获取项目=>\u收藏夹项目;
无效添加(int itemNo){
_favoriteItems.add(itemNo);
notifyListeners();
}
无效删除(int itemNo){
_favoriteItems.remove(itemNo);
notifyListeners();
}
}
在我最喜欢的页面。我正在完善一切,也可以删除喜爱的项目,但当我重新打开我的应用程序时,我没有得到任何喜爱的项目
这是我的个人主页
body: Consumer<Favorites>(
builder: (context, value, child) => ListView.builder(
itemCount: value.items.length,
padding: const EdgeInsets.symmetric(vertical: 16),
itemBuilder: (context, index) => FavoriteItemTile(value.items[index]),
),
),
主体:消费者(
生成器:(上下文、值、子项)=>ListView.builder(
itemCount:value.items.length,
填充:常量边集。对称(垂直:16),
itemBuilder:(上下文,索引)=>FavoriteItemTile(value.items[index]),
),
),
收藏夹项目磁砖
child: ListTile(
leading: CircleAvatar(
backgroundColor: Colors.primaries[itemNo % Colors.primaries.length],
),
title: Text(
'Item $itemNo',
key: Key('favorites_text_$itemNo'),
),
trailing: IconButton(
key: Key('remove_icon_$itemNo'),
icon: Icon(Icons.close),
onPressed: () {
Provider.of<Favorites>(context, listen: false).remove(itemNo);
Scaffold.of(context).showSnackBar(
SnackBar(
content: Text('Removed from favorites.'),
duration: Duration(seconds: 1),
),
);
},
),
),
child:ListTile(
领先:CircleAvatar(
backgroundColor:Color.primaries[itemNo%Color.primaries.length],
),
标题:正文(
'项目$itemNo',
key:key('favorites\u text\u$itemNo'),
),
尾随:图标按钮(
key:key('remove_icon_u$itemNo'),
图标:图标(Icons.close),
已按下:(){
Provider.of(context,listen:false)。remove(itemNo);
Scaffold.of(上下文).showSnackBar(
小吃条(
内容:文本(“从收藏夹中删除”),
持续时间:持续时间(秒数:1),
),
);
},
),
),
请提供解决方案,我可以与提供商一起使用共享首选项。一个选项是,您可以根据共享首选项中的索引值进行存储,并查询该索引值,以查看是否将其添加为收藏夹。但是,随着收藏夹数量的增加,它将不再有效,尽管它仍然是一个选项。如果您想在设备上存储us
文件(pathToFile)。写入(dataAsString)
您可能希望使用jsonEncode(listofNumber)
将数据保存为json,并使用jsonDecode()
说明:
要保存数据,请将其转换为json并保存到设备上的文件
//注意:dataAsMap应该是存储要保存的数据的类映射的实例
Directory localDirectory=等待getApplicationDocumentsDirectory();
文件(localDirectory.path+“/”+“fileName.json”).writeastringsync(jsonEncode(dataAsMap));
要获取数据,请执行以下操作:
Map jsonData=jsonDecode(文件(localDirectory.path+“/”+“fileName.json”).readAsStringSync())
是。您应该使用SharedReferences。添加首选项库和这些代码
对象.省道
class Object1{
bool isLiked;
String name;
const Object1(this.name,this.isLiked);//Whatever fields you need
factory User.fromJson(Map<String, dynamic> parsedJson) {
return new Object1(
name: parsedJson['name'] ?? "",
isLiked: parsedJson['isLiked'] ?? "");
}
Map<String, dynamic> toJson() {
return {
"name": this.name,
"isLiked": this.isLiked
};
}
}
void main(){
setData();
runApp(MyApp);
}
void setData() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
List dataList = [Object1("Name",false).toJson()];//Your items in this format
if prefs.getStringList("lists") == null:
Map decode_options = jsonDecode(dataList);
prefs.setStringList(jsonEncode(Object1.fromJson(decode_options)));
}
现在,我们将在可以过滤的地方获取所有数据,而不是为收藏夹创建自定义类
SharedPreferences prefs = await SharedPreferences.getInstance();
Map objectMap = jsonDecode(await shared_User.getStringList('list'));
List itemList = [];
for (item in objectMap):
itemList.append(User.fromJson(item));
现在,您可以将此项目列表与属性和isLiked功能一起使用,isLiked功能是一个布尔值,用于检查它是否显示。这可能看起来很复杂,但非常简单,但如果您使用firebase之类的数据库,并在重新启动状态重置时将其存储为文档,您的工作会轻松得多。可以将本地数据存储在设备中或数据库中。我想将其保存在设备中。在我的示例中,如何使用此代码,意味着在哪里。不能添加它吗在我的代码中。你能给我提供完整的例子吗?你能给我提供完整的例子吗?看看关于如何读写数据的颤振的例子,你能给我提供完整的例子吗?