Dart 应用程序关闭时,共享首选项将被删除
我正在使用flatter构建一个登录屏幕,并将用户数据保存在共享首选项中(如果正确的话) 然后我在第二个屏幕中测试了保存的数据,它已经保存了 当应用程序关闭并再次打开时,我检查共享pref,但它变为空 这是我的saveData和getData函数Dart 应用程序关闭时,共享首选项将被删除,dart,sharedpreferences,flutter,Dart,Sharedpreferences,Flutter,我正在使用flatter构建一个登录屏幕,并将用户数据保存在共享首选项中(如果正确的话) 然后我在第二个屏幕中测试了保存的数据,它已经保存了 当应用程序关闭并再次打开时,我检查共享pref,但它变为空 这是我的saveData和getData函数 String namePref,phonePref, typePref,statePref; Future saveDataPref(String name,String phone, String type, String state )async{
String namePref,phonePref, typePref,statePref;
Future saveDataPref(String name,String phone, String type, String state )async{
SharedPreferences pref = await SharedPreferences.getInstance();
pref.setString('phone', phone);
pref.setString('name', name);
pref.setString('type', type);
pref.setString('state', state);
pref.commit();
print('pref stored');
print('${pref.getString('phone')}');
}
Future getDataPref() async{
SharedPreferences pref = await SharedPreferences.getInstance();
phonePref = pref.getString('phone');
namePref = pref.getString('name');
typePref = pref.getString('type');
statePref = pref.getString('state');
}
我应该提两件事
不推荐使用“提交”函数
第二个问题是代码正在使用不推荐的提交,但现在不是
我删除了我所做的所有更改,但仍然不起作用
在我的设备和其他设备上,不知道为什么!
如果没有解决方案,在颤振中除了共享偏好还有其他选择吗?
这就是我使用saveDataPref()的地方
我在这里找到了解决方案: 请注意,如果像我以前那样在主类之外调用共享首选项,那么它将不起作用。 您应该在initState()内调用它。 这项工作:
@override
void initState() {
super.initState();
readFile('phone');
SharedPreferences.getInstance().then((SharedPreferences sp) {
sharedPreferences = sp;
ph = sp.getString('phone');
setState(() {});
});
}
我得出的结论是,我在应用程序的某个地方使用了prefs.clear(),因此数据丢失了。确保在任何活动中都没有写入prefs.clear()。我不使用commit()。只需设置字符串()即可,效果非常好。你在应用程序中的任何地方调用pref.clear()吗?我删除了它但仍然不工作我在另一个屏幕中使用了remove并删除了该函数,但仍然不工作你从哪里调用
saveDataPref()
from?我用saveDataPref()和getDataPref()更新了问题的位置,它是主类文件中的一个全局方法。我认为该值存储在缓存中,如这里所述:如何将其保存到设备内存而不是缓存中?它仍然不适用于我:。
if (users[phone].ordered == "true") {
Navigator.push(
context, MaterialPageRoute(builder: (context) => OrderBinding()));
return;
} else {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => UserApp(
userName: users[phone].name,
userPhone: users[phone].phone,
)));
return;
}
} else {
ShowDialogue(
"تم إدخال كلمة السر بشكل خاطئ من فضلك تأكد من كلمة السر", context);
}
}
Map<String, Driver> drivers = new Map<String, Driver>();
drivers = await getDriverDataFromFireStore();
if (await DriverCheck(phone)) {
// user is registered check if it is the right password
if (drivers[phone].password == password) {
//check if driver account is activated
if (drivers[phone].activation == "true") {
saveDataPref(drivers[phone].phone, drivers[phone].name, "driver",
drivers[phone].activation);
Navigator.push(
context, MaterialPageRoute(builder: (context) => DriverApp()));
} else {
ShowDialogue(
"لم يتم تفعيل حسابكم بعد يرجى الانتظار وسيتم التواصل معكم قريباً",
context);
}
} else {
ShowDialogue(
"تم إدخال كلمة السر بشكل خاطئ من فضلك تأكد من كلمة السر", context);
}
} else {
ShowDialogue(
"لم يتم تسجيل هذا المستخدم من فضلك قم بانشاء حساب اولا", context);
}
}
checkSigned() {
getDataPref();
print("${phonePref}");
print("${namePref}");
if (phonePref != null) {
print("${phonePref}");
if (phonePref != "") {
print("${phonePref}");
return new UserApp(
userName: namePref,
userPhone: phonePref,
);
} else {
return new MyHomePage();
}
} else {
return new MyHomePage();
}
}
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Generated App',
theme: new ThemeData(
primarySwatch: Colors.lightGreen,
primaryColor: const Color(0xFF8BC34A),
accentColor: const Color(0xFF8BC34A),
canvasColor: const Color(0xFFEEEEEE),
),
home: checkSigned(),
);
}
}
@override
void initState() {
super.initState();
readFile('phone');
SharedPreferences.getInstance().then((SharedPreferences sp) {
sharedPreferences = sp;
ph = sp.getString('phone');
setState(() {});
});
}