Flutter 颤振-SharedReference不保存值-始终返回NULL
我已使用以下依赖项在颤振中实现:Flutter 颤振-SharedReference不保存值-始终返回NULL,flutter,sharedpreferences,flutter-dependencies,flutter-sharedpreference,Flutter,Sharedpreferences,Flutter Dependencies,Flutter Sharedpreference,我已使用以下依赖项在颤振中实现: shared_preferences: ^0.5.12+4 我喜欢的课程: class Preference { static Future<SharedPreferences> _prefs = SharedPreferences.getInstance(); static saveLoginInfo(VerifyUserLoginResult verifyUserLoginResult) async { SharedPref
shared_preferences: ^0.5.12+4
我喜欢的课程:
class Preference {
static Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
static saveLoginInfo(VerifyUserLoginResult verifyUserLoginResult) async {
SharedPreferences pref = await _prefs;
pref
.setString("user_login", jsonEncode(verifyUserLoginResult))
.then((value) => print('User Login Value Saved : $value'));
}
static Future<bool> isLoggedIn() async {
SharedPreferences pref = await _prefs;
print('is Logged In : ${pref.getString("user_login")}');
return pref.getString("user_login") != null;
}
}
有人能帮我优先保存JSON吗?我还想检查是否保存了JSON,如果已经登录,则显示另一个屏幕
编辑:
我调用了方法来保存字符串,如下所示:
if (value.verifyUserLoginResult.mID == '1')
{
Preference.saveLoginInfo(value.verifyUserLoginResult),
Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context) => Dashboard()))
}
因为您没有在调用saveLoginInfo方法之前添加wait。和SharedReferences保存方法返回“future” 在调用saveLoginInfo之前,您需要添加wait 您的代码应该是:
await Preference.saveLoginInfo(value.verifyUserLoginResult),
您如何调用
Preference.isLoggedIn()
?也许你不是在等待结果
我用一个测试用例复制了你的代码,一切都按预期进行了
省道
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
class Preference {
static Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
static saveLoginInfo(dynamic verifyUserLoginResult) async {
SharedPreferences pref = await _prefs;
pref
.setString("user_login", jsonEncode(verifyUserLoginResult))
.then((value) => print('User Login Value Saved : $value'));
}
static Future<bool> isLoggedIn() async {
SharedPreferences pref = await _prefs;
return pref.getString("user_login") != null;
}
}
导入'dart:convert';
导入“package:shared_preferences/shared_preferences.dart”;
阶级偏好{
静态未来_prefs=SharedReferences.getInstance();
静态saveLoginInfo(动态verifyUserLoginResult)异步{
SharedReferences pref=等待优先权;
优先股
.setString(“用户登录”,JSONECODE(verifyUserLoginResult))
。然后((value)=>print('User Login value Saved:$value');
}
静态未来isLoggedIn()异步{
SharedReferences pref=等待优先权;
返回pref.getString(“用户登录”)!=null;
}
}
首选项测试
import 'package:flutter_apph/Preferences.dart';
import 'package:flutter_test/flutter_test.dart';
void main(){
test('sharedprefs',() async {
Map<String,Map<String,String>> value = {
"verifyUserLoginResult" : {
"mID" : "1"
}
};
if (value['verifyUserLoginResult']['mID'] == '1')
{
await Preference.saveLoginInfo(value['verifyUserLoginResult']);
expect(
await Preference.isLoggedIn(),
true);
}
});
}
import'package:flatter_apph/Preferences.dart';
进口“包装:颤振试验/颤振试验.dart”;
void main(){
测试('sharedprefs',()异步{
映射值={
“verifyUserLoginResult”:{
“中”:“1”
}
};
如果(值['verifyUserLoginResult']['mID']=='1')
{
wait Preference.saveLoginInfo(值['verifyUserLoginResult']);
期待(
等待首选项。isLoggedIn(),
正确的);
}
});
}
我尝试在调用方法之前添加wait
,但无法完成。你可以检查我编辑的问题。这给了我一个警告。
import 'package:flutter_apph/Preferences.dart';
import 'package:flutter_test/flutter_test.dart';
void main(){
test('sharedprefs',() async {
Map<String,Map<String,String>> value = {
"verifyUserLoginResult" : {
"mID" : "1"
}
};
if (value['verifyUserLoginResult']['mID'] == '1')
{
await Preference.saveLoginInfo(value['verifyUserLoginResult']);
expect(
await Preference.isLoggedIn(),
true);
}
});
}