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
也是如此。
我正在尝试在我的 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
也是如此。