Flutter / Dart-调用未来的函数 …但只需要返回一个字符串

我有一个异步函数正在调出Firestore来提取数据值。在上一篇文章中,我得到了很多帮助……学到了很多东西……并希望从一个更清洁的问题开始。所以我有以下功能

Future<String> getSetList () async {

DocumentReference set01DocRef = Firestore.instance.collection('sets').document('SET01');

var snapshot = await set01DocRef.get();

songList = snapshot['songs']; //works, get expected text value from FS

return songList;

}

此函数逻辑起作用…我可以将songList var(string var)打印()到控制台,然后从Firestore中看到值。当我尝试调用该函数时:

@override

Widget build(BuildContext context) {

var setList = getSetList();

print('In widget: ' + setList.toString()); //shows as instance of Future<String>

//List<String> items = setList.split('|');

List<String> items = ['Red','White','Blue'];

return new Scaffold(

appBar: new AppBar(

title: new Text(widget.title),

),

该setList变量不是String。当我打印它[print(setList.toString()]时,它显示为Future String的一个实例。

我尝试使用:var setList = await getSetList();但是在等待中显示错误。

任何想法表示赞赏。

回答:

您什么时候需要打电话给未来?

您始终可以创建一个tmp变量并尝试加载它。您不能将期货随机放入构建过程中。如果视图已更改,则需要获取数据,然后调用setState通知小部件。

String _setList = null;

//initState called when the widget is mounted.

void initState() {

super.initState();

if(_setList == null){

getSetList().then(

(String s) => setState(() {_setList = s;})

);

}

}

@override

Widget build(BuildContext context) {

String setList = _setList;

print('In widget: ' + setList.toString()); //shows as instance of Future<String>

if(setList != null){

//List<String> items = setList.split('|');

List<String> items = ['Red','White','Blue'];

return new Scaffold(

appBar: new AppBar(

title: new Text(widget.title),

),

} else { return const CircularProgressIndicator(); }

//Create a progress circle.

我希望我的设置状态没有任何语法错误。

https://docs.flutter.io/flutter/widgets/State/setState.html

https://docs.flutter.io/flutter/widgets/State/initState.html

以上是 Flutter / Dart-调用未来的函数 …但只需要返回一个字符串 的全部内容, 来源链接: utcz.com/qa/399457.html

回到顶部