Flutter SharedPreference不持久

我想使用Flutter的保存用户首选项SharedPreference。但是注册的首选项在新的开始时为空(应用程序已关闭时,并非没有问题)。

import 'package:flutter/material.dart';

import 'package:shared_preferences/shared_preferences.dart';

class SettingsPage extends StatefulWidget{

@override

_SettingsPageState createState() => new _SettingsPageState();

}

class _SettingsPageState extends State<SettingsPage>{

bool _param1IsON;

bool _param2IsON;

bool _param3IsON;

@override

void initState() {

super.initState();

_param1IsON = false;

_param2IsON = false;

_param3IsON = false;

loadPreferences();

}

Future<Null> loadPreferences() async {

SharedPreferences _preferences = await SharedPreferences.getInstance();

if(_preferences.getBool('setted') == null || !_preferences.getBool('setted'))

SharedPreferences.setMockInitialValues({}); // Library fix line

bool param1IsON = _preferences.getBool('param1IsON');

bool param2IsON = _preferences.getBool('param2IsON');

bool param3IsON = _preferences.getBool('param3IsON');

setState(() {

_param1IsON = (param1IsON != null)? param1IsON : _param1IsON;

_param2IsON = (param2IsON != null)? param2IsON : _param2IsON;

_param3IsON = (param3IsON != null)? param3IsON : _param3IsON;

});

_preferences.setBool('setted', true);

}

Future<Null> setBoolSettings(String key, bool value) async {

switch(key){

case 'param1IsON':

setState(() {

_param1IsON = value;

});

break;

case 'param2IsON':

setState(() {

_param2IsON = value;

});

break;

case 'param3IsON':

setState(() {

_param3IsON = value;

});

break;

default:

print("Unknown settings '$key'");

}

SharedPreferences _preferences = await SharedPreferences.getInstance();

await _preferences.setBool(key, value);

}

@override

Widget build(BuildContext context) {

return new ListView(

children: <Widget>[

new ListTile(

title: new Text(Param 1'),

trailing: new Switch(value: _param1IsON,

onChanged: (bool newValue) {

setBoolSettings('param1IsON', newValue);

}),

),

new ListTile(

title: new Text('Param 2'),

trailing: new Switch(value: _param2IsON,

onChanged: (bool newValue) {

setBoolSettings('param2IsON', newValue);

}),

),

new ListTile(

title: new Text('Param 3'),

trailing: new Switch(value: _param3IsON,

onChanged:

(bool newValue) {

setBoolSettings('param3IsON', newValue);

}),

),

]

);

}

}

午餐时有3个参数false。如果我打开其中一个,请等待2秒钟(这不是异步问题),然后关闭应用程序并再次启动…我的所有参数均为false

午餐时有3个参数false。我打开其中之一。我关闭了应用程序。重新开始。我打开的上一个参数仍然是true

回答:

我遇到了同样的问题,并通过在顶部添加在Android /../ MainActivity.java中进行了修复:

import io.flutter.plugins.GeneratedPluginRegistrant;

以及在super.onCreate(savedInstanceState)下;

GeneratedPluginRegistrant.registerWith(this);

问题来自使用

SharedPreferences.setMockInitialValues({});

我从Flutter Test

MissingPluginException获得了它,但似乎清除了所有共享的首选项。

但是,如果删除SharedPreferences.setMockInitialValues({});并在MainActivity.java中没有上面的两行,则会得到:

MissingPluginException(在通道抖动上未找到方法getAll的实现:plugins.flutter.io/shared_preferences)

希望对您有所帮助!

以上是 Flutter SharedPreference不持久 的全部内容, 来源链接: utcz.com/qa/417371.html

回到顶部