Начальная страница набора флаттера на основе общих настроек

Браузеры были снисходительны к этому (много лет назад, когда css был молод) и позволяют использовать ID более одного раза.

Однако идентификаторы yes должны быть уникальными и использоваться только один раз.

Если вам нужно использовать css-форматирование более одного раза, используйте CLASS.

1
задан Linesofcode 18 March 2019 в 01:07
поделиться

1 ответ

Ваша проблема в том, что ваш метод сборки возвращается до того, как ваше будущее getSharedPrefs будет завершено. GetSharedPrefs возвращается мгновенно, как только он вызывается, потому что он асинхронный, и вы рассматриваете его как «огонь и забыть», не ожидая. Видя, что вы не можете ждать в своей функции initState, которая имеет смысл.

Здесь вы хотите использовать виджет FutureBuilder. Создайте Future, который возвращает логическое значение (или enum, если вам нужно больше состояний), и используйте будущего строителя в качестве домашнего ребенка, чтобы вернуть правильный виджет.

Создайте свое будущее

Future<bool> showLoginPage() async {
  var sharedPreferences = await SharedPreferences.getInstance();

  // sharedPreferences.setString('user', 'hasuser');

  String user = sharedPreferences.getString('user');

  return user == null;
}

Когда пользователь имеет значение null, это вернет true. Используйте это будущее в построителе будущего, чтобы выслушать изменения стоимости и ответить соответствующим образом.

 @override
  Widget build(BuildContext context) {
    return MaterialApp(home: FutureBuilder<bool>(
     future: showLoginPage(),
     builder: (buildContext, snapshot) {
       if(snapshot.hasData) {
         if(snapshot.data){
           // Return your login here
        return Container(color: Colors.blue);
      }

      // Return your home here
      return Container(color: Colors.red);
    } else {

      // Return loading screen while reading preferences
      return Center(child: CircularProgressIndicator());
    }
  },
));
}

Я запустил этот код, и он отлично работает. Вы должны увидеть синий экран, когда требуется вход в систему, и красный экран, когда присутствует пользователь. Раскомментируйте строку в showLoginPage для тестирования.

0
ответ дан Filled Stacks 18 March 2019 в 01:07
поделиться