具有基本身份验证的FlatterWebView
我正在加载一个网页,我想用基本身份验证登录,我有使用Swift的经验,能够像下面这样进行基本身份验证,但我无法为我的应用程序的Flatter版本实现基本身份验证 ----Swift代码--- ---Flatter WebView--->使用URL加载WebView具有基本身份验证的FlatterWebView,webview,flutter,basic-authentication,Webview,Flutter,Basic Authentication,我正在加载一个网页,我想用基本身份验证登录,我有使用Swift的经验,能够像下面这样进行基本身份验证,但我无法为我的应用程序的Flatter版本实现基本身份验证 ----Swift代码--- ---Flatter WebView--->使用URL加载WebView import 'package:flutter/material.dart'; import 'dart:convert'; import 'package:flutter_webview_plugin/flutter_webview
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
class AddShipment extends StatefulWidget {
final String url;
AddShipment(this.url);
@override
State<StatefulWidget> createState() {
return new _AddShipment();
}
}
class _AddShipment extends State<AddShipment> {
final flutterWebviewPlugin = new FlutterWebviewPlugin();
@override
void initState() {
super.initState();
flutterWebviewPlugin.close();
}
@override
void dispose() {
flutterWebviewPlugin.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return new WebviewScaffold(
appBar: new AppBar(
title: new Text("WebView"),
centerTitle: true,
backgroundColor: Colors.blue[900],
elevation: 0.0,
),
url: widget.url,
withJavascript: true,
);
}
}
导入“包装:颤振/材料.省道”;
导入“dart:convert”;
导入“包:flatter_webview_plugin/flatter_webview_plugin.dart”;
类AddShipping扩展了StatefulWidget{
最终字符串url;
addShipping(this.url);
@凌驾
状态createState(){
返回新的_addshipping();
}
}
类_addshipping扩展状态{
最终FlatterWebViewPlugin=新的FlatterWebViewPlugin();
@凌驾
void initState(){
super.initState();
webviewplugin.close();
}
@凌驾
无效处置(){
dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回新的WebviewScaffold(
appBar:新的appBar(
标题:新文本(“网络视图”),
标题:对,
背景颜色:颜色。蓝色[900],
标高:0.0,
),
url:widget.url,
withJavascript:true,
);
}
}
创建URL请求的正确方法是什么?我试过:
static Future<Response> getURL(
final String username, final String password) {
final String url = 'http://myurl';
final String auth =
'Basic ' + base64Encode(utf8.encode('$username:$password'));
return http.get(url, headers: {'Authorization': auth});
}
静态未来getURL(
最终字符串用户名、最终字符串密码){
最终字符串url=http://myurl';
最终字符串验证=
“Basic”+base64Encode(utf8.encode(“$username:$password”);
返回http.get(url,头:{'Authorization':auth});
}
将附加标题添加到WebviewScaffold
构造函数中
url: widget.url,
withJavascript: true,
headers: {'Authorization': 'Basic ' + base64Encode(utf8.encode('$widget.username:$widget.password'))},
以与传递url相同的方式将用户名和密码传递到小部件中。您也可以尝试我的插件(编辑:它已重命名为) 使用
initialHeaders
属性中的Authorization:Basic…
标题的示例如下所示:
导入'dart:async';
导入“dart:convert”;
进口“包装:颤振/材料.省道”;
导入“包:flatter_inappwebview/flatter_inappwebview.dart”;
Future main()异步{
runApp(新的MyApp());
}
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>new_MyAppState();
}
类MyAppState扩展了状态{
@凌驾
void initState(){
super.initState();
}
@凌驾
无效处置(){
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:InAppWebViewPage()
);
}
}
类InAppWebViewPage扩展了StatefulWidget{
@凌驾
_InAppWebViewPageState createState()=>新建;
}
类_InAppWebViewPageState扩展状态{
inappwebview控制器webView;
字符串username=“username”;
字符串password=“password”;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“InAppWebView”)
),
主体:容器(
子项:列(子项:[
扩大(
子:容器(
子:InAppWebView(
初始URL:“http://myurl",
初始标题:{
“授权”:“基本”+base64Encode(utf8.encode(“$username:$password”))
},
initialOptions:InAppWebViewWidgetOptions(
inappwebview选项:inappwebview选项(
debuggingEnabled:true,
)
),
onWebViewCreated:(InAppWebViewController){
网络视图=控制器;
},
onLoadStart:(InAppWebViewController控制器,字符串url){
},
onLoadStop:(InAppWebViewController控制器,字符串url){
},
),
),
),
]))
);
}
}
相反,这是一个使用onReceiveDhtPauthRequest事件的示例:
导入'dart:async';
导入“dart:convert”;
进口“包装:颤振/材料.省道”;
导入“package:flatter_inappbrowser/flatter_inappbrowser.dart”;
Future main()异步{
runApp(新的MyApp());
}
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>new_MyAppState();
}
类MyAppState扩展了状态{
@凌驾
void initState(){
super.initState();
}
@凌驾
无效处置(){
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:InAppWebViewPage()
);
}
}
类InAppWebViewPage扩展了StatefulWidget{
@凌驾
_InAppWebViewPageState createState()=>新建;
}
类_InAppWebViewPageState扩展状态{
inappwebview控制器webView;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“InAppWebView”)
),
主体:容器(
子项:列(子项:[
扩大(
子:容器(
子:InAppWebView(
初始URL:“http://myurl",
initialOptions:InAppWebViewWidgetOptions(
inappwebview选项:inappwebview选项(
debuggingEnabled:true,
)
),
onWebViewCreated:(InAppWebViewController){
网络视图=控制器;
},
onLoadStart:(InAppWebViewController控制器,字符串url){
},
onLoadStop:(InAppWebViewController控制器,字符串url){
},
onReceivedHttpAuthRequest:(InAppWebViewController控制器,HttpAuthChallenge挑战)异步{
返回HttpAuthResponse(用户名:“用户名”,密码:“密码”,操作:HttpAuthResponse。继续);
url: widget.url,
withJavascript: true,
headers: {'Authorization': 'Basic ' + base64Encode(utf8.encode('$widget.username:$widget.password'))},