为什么我的FAB刷新按钮在WebView中点击时不刷新?

问题描述 投票:0回答:1

嗨,我的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个回答
0
投票

您有两个Web View Controller实例。

  1. WebViewController _myController
  2. Completer<WebViewController> _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.reload();
            },
            child: Icon(Icons.refresh),
          );
          }
          return Container();
        }),

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

请参阅此示例代码以获取更多详细信息:https://github.com/flutter/plugins/blob/master/packages/webview_flutter/example/lib/main.dart

© www.soinside.com 2019 - 2024. All rights reserved.