如何将对象列表中的布尔收藏夹保存到 Flutter 中的共享首选项

Posted

技术标签:

【中文标题】如何将对象列表中的布尔收藏夹保存到 Flutter 中的共享首选项【英文标题】:How to save a bool favorite from list of object to Shared Preferences in Flutter 【发布时间】:2021-11-20 15:16:45 【问题描述】:

我有一个我想要的项目列表,如果我点击其中任何一个,他的 bool 最喜欢的等于 true 使用共享首选项.. 更详细地说,我有一个带有 bool favorite 属性的对象列表。我想将此布尔值存储到共享首选项..

模型类:

class ZekrModel 
  final String zekrTitle;
  final String zekrImage;
  final String zekrCat;
  final Widget screenWidget;
  bool isFav;

  bool toggleDone() 
   isFav = !isFav;
  

提供者类:

class ZekrProvider with ChangeNotifier

  List<ZekrModel> _zekrList = [
    ZekrModel(
        zekrTitle: 'أذكار المساء',
        zekrImage: 'assets/images/sunset.png',
        zekrCat: 'Azkar',
        screenWidget: AlmasaaScreen(),
    ),
    ZekrModel(
      zekrTitle: 'أذكار الصباح',
      zekrImage: 'assets/images/sunrise.png',
      zekrCat: 'Azkar',
      screenWidget: AlsabahScreen(),
    )
];

  void updateFav(ZekrModel zekrModel) 
    zekrModel.toggleDone();
    notifyListeners();
  

  List<ZekrModel> get favZekr 
    return _zekrList.where((element) => element.isFav).toList();
  

在用户界面中的使用:

 onTap: ()
     value.updateFav(zekrIndex);
 ,

【问题讨论】:

【参考方案1】:

导入包:

import 'package:shared_preferences/shared_preferences.dart';

您的小部件:

class _LoginState extends State<Login> 
  Future<SharedPreferences> _prefs = SharedPreferences.getInstance();

然后,只需在任何方法中调用即可设置布尔值:

final SharedPreferences prefs = await _prefs;
prefs.setBool('logado', true);
prefs.setString('logado_email', people.email);

如果您想稍后检索它:

bool status = prefs.getBool('logado') ?? false;

【讨论】:

我知道语法,但我不知道我应该把这个特定的集团放在哪里!在类模型或提供者类或 ui 中?!你能在我的代码中告诉我吗? 别忘了这个元素在对象列表中 你应该把这个方法放在小部件范围之外。您在小部件的开头声明变量,然后您可以创建一个异步方法仅设置变量 bool,因为内存访问是异步的

以上是关于如何将对象列表中的布尔收藏夹保存到 Flutter 中的共享首选项的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SharedPreferences 从 Flutter 中的列表中保存多个布尔值

将检索到的json转换为flutter中的自定义对象列表

Flutter - 如何从 Firestore 中检索 ID 列表并在 GridView 中显示它们的项目?

Flutter中如何保存每个列表对象的状态

使用 Dart 和 Flutter,我如何将动态小部件中的数据保存到另一个列表中的地图列表中

Flutter:使用共享首选项插件存储保存的收藏列表