0

我使用以下依赖项在 Flutter 中实现了SharedPreference :

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

我的日志如下:

I/flutter (28468): User Login Value Saved : true
I/flutter (28468): is Logged In null
I/flutter (28468): is Logged In: false

谁能帮我将 JSON 保存在 Preference 中?如果已经登录,我还想检查 JSON 是否已保存以显示另一个屏幕。

编辑:

我已经调用了保存字符串的方法,如下所示:

  if (value.verifyUserLoginResult.mID == '1')
  {
    Preference.saveLoginInfo(value.verifyUserLoginResult),
    Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context) => Dashboard()))
  }
4

2 回答 2

1

因为您没有在调用saveLoginInfo方法之前添加 await 。和 sharedpreferences 保存方法返回“未来”

您需要在调用saveLoginInfo之前添加await

你的代码应该是:

await  Preference.saveLoginInfo(value.verifyUserLoginResult),
于 2020-11-19T13:20:01.840 回答
0

你怎么叫Preference.isLoggedIn()?也许你不等待结果?

我已经用测试用例复制了您的代码,并且一切都按预期工作。

首选项.dart

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

首选项_test.dart

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);
    }
  });
}
于 2020-11-20T09:26:56.373 回答