首页 > 解决方案 > 如何将对象列表中的布尔收藏夹保存到 Flutter 中的共享首选项

问题描述

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

型号类:

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);
 },

标签: listflutterbooleansharedpreferencesfavorites

解决方案


导入包:

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;

推荐阅读