Я пытаюсь использовать общие настройки в своем приложении с шаблоном блока.
Ниже мой код
class PrefsStats {
final bool isMale;
final String name;
final int age;
PrefsStats(this.isMale, this.name, this.age);
}
class PrefsBloc {
final _changePrefernce = BehaviorSubject<PrefsStats>();
Function(PrefsStats) get changePrefs => _changePrefernce.sink.add;
Stream<PrefsStats> get prefrence => _changePrefernce.stream;
SharedPreferences sPrefs;
dispose(){
_changePrefernce?.close();
}
PrefsBloc(){
_loadSharedPreferences();
}
Future<void> _loadSharedPreferences() async {
sPrefs = await SharedPreferences.getInstance();
final namePref = sPrefs.getString("name") ?? "";
final malePref = sPrefs.getBool("male") ?? false;
final agePref = sPrefs.getInt("age") ?? 0;
_changePrefernce.add(PrefsStats(malePref,namePref,agePref));
}
}
final prefsBloc = PrefsBloc();
Я просто хочу вставить данные с помощью одной кнопки и получить данные с помощью другой кнопки из SharedPreferences
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: SafeArea(
child: Column(
children: <Widget>[
SizedBox(
height: 20,
),
RaisedButton(
onPressed: () {
prefsBloc.changePrefs(PrefsStats(true, "argo", 21));
},
child: Text("Insert Data"),
),
SizedBox(
height: 20,
),
RaisedButton(
onPressed: () {
prefsBloc.prefrence.forEach((data){
print(data.name);
});
},
child: Text("Get Data"),
),
SizedBox(
height: 20,
),
],
)),
),
);
}
@override
void dispose() {
prefsBloc?.dispose();
super.dispose();
}
}
Всякий раз, когда я закрываю свое приложение и снова открываю его и нажимаю кнопку «Получить данные» в начале, даже до вставки данных, я получаю значения по умолчанию. Я знаю, что не назначаю ключи во время установки значения, что приводит к путанице в том, как использовать общие настройки с блоком. Другая проблема заключается в том, что всякий раз, когда я устанавливаю данные, код внутри кнопки «Получить данные» вызывается даже до нажатия кнопки «Получить данные», которую я не понимаю.