【问题标题】:Any one can config to me the backbutton on flutter for this code?任何人都可以为我配置此代码的后退按钮吗?
【发布时间】:2020-12-18 15:09:13
【问题描述】:

当我按下设备的后退按钮时,应用程序关闭,所以我想配置设备的后退按钮以返回序列页面而不退出。谢谢

import 'package:flutter/material.dart';
    import 'package:webview_flutter/webview_flutter.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          title: 'Welcome to Flutter',
          home: Scaffold(
            body: WebView(
              initialUrl: "https://www.carrefourjordan.com",
              javascriptMode: JavascriptMode.unrestricted,
            ),
          ),
        );
      }
    }

【问题讨论】:

    标签: flutter dart webview back-button-control


    【解决方案1】:

    您可以分两步实现:

    1. 将 Scaffold 封装在 WillPopScope 中以捕获后退按钮按下事件
    2. 使用webview包InAppWebView控制器的canGoback()goBack()在WeView中移动

    试试这个:

      class MyApp extends StatelessWidget {
      InAppWebViewController _webViewController;
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          title: 'Welcome to Flutter',
          home: WillPopScope(
            onWillPop: _onBack,
            child: Scaffold(
              body: InAppWebView(
                initialUrl: "https://www.carrefourjordan.com",
                onWebViewCreated: (InAppWebViewController controller) {
                  _webViewController = controller;
                },
              ),
            ),
          ),
        );
      }
    
      Future<bool> _onBack() async {
        if (await _webViewController.canGoBack()) {
          _webViewController.goBack(); // perform webview back operation
          return false;
        } else {
          // Webpage in home page
          return true; // Close App
        }
      }
    }
    

    【讨论】:

      【解决方案2】:

      您好,通过将脚手架包裹在 willpopscope 内并使用 onwillpop 属性来管理后退按钮按下使用 Willpopscope

      WillPopScope(
        onWillPop: (){
         // Navigator.push(context, MaterialPageRoute(builder: (context)=>Page()));
             return Future.value(false);
        },
        child: Scaffold(
          body: WebView(
            initialUrl: "https://www.carrefourjordan.com",
            javascriptMode: JavascriptMode.unrestricted,
          ),
        ),
      );
      

      【讨论】:

      • 你能帮我做吗,因为我试过了,但有一个错误谢谢
      • 我已经根据您对 willpop 方法的要求编辑了答案,当用户按下后退按钮时,您可以执行您想要的操作
      猜你喜欢
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多