【问题标题】: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查找已停用小部件的祖先是不安全的。此时小部件的元素树的状态不再稳定。扑通扑通
【发布时间】:2020-10-08 17:47:47
【问题描述】:

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

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

【问题讨论】:

    标签: flutter navigation widget reusability


    【解决方案1】:

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

    它的作用是它会决定你想去哪个页面,这个页面将永远是你的主屏幕,所以当它启动时它会检查电话号码是否为空,并会pushreplacement登录屏幕,否则它会转到其他页面。

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

    【讨论】:

      猜你喜欢
      • 2020-08-08
      • 1970-01-01
      • 2022-01-23
      • 2021-11-15
      • 2021-06-03
      • 2020-12-26
      • 2022-06-26
      • 2021-04-29
      • 2021-07-28
      相关资源
      最近更新 更多