Flutter 单击按钮时,如何返回到上一页的Flatter_webview?

Flutter 单击按钮时,如何返回到上一页的Flatter_webview?,flutter,dart,webview,Flutter,Dart,Webview,我想使用webview\u flift构建一个简单的应用程序,该应用程序没有AppBar,具有静态URL,并且只需在屏幕底部的一个简单的floatingActionButton导航到上一页,但我不知道如何操作 有人能给我一些指导,让我试着让按钮做它应该做的事情吗 以下是带有按钮的应用程序的图像: 我不知道该尝试什么,但我正在努力学习,关于这一点 这是我的全部代码: =) 导入“包装:颤振/材料.省道”; 导入“package:webview_flatter/webview_flatter.da

我想使用
webview\u flift
构建一个简单的应用程序,该应用程序没有
AppBar
,具有静态URL,并且只需在屏幕底部的一个简单的
floatingActionButton
导航到上一页,但我不知道如何操作

有人能给我一些指导,让我试着让按钮做它应该做的事情吗

以下是带有按钮的应用程序的图像:

我不知道该尝试什么,但我正在努力学习,关于这一点

这是我的全部代码: =)

导入“包装:颤振/材料.省道”;
导入“package:webview_flatter/webview_flatter.dart”;
导入“包:flifter/services.dart”;
导入“dart:async”;
空干管(){
runApp(材料应用程序)(
标题:“某物”,
主页:AplicativoB2b(),
debugShowCheckedModeBanner:false,
));
SystemChrome.SetEnabledSystemEmioVerlays([]);
}
类AplicativoB2b扩展了StatefulWidget{
@凌驾
_AplicativoB2bState createState()=>_AplicativoB2bState();
}
类_AplicativoB2bState扩展状态{
Completer _controller=Completer();
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:WebView(
初始URL:'https://google.com',
javascriptMode:javascriptMode.unrestricted,
onWebViewCreated:(WebViewController WebViewController){
_控制器。完成(webViewController);
},
),
浮动操作按钮:浮动操作按钮(
已按下:(){
//帮帮我=(
},
子:常量图标(图标。箭头返回),
背景颜色:Colors.black,
),
//bottomNavigationBar:BottomAppBar(颜色:Colors.white,子级:容器(高度:50.0)),
//floatingActionButtonLocation:floatingActionButtonLocation.endDocked,
);
}
}
我做到了!=D

对很多人来说,这可能看起来很简单哈哈,但是对于一个以前从未接触过这种东西的人来说,我为我的忍者Ctrl C+Ctrl V感到非常自豪。开玩笑的,我看了大量的例子,并尝试了这个方法,效果很好,如果有人有任何建议,我会同意的!=)

以下是我所做的:

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:flutter/services.dart';
import 'dart:async';

void main () {
  runApp(MaterialApp(
    title: 'Something',
    home: AplicativoB2b(),
    debugShowCheckedModeBanner: false,
  ));
  SystemChrome.setEnabledSystemUIOverlays ([]);
}

class AplicativoB2b extends StatefulWidget {
  @override
  _AplicativoB2bState createState() => _AplicativoB2bState();
}

class _AplicativoB2bState extends State<AplicativoB2b> {

  Completer<WebViewController> _controller = Completer<WebViewController>();

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      body: WebView(
        initialUrl: 'https://google.com',
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (WebViewController webViewController) {
           _controller.complete(webViewController);
        },
      ),
      floatingActionButton: NavigationControls(_controller.future), // <-- added this
      );
  }
}
这基本上就是全部代码。颤振是凉爽的,当你真正想要它的时候,它很容易倾斜。
谢谢大家

我用的代码与前面的答案不同。我按照教程操作,以使webview和浮动按钮正常工作。从那里,给浮动按钮一个返回箭头图标,并在单击浮动按钮时使webview返回页面,就非常容易了

要使webview在单击浮动按钮时返回页面(将其置于其onpressed方法中):

浮动按钮的图标可以通过以下代码行轻松更改:

child: Icon(Icons.arrow_back)
可在此处找到所有不同的按钮:

以下是我的全部代码:

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'dart:async';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'App'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final Completer<WebViewController> _controller = Completer<WebViewController>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: WebView(
        initialUrl: "https://google.com",
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (WebViewController webViewController) {
          _controller.complete(webViewController);
        },
      ),
      floatingActionButton: FutureBuilder<WebViewController>(
        future: _controller.future,
        builder: (BuildContext context, 
          AsyncSnapshot<WebViewController> controller) {
            if (controller.hasData) {
              return FloatingActionButton(
                child: Icon(Icons.arrow_back),
                onPressed: () {
                  controller.data.goBack();
                });
            }

            return Container();
          }
        ),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“package:webview_flatter/webview_flatter.dart”;
导入“dart:async”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“应用程序”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:我的主页(标题:“应用程序”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
最终完成者_控制器=完成者();
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:WebView(
初始URL:“https://google.com",
javascriptMode:javascriptMode.unrestricted,
onWebViewCreated:(WebViewController WebViewController){
_控制器。完成(webViewController);
},
),
浮动操作按钮:FutureBuilder(
未来:_controller.future,
生成器:(BuildContext上下文,
异步(快照控制器){
if(controller.hasData){
返回浮动操作按钮(
子:图标(图标。箭头返回),
已按下:(){
controller.data.goBack();
});
}
返回容器();
}
),
);
}
}
Future\u willPopCallback()异步{
WebViewController WebViewController=等待_controller.future;
bool canNavigate=wait webViewController.canGoBack();
if(卡纳维盖特){
webViewController.goBack();
返回false;
}否则{
返回true;
}
}

请您解释一下为什么我们必须使用Completer而不是直接调用WebViewController.goBack()?我可以不使用Completer直接调用控制器。对您的答案稍作解释将使其更清晰易懂,请阅读并添加说明以提高回答质量。
 controller.data.goBack();
child: Icon(Icons.arrow_back)
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'dart:async';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'App'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final Completer<WebViewController> _controller = Completer<WebViewController>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: WebView(
        initialUrl: "https://google.com",
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (WebViewController webViewController) {
          _controller.complete(webViewController);
        },
      ),
      floatingActionButton: FutureBuilder<WebViewController>(
        future: _controller.future,
        builder: (BuildContext context, 
          AsyncSnapshot<WebViewController> controller) {
            if (controller.hasData) {
              return FloatingActionButton(
                child: Icon(Icons.arrow_back),
                onPressed: () {
                  controller.data.goBack();
                });
            }

            return Container();
          }
        ),
    );
  }
}
Future<bool> _willPopCallback() async {
    WebViewController webViewController = await _controller.future;
    bool canNavigate = await webViewController.canGoBack();
    if (canNavigate) {
      webViewController.goBack();
      return false;
    } else {
      return true;
    }
  }