Поиск предка деактивированного виджета небезопасен. На этом этапе состояние дерева элементов виджета больше не стабильно. В трепете - PullRequest
0 голосов
/ 18 июня 2020

Перед тем, как проголосовать против, прочтите проблему полностью.

Я получаю эту ошибку Я знаю причину этой ошибки, причина в том, что виджет userDetails удаляется из дерева при входе в систему экран выбран. Вопрос в том, как я вставляю этот виджет обратно в Tree. Я пробовал все решения, доступные на StackOverflow и GitHub, но ни одно решение у меня не помогло. Я пробовал использовать новое ключевое слово и глобальный ключ в эшафоте.

Main.dart

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  SharedPreferences prefs = await SharedPreferences.getInstance();
  var userPhoneNumber = prefs.getString('phoneNumber');
  var userAlternateNumber = prefs.getString('AlternateNumber');
  print(userPhoneNumber);
  SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
      .then((_) {
    runApp(
      MaterialApp(
        theme: ThemeData(
            textSelectionHandleColor: kOrangeColor, cursorColor: kOrangeColor),
        home: userPhoneNumber == null
            ? new LoginScreen()
            : (userAlternateNumber == null
                ? new UserDetails()
                : new HomeScreen()),
      ),
    );
  });
}

Функция в LoginScreen.dart

 void pushToUserDetailsScreen(BuildContext context) async {
      Navigator.push(
          context, MaterialPageRoute(builder: (context) => new UserDetails()));
  }

1 Ответ

1 голос
/ 18 июня 2020

Я предлагаю вам использовать временную страницу выбора, что означает, что вы можете создать новую страницу, и на этой странице вам не нужно показывать какой-либо пользовательский интерфейс (только черный экран).

Что это будет делать заключается в том, что он будет решать, с какой страницей вы хотите go рядом, и эта страница всегда будет вашим домашним экраном, поэтому при запуске он проверит, является ли номер телефона нулевым, и будет pushreplacement Экран входа в систему, иначе это будет go на другую страницу.

Также не беспокойтесь о том, что это «Черный экран», поскольку все это происходит слишком быстро (это зависит от условий, которые позволяют вам выбрать начальный экран), и это напрямую переводит вас на нужный экран в зависимости от ваших условий.

...