Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 颤振-如何在非异步方法中从共享首选项中获取值_Dart_Flutter - Fatal编程技术网

Dart 颤振-如何在非异步方法中从共享首选项中获取值

Dart 颤振-如何在非异步方法中从共享首选项中获取值,dart,flutter,Dart,Flutter,我试图从类的getter方法中获取保存在SharedReferences中的一些值。但是SharedReferences.getInstance()返回一个Future。是否有一种方法可以在非异步getter方法中获取SharedReferences对象,例如: import 'package:shared_preferences/shared_preferences.dart'; class MyClass { get someValue { return _sharedPref

我试图从类的getter方法中获取保存在
SharedReferences
中的一些值。但是
SharedReferences.getInstance()
返回一个
Future
。是否有一种方法可以在非
异步
getter方法中获取
SharedReferences
对象,例如:

import 'package:shared_preferences/shared_preferences.dart';

class MyClass {
  get someValue {
    return _sharedPreferencesObject.getString("someKey");
  } 
}

Dart中是否有类似于C#中的
.Result
属性的内容,例如
getSomethingAsync().Result
()?

您可以在
initState()
中执行此操作,然后在调用
setState()
后更新
build()
方法。另一种方法是使用
FutureBuilder()


您可以使用
FutureBuilder()

SharedReferences SharedRefers;
@凌驾
小部件构建(构建上下文){
回归未来建设者(
未来:_getPrefs(),
生成器:(上下文,快照){
if(snapshot.hasData){
返回finalwidget();
}
返回CircularProgressIndicator();//或其他一些小部件
},
);
}
Future\u getPrefs()异步{
sharedPrefs=等待SharedPreferences.getInstance();
}

您可以调用
initState()
上的函数并将SharedReferences保存在变量中,这样您就可以在非异步方法中使用,如下所示:

SharedPreferences prefs;

Future<void> loadPrefs() async {
  prefs = await SharedPreferences.getInstance();
}

@override
void initState(){
  super.initState();
  loadPrefs();
}
SharedReferences优先权;
Future loadPrefs()异步{
prefs=等待SharedReferences.getInstance();
}
@凌驾
void initState(){
super.initState();
loadPrefs();
}

我建议您使用GetStorage

您将能够在不等待的情况下获取值

main.dart

await GetStorage.init();
runApp(MyApp());



  static bool isFirstOpen() {
    final box = GetStorage();
    return box.read("isFirstOpen") ?? true;
  }

  static  setFirstOpen(bool isopen) {
    final box = GetStorage();
    box.write("isFirstOpen", isopen);
  }
存储。省道

await GetStorage.init();
runApp(MyApp());



  static bool isFirstOpen() {
    final box = GetStorage();
    return box.read("isFirstOpen") ?? true;
  }

  static  setFirstOpen(bool isopen) {
    final box = GetStorage();
    box.write("isFirstOpen", isopen);
  }

使用一个
FutureBuilder
可能重复的Hi@CopsOnRoad,我知道这些解决方案,但我的问题更多的是,是否有一种方法可以等待将来的对象以非异步方法返回。我编辑了我的问题以使它更清晰(我希望如此)。@Dean,我不知道您的用例,但最好是在应用程序启动时获得
SharedReferences
,然后在需要时使用它。您还可以在应用程序的初始屏幕中实例化它。@CopsOnRoad,这就是我目前正在做的事情。我的问题的答案是“这是不可能的”。我认为这是行不通的,因为异步在这种情况下是行不通的initState@LatheeshVMVilla
setState
是在匿名函数中调用的(不是在
initState
函数中),因此上述代码可以工作。我不介意投反对票,只要有道理。对不起。也许我错了,只是想理解。等待SharedReferences.getInstance();这是一个异步调用,因此根据文档,initState无法处理其中的异步调用。调用setState没有问题@LatheeshVMVilla我在哪里使用了
await
内部
initState
?您的代码中没有await调用,这就是为什么我觉得它不正确的原因。SharedReferences prefs=等待SharedReferences.getInstance();