首页 > 解决方案 > 如何获取未来的返回语句并将其放入小部件中?

问题描述

我一直在尝试在小部件中添加 Future 的返回语句。这是我的未来代码:

Future<Widget> readName() async {
  try {
    final file = await _localNames;

    // Read the file
    String contents = await file.readAsString();
    return Text('Assignment' + contents);
  } catch (e) {
    // If encountering an error, return 0
    return Text('Error');
  }
}

这是我的小部件:

Widget build(BuildContext ctxt) {
  return MaterialApp(
    home: Scaffold(
      appBar: new AppBar(
        title: new Text("My assignments"),
      ),
      body: Container(
        margin: const EdgeInsets.only(top: 10.0),
        child: Align(
          alignment: Alignment(0, -0.9),
          child: Column(
            children: <Widget>[
              // Need Text Here                
            ],
          ),
        ),
      ),
    ),
  );
}

你如何解决这个问题?我一直试图找出解决方案一天。谢谢你的时间!

标签: androidflutterdart

解决方案


您可以使用 FutureBuilder 从 Future 获取数据并根据需要使用它;

FutureBuilder根据文档是:

基于与 Future 交互的最新快照构建自身的小部件

下面的代码可以很好地使用 FutureBuilder:

Widget build(BuildContext ctxt) {
  return MaterialApp(
    home: Scaffold(
      appBar: new AppBar(
        title: new Text("My assignments"),
      ),
      body: Container(
        margin: const EdgeInsets.only(top: 10.0),
        child: Align(
          alignment: Alignment(0, -0.9),
          child: Column(
            children: <Widget>[
              // Need Text Here
              FutureBuilder<Widget>(
                future: readName(),
                builder: (context, snapshot) {
                  if (snapshot.hasData)
                    return snapshot.data;
                  return Center(child: CircularProgressIndicator());
                }
              ),
            ],
          ),
        ),
      ),
    ),
  );
}

阅读有关 FutureBuilder 的更多信息。检查以下链接: FutureBuilder


推荐阅读