【问题标题】:Flutter InAppWebView - webview does not accept gesturesFlutter InAppWebView - webview 不接受手势
【发布时间】:2021-04-20 12:43:09
【问题描述】:

我有一个使用办公室表格构建的问卷,我想在 Flutter 应用程序中展示该表格。到目前为止一切都很好,但是当用户尝试从表单中点击输入字段时,页面会自行刷新。 唯一可以执行的手势是滚动和标记单选按钮。

我花了很多时间试图弄清楚如何启用其他手势,但似乎没有办法。 我从文档中找到了一个参数gestureRecognizer,但我无法弄清楚如何传递手势以及需要什么样的手势。 任何帮助将不胜感激。 谢谢!

这是 google.com 的一些示例代码


class QuestionnaireScreen extends StatelessWidget {
  final GlobalKey<ScaffoldState> _quizScaffoldKey = GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {
    InAppWebViewController _webViewController;
    return Scaffold(
      key: _quizScaffoldKey,
      appBar: AppBar(
        title: Text('Questionnaire'),
      ),
      body: Container(
        child: InAppWebView(
          initialUrl: 'https://google.com',
          initialOptions: InAppWebViewGroupOptions(
              crossPlatform: InAppWebViewOptions(
                useShouldOverrideUrlLoading: false,
                mediaPlaybackRequiresUserGesture: false,
              ),
              android: AndroidInAppWebViewOptions(
                useShouldInterceptRequest: true,
              ),
              ios: IOSInAppWebViewOptions(
                allowsInlineMediaPlayback: true,
              )),
          // gestureRecognizers: <Factory<OneSequenceGestureRecognizer>>{}..add(Factory<OneSequenceGestureRecognizer>() => TapGestureRecognizer()), - this gives an error: The argument type 'TapGestureRecognizer Function<OneSequenceGestureRecognizer>()' can't be assigned to the parameter type 'Factory<OneSequenceGestureRecognizer>'
          onWebViewCreated: (InAppWebViewController vc) {
            _webViewController = vc;
          },
        ),
      ),
    );
  }
}

更新: 我设法使它工作,但使用带有 WebController 的 webview_flutter 插件

代码如下:

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

class QuestionnaireScreen extends StatefulWidget {
  @override
  _QuestionnaireScreenState createState() => _QuestionnaireScreenState();
}

class _QuestionnaireScreenState extends State<QuestionnaireScreen> {
  final GlobalKey<ScaffoldState> _quizScaffoldKey = GlobalKey<ScaffoldState>();

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    WebViewController _webViewController;
    return Scaffold(
      key: _quizScaffoldKey,
      appBar: AppBar(
        title: Text('Questionnaire'),
      ),
      body: Container(
        child: WebView(
          initialUrl: '/url here/',
          javascriptMode: JavascriptMode.unrestricted,
          onWebViewCreated: (WebViewController vc) {
            _webViewController = vc;
          },
        ),
      ),
    );
  }
}

【问题讨论】:

    标签: flutter dart webview gesture


    【解决方案1】:

    我能够使用here的方法

    执行以下操作:

    InAppWebView(
                    gestureRecognizers: [
                      new Factory<OneSequenceGestureRecognizer>(
                        () => new EagerGestureRecognizer(),
                      ),
                    ].toSet(),
    

    【讨论】:

    • 感谢您的回答。我设法使它工作,但使用 webview_flutter 插件
    猜你喜欢
    • 2021-06-19
    • 2021-08-10
    • 2021-01-03
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 2016-03-17
    • 2022-01-26
    • 2021-04-09
    相关资源
    最近更新 更多