我试图SharedPreferences从类的 getter 方法中获取一些保存在 中的值。但SharedPreferences.getInstance()返回一个Future. 有没有办法SharedPreferences在非asyncgetter 方法中获取对象,例如:
import 'package:shared_preferences/shared_preferences.dart';
class MyClass {
get someValue {
return _sharedPreferencesObject.getString("someKey");
}
}
Run Code Online (Sandbox Code Playgroud)
Dart 中是否有类似于.ResultC# 中的属性的东西,例如getSomethingAsync().Result(https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1.result?view=netframework- 4.7.2 )?
Cop*_*oad 20
您可以使用 FutureBuilder()
SharedPreferences sharedPrefs;
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _getPrefs(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return YourFinalWidget();
}
return CircularProgressIndicator(); // or some other widget
},
);
}
Future<void> _getPrefs() async{
sharedPrefs = await SharedPreferences.getInstance();
}
Run Code Online (Sandbox Code Playgroud)
Cop*_*oad 15
您可以initState()在此调用中和之后执行此操作setState()以更新您的build()方法。另一种方法是使用FutureBuilder()
SharedPreferences sharedPrefs;
@override
void initState() {
super.initState();
SharedPreferences.getInstance().then((prefs) {
setState(() => sharedPrefs = prefs);
});
}
Run Code Online (Sandbox Code Playgroud)
我建议你使用GetStorage
https://pub.dev/packages/get_storage
您无需等待即可获得价值
主程序.dart
await GetStorage.init();
runApp(MyApp());
Run Code Online (Sandbox Code Playgroud)
存储.dart
static bool isFirstOpen() {
final box = GetStorage();
return box.read("isFirstOpen") ?? true;
}
static setFirstOpen(bool isopen) {
final box = GetStorage();
box.write("isFirstOpen", isopen);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12469 次 |
| 最近记录: |