'Future <string>'的实例,而不显示值

时间:2019-01-27 15:33:00

标签: dart flutter

我正在使用flutter,我正在尝试从之前设置的shared_preferences中获取一个值,并将其显示在文本小部件中。但是我得到了'Future'的实例而不是值。这是我的代码:

Future<String> getPhone() async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    final String patientPhone = prefs.getString('patientPhone').toString();
        print(patientPhone);

    return patientPhone;
  }

Future<String> phoneOfPatient = getPhone();

Center(child: Text('${phoneOfPatient}'),))

3 个答案:

答案 0 :(得分:2)

await之前缺少prefs.getString(,请使用setState()而不是返回值。 build()不能使用await

  String _patientPhone;

  Future<void> getPhone() async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    final String patientPhone = await /*added */ prefs.getString('patientPhone');
    print(patientPhone);

    setState(() => _patientPhone = patientPhone);
  }

  build() {
    ...
    Center(child: _patientPhone != null ? Text('${_patientPhone}') : Container(),))
  }

答案 1 :(得分:1)

调用返回Future的函数不会阻塞您的代码,这就是为什么将该函数称为异步的原因。相反,它将立即返回一个Future对象,该对象最初是未完成的。

String phoneOfPatient;

Future<void> getPhone() async {
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  final String patientPhone = await /*added */ prefs.getString('patientPhone');

}

func之后像这样打电话。未来的结果仅在未来完成时可用。

您可以使用以下任一关键字访问“未来”的结果:

然后

等待

您可以通过以下两种方式之一使用此函数的结果:

getphone.then((value) =>  {
  print(value);               // here will be printed patientPhone numbers.
  phoneOfPatient = value;
});

Future<void> foo() async {
  String phoneOfPatient = await getphone();
  print(phoneOfPatient);        // here will be printed patientPhone numbers.
}

答案 2 :(得分:0)

如果您没有使用 awaitasync 的选项,您可以执行以下操作。

getPhone().then((value){
 print(value);
});

然后为它们分配一个变量。由此,您将获得 value 的结果。