Как сохранить избранное bool из списка объектов в общие настройки в Flutter

#list #flutter #boolean #sharedpreferences #favorites

Вопрос:

У меня есть список элементов, которые я хочу, если я нажму на любой из них, его любимый 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();
 

Затем просто вызовите такой вызов внутри любого метода, чтобы установить bool:

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

Если вы хотите получить его позже:

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

Комментарии:

1. Я знаю синтаксис, но я не знаю, куда мне следует поместить этот блок конкретных! в модели класса, в классе поставщика или в пользовательском интерфейсе?! Можете ли вы показать мне мой код, пожалуйста!?

2. И не забывайте, что этот элемент находится внутри списка объектов

3. Вы должны поместить вне этого метода, в область виджета. Вы объявляете переменную в начале виджета, затем вы можете создать асинхронный метод только для набора переменной bool, потому что доступ к памяти асинхронен