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

У меня есть виджет FutureBuilder, похожий на этот код

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

  Widget defaultClock() {
    print(clockIn);
    return FutureBuilder(
      future: getJam(),
      builder: (context, snap) {
        if (snap.hasData ) {
              print(snap.data);
          return Text(snap.data);
        }
        else{return Text("false");}
      },
    );
  }

проблема в том, что данные всегда запускаются сначала else{return Text("false");}, а затем

if (snap.hasData ) {
              print(snap.data);
          return Text(snap.data);
        }

есть ли способ чтобы предотвратить эту проблему?

1 Ответ

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

вы должны проверить prefs.getString ("часы") содержит любое значение или нет. если он не содержит никакого значения, он вернет значение null, и из-за этого вы получаете только ложный текст.

замените следующую строку в вашем коде, которая заботится о нуле.

String dataIn = prefs.getString("clock") ?? 'default';

Обновлено:

Я думаю, что вы хотите проверить состояние соединения, если состояние соединения установлено, то вы можете проверить, содержат ли данные моментальные снимки или нет.

, если состояние соединения не завершено тогда вы можете показать что-нибудь вроде прогресса inidcator.

if (snap.connectionState == ConnectionState.done) {
                  if (snap.hasData) {
                    print(snap.data);
                    return Text(snap.data);
                  } else {
                    return Text("false");
                  }
                } else {
                  return Text("Loading");
                }
              },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...