Как мне взять оператор возврата будущего и поместить его в виджет? - PullRequest
2 голосов
/ 08 мая 2020

Я пытался добавить оператор return для 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                
            ],
          ),
        ),
      ),
    ),
  );
}

Как решить эту проблему? Уже день пытаюсь найти решение. Спасибо за уделенное время!

1 Ответ

3 голосов
/ 08 мая 2020

Вы можете использовать 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

...