Как наклеить данные на виджет Flutter - PullRequest
0 голосов
/ 24 апреля 2020

Я использую FutureBuilder для загрузки моих данных из общих настроек ... вот мой код

Future getData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String dataIn = prefs.getString("clockin");
    return dataIn;
  }

Widget defaultClock() {
    return FutureBuilder(
      future: getData(),
      builder: (context, snap) {
        if (snap.hasData) {
          return Text(snap.data);
        } else {
          return CircularProgressIndicator();
        }
      },
    );
  }

с использованием этого кода ... данные всегда проверяются первыми ... существуют ли данные или нет. ..if not он сначала возвратит CircularProgressIndicator (), а когда ConnectionState.done и snap.hasData == true вернет данные ... так что ... вместо использования Future Builder, есть ли другой метод, чтобы данные всегда вставлять в мой виджет без каких-либо процессов, таких как CircularProgressIndicator (), когда я открываю свое приложение

1 Ответ

1 голос
/ 24 апреля 2020

К сожалению, это невозможно. Это потому, что вы используете Future builder. Данные поступят через некоторое время - будь то 30 миллисекунд или 3 секунды.

Альтернатива - вы извлекаете данные на предыдущем экране и вызываете этот экран вместе с данными. Пример:

screen1.dart вызывает screen2 как:

 string _data = await getData();
 _loadNextScreen(_data);



void _loadNextScreen(string data) {

    Navigator.push(
       context,
      MaterialPageRoute(
         builder: (context) =>
            MyNextScreen(data: _data)
     ),
  );

}

Теперь в screen2 вам не нужно иметь CircularProcessIndicator () или подобное.

...