Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 查找停用的小部件';他的祖先是不安全的。此时,小部件的状态为';s元素树不再稳定。飘飘然_Flutter_Navigation_Widget_Reusability - Fatal编程技术网

Flutter 查找停用的小部件';他的祖先是不安全的。此时,小部件的状态为';s元素树不再稳定。飘飘然

Flutter 查找停用的小部件';他的祖先是不安全的。此时,小部件的状态为';s元素树不再稳定。飘飘然,flutter,navigation,widget,reusability,Flutter,Navigation,Widget,Reusability,在投票否决之前,请阅读完整问题。 我得到这个错误我知道这个错误背后的原因,原因是userDetails小部件从树中删除时,登录屏幕被选中。问题是如何将小部件重新插入到树中。我已经尝试了StackOverflow和GitHub上可用的每一种解决方案,但没有一种解决方案适合我。我尝试在脚手架中使用新关键字和全局键 Main.dart Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); Sha

在投票否决之前,请阅读完整问题。

我得到这个错误我知道这个错误背后的原因,原因是userDetails小部件从树中删除时,登录屏幕被选中。问题是如何将小部件重新插入到树中。我已经尝试了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()),
      ),
    );
  });
}
 void pushToUserDetailsScreen(BuildContext context) async {
      Navigator.push(
          context, MaterialPageRoute(builder: (context) => new UserDetails()));
  }

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

这样做的目的是,它将决定您下一步要进入的页面,并且该页面将始终是您的主屏幕,因此当启动时,它将检查电话号码是否为空,并将
推送替换
登录屏幕,否则它将进入其他页面

也不要担心它是一个“黑屏”,因为这一切发生得太快(这取决于允许您决定起始屏幕的条件),它会根据您的条件直接将您带到您想要的屏幕