查找停用的窗口小部件的祖先是不安全的。此时,小部件的元素树的状态不再稳定。扑扑

时间:2020-06-18 15:42:49

标签: flutter navigation widget reusability

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

我收到此错误,我知道此错误的原因,原因是在选择登录屏幕后,从树中删除了userDetails Widget。问题是我如何将该小部件重新插入到Tree中。我已经尝试了StackOverflow和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()));
  }

1 个答案:

答案 0 :(得分:1)

我建议您使用一个临时选择器页面,这意味着您可以创建一个新页面,并且在该页面中您不必显示任何UI(只需黑屏)。

此操作将决定您要转到哪个页面,并且该页面始终是您的主屏幕,因此启动该页面时,它将检查电话号码是否为空,并且pushreplacement登录屏幕,否则将转到其他页面。

也不必担心它会成为“黑屏”,因为这一切发生得太快(这取决于允许您确定起始屏幕的条件),并且可以直接将您带到想要的屏幕,具体取决于你有条件。