Flutter url_launcher无法启动Webview短Google表单链接

问题描述

我当时正在使用Flutter开发具有url_launcher 5.7.2软件包https://pub.dev/packages/url_launcher的应用,当用户点击某些按钮时,该应用仅针对Google表单启动webivew。

但是我发现,如果使用Google表单的缩写URL,它将使用原始URL出现ERR_UNKNowN_URL_SCHEME错误

我使用的是此示例https://pub.dev/packages/url_launcher/example,并将网址替换为 https://forms.gle/mEwVA8jXmwJEFn5X6,然后单击在应用程序中启动(启用JavaScript)

await launch(url,forceSafariVC: true,forceWebView: true,enableJavaScript: true,);

如果使用原始的长URL https://docs.google.com/forms/d/e/1FAIpQLSfzXnHMRe890CJj5rSxN-jonjrvZ8HvRBSFcdyJD5IDhOr-IQ/viewform?usp=sf_link,则可以使用。

我已经将android:usesCleartextTraffic =“ true”添加到我的AndroidManifest.xml中,但仍然不能用于短网址

解决方法

我建议您使用“ flutter_webview_plugin”包而不是“ url_launcher”。

此问题是通过重定向发生的,浏览器无法理解android中“意图”的开始。

enter image description here

import 'dart:async';

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',theme: ThemeData(
        primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,),home: MyHomePage(title: 'Flutter Demo Home Page'),);
  }
}

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),body: _buildBody(),floatingActionButton: FloatingActionButton(
        onPressed: () {
          Navigator.push(
            context,MaterialPageRoute(
              builder: (context) =>
                  WebViewPage(url: 'https://forms.gle/mEwVA8jXmwJEFn5X6'),);
        },tooltip: 'Increment',child: Icon(Icons.add),);
  }

  Widget _buildBody() {
    return Container();
  }
}

class WebViewPage extends StatefulWidget {
  final String url;
  WebViewPage({Key key,this.url}) : super(key: key);

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

class _WebViewPageState extends State<WebViewPage> {
  final flutterWebviewPlugin = FlutterWebviewPlugin();

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

  @override
  void dispose() {
    flutterWebviewPlugin.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Material(
      type: MaterialType.transparency,child: WebviewScaffold(
        appBar: AppBar(
          title: Text('WebView Page'),url: widget.url,userAgent: 'Fake',clearCookies: false,clearCache: false,hidden: true,appCacheEnabled: true,supportMultipleWindows: true,);
  }
}


,

尝试一下,这一切都对我有利。尝试卸载然后运行该应用程序

代码段:

fn main() {
    let a: [u8; 3] = [1,2,3]; // a blob of data on the stack...
    let a_ref = &a; // a shared reference to this data...
    let a_ptr = a_ref as *const u8; // and a pointer,created from the reference
    println!("{:p}",a_ptr);
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...