Flutter shared_preferences 不存储数据

Flutter shared_preferences not storing data

我正在尝试在我的 Flutter 应用程序中实现包 shared_preferences。

我已将包包含在 pubspec.yaml 文件中。

我创建了一个名为 StorageUtil 的助手 class 来管理项目中的 shared_preferences。

这是shared_preferences_util.dart:

import 'package:shared_preferences/shared_preferences.dart';

class StorageUtil {
  static StorageUtil _storageUtil;
  static SharedPreferences _preferences;

  static Future<StorageUtil> getInstance() async {
    if (_storageUtil == null) {
      // keep local instance till it is fully initialized.
      var secureStorage = StorageUtil._();
      await secureStorage._init();
      _storageUtil = secureStorage;
    }
    return _storageUtil;
  }

  StorageUtil._();
  Future _init() async {
    _preferences = await SharedPreferences.getInstance();
  }

  // get string
  static String getString(String key, {String defValue = ''}) {
    if (_preferences == null) return defValue;
    return _preferences.getString(key) ?? defValue;
  }

  // put string
  static Future<bool> putString(String key, String value) {
    if (_preferences == null) return null;
    return _preferences.setString(key, value);
  }
}

然后在文件 notification_service.dart 中创建一个项目 shared_preferences:

  _refreshToken() {
    _firebaseMessaging.getToken().then((token) async {
      print('token: $token');
      StorageUtil.putString("token_firebase", token.toString());
      print('token despues de shared:' + token);
    }, onError: _tokenRefreshFailure);
  }

打印输出:

I/flutter (29912): token despues ed shared:fy0Pk1asTOejYrWYXbULBu:APA91bGk2TLqdiLbGvZp7IrTggLfjwYcvhENB83RQj-7x1CEPoou_cY7Rq0eB6rFqEfb386pxSsWAogRc8HwQjK0Y9q9kyKgzSJ6ZCQ3qhFBIjaLhS2sZKJ-N1k7hdrRHdboyUb3WvGS

后来我尝试按如下方式获取 shared_preferences 项:

final _tokenFb = StorageUtil.getString("token_firebase");

但它始终是空字符串。

print("Token firebase en authbloc: " + _tokenFb);

输出:

I/flutter (29912): Token firebase en authbloc: 

我错过了什么?

_preferences 为空,因为您没有在 class 上调用 await StorageUtil.getInstance()。因此 _init 方法没有被调用并且 SharedPreferences 没有被初始化。

你应该这样称呼它:

  _refreshToken() {
    _firebaseMessaging.getToken().then((token) async {
      print('token: $token');
      var storageUtil = await StorageUtil.getInstance();
      storageUtil.putString("token_firebase", token.toString());
      print('token despues de shared:' + token);
    }, onError: _tokenRefreshFailure);
  }

当然 StorageUtil.getString 也是如此。