【问题标题】:Flutter - SharedPreference not saving value - Returning NULL all timeFlutter - SharedPreference 不保存值 - 一直返回 NULL
【发布时间】:2021-03-02 19:53:17
【问题描述】:

我在 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()))
  }

【问题讨论】:

    标签: flutter sharedpreferences flutter-dependencies flutter-sharedpreference


    【解决方案1】:

    因为你没有在调用 saveLoginInfo 方法之前添加等待。并且 sharedpreferences 保存方法返回“未来”

    调用saveLoginInfo

    之前需要添加await

    你的代码应该是:

    await  Preference.saveLoginInfo(value.verifyUserLoginResult),
    

    【讨论】:

    • 我曾尝试在调用方法之前添加await,但我无法做到。你可以检查我编辑的问题。它给了我一个警告。
    【解决方案2】:

    你怎么打电话给Preference.isLoggedIn()?也许你不等待结果?

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 2021-09-28
      • 2020-11-10
      • 2020-07-12
      相关资源
      最近更新 更多