我想使用 Flutter 的SharedPreference. 但是注册的首选项在新开始时都是空的(当应用程序已关闭,而不是卸载时)。
设置.dart:
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'); …Run Code Online (Sandbox Code Playgroud) 我阅读了有关在 Flutter 应用程序中初始化 SharedPreferences 的其他答案(例如这个),但我想采取另一条路线:在一开始就初始化 SharedPreferences 对象,然后根据需要将其传递给特定的客户端(又名依赖注入)。
我试图使我的主要方法异步,然后使用 await:
void main() async {
var prefs = await SharedPreferences.getInstance();
runApp(MyApp(prefs));
}
Run Code Online (Sandbox Code Playgroud)
直觉上,我预计执行将停止直到prefs被初始化,然后继续执行runApp。不幸的是,我得到了一个白屏而不是我的用户界面,所以我想我在这里遗漏了一些东西。
我也尝试使用then:
void main() async {
SharedPreferences.getInstance().then((prefs) => runApp(MyApp(prefs)));
}
Run Code Online (Sandbox Code Playgroud)
相同的结果:白屏。
有没有办法在 Flutter 中以这种方式初始化 SharedPreference?
我正在使用 flutter 构建登录屏幕,并在共享首选项中保存用户数据(如果正确)\n然后我在第二个屏幕中测试了保存的数据,它已经保存\n当应用程序关闭并再次打开时,我检查共享pref 但它变成了 null\n那是我的 saveData 和 getData 函数
\n\nString namePref,phonePref, typePref,statePref;\nFuture saveDataPref(String name,String phone, String type, String state )async{\n SharedPreferences pref = await SharedPreferences.getInstance();\n pref.setString(\'phone\', phone);\n pref.setString(\'name\', name);\n pref.setString(\'type\', type);\n pref.setString(\'state\', state);\n pref.commit();\n print(\'pref stored\');\n print(\'${pref.getString(\'phone\')}\');\n}\n\nFuture getDataPref() async{\n SharedPreferences pref = await SharedPreferences.getInstance();\n phonePref = pref.getString(\'phone\');\n namePref = pref.getString(\'name\');\n typePref = pref.getString(\'type\');\n statePref = pref.getString(\'state\');\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我应该提到两件事\n“提交”函数已被弃用\n第二件事是代码正在处理已弃用的提交,但现在不是\ni删除了我所做的所有更改,但它仍然无法在我的设备上工作\和其他设备,不知道为什么!\n如果没有解决方案,是否有其他方法可以替代 flutter 中的共享首选项?\n这就是我使用 saveDataPref() 的地方
\n\nFuture login(BuildContext context) async {\n String password = passwordController.text;\n String phone = phoneController.text;\n print("entered login function");\n …Run Code Online (Sandbox Code Playgroud) 我在page1.dart中冒了一个vlaue,我想从page2.dart或page3.dart访问存储的值,我怎么能实现这个?