Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振-SharedReference不保存值-始终返回NULL_Flutter_Sharedpreferences_Flutter Dependencies_Flutter Sharedpreference - Fatal编程技术网

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);
    }
  });
}