【问题标题】:Flutter WebView with WillPopScope not working as expected带有 WillPopScope 的 Flutter WebView 无法按预期工作
【发布时间】:2021-06-09 02:50:15
【问题描述】:

我已经使用 webview_flutter: ^0.3.3 依赖项实现了 Flutter Webview。

我的流程是:

启动画面 -> 主页(2 个按钮,登录和探索)-> 登录页面

如果已经按了一次登录,那么它将直接打开LoginPage

让我分享代码:

splash_screen.dart

  Future<void> doSomeAsyncStuff() async {
    final prefs = await SharedPreferences.getInstance();
    isLogin = prefs.getBool('isLogin') ?? false;

    new Future.delayed(const Duration(seconds: 3), () {
      Navigator.push(
          context,
          MaterialPageRoute(
              builder: (context) => isLogin ? LoginPage() : HomePage()));
    });
  }

home_page.dart

  // Login Button Click, Here I am saving preference for login.
  // So I can come to login directly when I open the app.
  Future<void> openLoginPage() async {
    final prefs = await SharedPreferences.getInstance();
    prefs.setBool('isLogin', true);
    Navigator.pushReplacement(
        context, MaterialPageRoute(builder: (context) => LoginPage()));
  }

  // Explore Button Click
  void openExplorePage() {
    Navigator.push(
        context, MaterialPageRoute(builder: (context) => ExplorePage()));
  }

login_page.dart

// I AM GETTING PROBLEM HERE...
// WHEN I AM PRESSING BACK BUTTON.. I WANT TO EXIT FROM APP BUT BECAUSE OF THERE IS NOTHING IN BACK STACK, IT IS NOT DOING ANYTHING.
// IF I HAVE SOMETHING IN BACK STACK OF WEBVIEW, IT WILL GO TO BACK PAGE but PROBLEM IS ONLY WHEN I WANT TO EXIT FROM APP.
Future<bool> _exitApp(BuildContext context) async {
  if (await controllerGlobal.canGoBack()) {
    controllerGlobal.goBack();
  } else {
    Navigator.of(context).pop();
    return Future.value(true);
  }
}

谁能帮帮我?

【问题讨论】:

    标签: flutter flutter-navigation


    【解决方案1】:

    在 SplashScreen 中,您已使用 Navigator.push() 移动到登录屏幕,因此 SplashScreen 在后堆栈上。使用 Navigator.pushReplacement 而不是 Navigator.push() 它将替换上一个屏幕。

    new Future.delayed(const Duration(seconds: 3), () {
          Navigator.pushReplacement(
              context,
              MaterialPageRoute(
                  builder: (context) => isLogin ? LoginPage() : HomePage()));
        });
    

    【讨论】:

    • 使用Navigator.pushReplacement后,它给了我空白屏幕,因为堆栈中没有任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2012-08-30
    • 2021-05-18
    • 1970-01-01
    相关资源
    最近更新 更多