首页 > 解决方案 > 导航导致查找已停用小部件的祖先是不安全的

问题描述

我有一个 SplashScreen,它应该等待 2 秒,然后导航到 ShowsScreen 或 LoginScreen。这是示例代码。

class SplashScreen extends StatelessWidget {
  const SplashScreen({Key? key}) : super(key: key);

  static const routeName = '/';

  Future<void> checkRememberMeAndNavigateAppropriately(BuildContext context) async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    if (prefs.getBool(prefsRememberMeKey) ?? false) {
      Navigator.of(context).pushReplacementNamed(ShowsScreen.routeName);
    } else {
      Navigator.of(context).pushReplacementNamed(LoginScreen.routeName);
    }
  }

  @override
  Widget build(BuildContext context) {
    Future.delayed(const Duration(seconds: 2)).then((_) {
      checkRememberMeAndNavigateAppropriately(context);
    });

    return Scaffold(
      body: ...
    );
}

它按预期工作,但抛出Unhandled Exception: Looking up a deactivated widget's ancestor is unsafe.

任何形式的帮助将不胜感激。

标签: flutterflutter-navigation

解决方案


推荐阅读