查找停用的小部件的祖先是不安全的。此时小部件的元素树的状态不再稳定。在颤动中

Looking up a deactivated widget's ancestor is unsafe. At this point the state of the widget's element tree is no longer stable. In flutter

在投反对票之前,请阅读完整问题。

I am getting this error I know the reason behind this error, the reason is userDetails Widget is removed from the tree when the login screen is selected.问题是我如何将该小部件重新插入到树中。我已经尝试了 Whosebug 和 GitHub 上可用的所有解决方案,但没有一个解决方案适合我。我尝试在脚手架中使用 new 关键字和全局键。

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()));
  }

我建议你使用一个临时的选择器页面,也就是说你可以创建一个新的页面,并且在这个页面中你不必显示任何UI(只是黑屏)。

它会做的是它会决定你想去哪个页面,这个页面将永远是你的主屏幕,所以当它启动时它会检查 phone 数字是否为空并且会 pushreplacement 登录屏幕,否则会转到其他页面。

也不要担心它是 "Black Screen" 因为这一切发生得太快了(这取决于允许您决定开始屏幕的条件)并且它会直接将您带到您想要的屏幕看你有什么条件。