问题描述
我当时正在使用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中“意图”的开始。
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);
}