【问题标题】:Why is my FAB refresh button not refreshing on tap in WebView?为什么我的 FAB 刷新按钮在 WebView 中点击时不刷新?
【发布时间】:2019-12-13 03:57:30
【问题描述】:

您好,我的 WebView Flutter 应用有问题,我有一个浮动操作按钮,但点击时不刷新

我的工厂所在的代码是:

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

class HomePage extends StatefulWidget {
  HomePage({Key key}) : super(key: key);

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

class _HomePageState extends State<HomePage> {

  WebViewController _myController;
      final Completer<WebViewController> _controller =
      Completer<WebViewController>();
  @override
  Widget build(BuildContext context) {
    return SafeArea(
            child: Scaffold(
                  body: WebView(
                  initialUrl: 'https://syncshop.online/en/',
                  javascriptMode: JavascriptMode.unrestricted,
                  onWebViewCreated: (controller) {
                  _myController = controller;
                },
          onPageFinished: (initialUrl) {
              _myController.evaluateJavascript("document.getElementsByClassName('footer-container')[0].style.display='none';");
          },
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: () {
              _myController?.reload();
            },
            child: Icon(Icons.refresh),
          ),
          ),
      );
    }
}

FAB 在那里,但按下时不刷新 webview url

【问题讨论】:

    标签: flutter flutter-layout flutter-dependencies


    【解决方案1】:

    您有两个 Web 视图控制器实例。

    1. WebViewController _myController
    2. Completer&lt;WebViewController&gt; _controller

    发生的事情是 _myController 已被分配一个值,但它还没有任何数据。

    我建议使用_controller 实例,代码如下:

    onWebViewCreated: (controller) {
      _controller.complete(controller);
    }
    

    和FAB按钮为:

        floatingActionButton: FutureBuilder<WebViewController>(
            future: _controller.future,
            builder: (BuildContext context, AsyncSnapshot<WebViewController> controller) {
              if (controller.hasData) {
                return FloatingActionButton(
                onPressed: () {
                  controller.data.reload();
                },
                child: Icon(Icons.refresh),
              );
              }
              return Container();
            }),
    

    Completer 的上述使用允许您仅在 _contoller 有一些数据要重新加载后才显示 FAB。

    更多详情请参考此示例代码:https://github.com/flutter/plugins/blob/master/packages/webview_flutter/example/lib/main.dart

    【讨论】:

    • 修改了这一行``` onPressed: () { controller.reload(); },孩子:图标(图标。刷新),); ``` 到 ``` onPressed: () async { controller.data.reload(); },孩子:图标(图标。刷新),); } ``` 因为您为 FAB 提供的那个在按钮显示的重新加载方法之前不能与 .data 一起使用,但是在按下时,没有任何反应,它不会刷新或显示 webview 的重建状态
    • 您所做的更改是正确的,之后应该可以按预期工作。当我找出问题时,我会尽快通知你。
    • 是的,我知道,但它应该这样做吗?当您在浏览器中刷新时,没有显示或指示它刷新?顺便说一句,我是新手
    • 顺便说一句,我遇到了另一个问题,我认为你给我的现在还可以,但由于某种原因,我在这里注入的代码 `` onPageFinished: (initialUrl) { _myController.evaluateJavascript("document.getElementsByClassName ('footer-container')[0].style.display='none';"); },```由于某种原因它不会工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多