Flutter 如何让ChromeSafariBrowser在Flatter web上发布
概述:我在pubspec.yaml中包括flatter_inappwebview:4.0.0+4,并导入“package:flatter_inappwebview/flatter_inappwebview.dart”;主要是飞镖。当我按browser时,什么也没发生,检查也没有发现错误。但是,终端抛出错误,平台不受支持。浏览器应该从web加载颤振页面。我是否缺少参数。我需要启动一个html来运行javascript来读取二维码 获取以下错误:Flutter 如何让ChromeSafariBrowser在Flatter web上发布,flutter,flutter-web,Flutter,Flutter Web,概述:我在pubspec.yaml中包括flatter_inappwebview:4.0.0+4,并导入“package:flatter_inappwebview/flatter_inappwebview.dart”;主要是飞镖。当我按browser时,什么也没发生,检查也没有发现错误。但是,终端抛出错误,平台不受支持。浏览器应该从web加载颤振页面。我是否缺少参数。我需要启动一个html来运行javascript来读取二维码 获取以下错误: Error: Unsupported operati
Error: Unsupported operation: Platform._operatingSystem at Object.throw_ [as throw] (localhost:55661/dart_sdk.js:4334:11) at Function._operatingSystem (localhost:55661/dart_sdk.js:55065:17) at Function.get operatingSystem [as operatingSystem] (localhost:55661/dart_sdk.js:55111:27)
源代码
void main() {
WidgetsFlutterBinding.ensureInitialized();
//await Permission.camera.request();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@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;
MyChromeSafariBrowser browser =
new MyChromeSafariBrowser(new MyInAppBrowser());
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: RaisedButton(
onPressed: () async {
debugPrint('browser pressed');
await widget.browser.open(
url: "https://flutter.dev/",
options: ChromeSafariBrowserClassOptions(
android: AndroidChromeCustomTabsOptions(
addDefaultShareMenuItem: false,
packageName: "com.android.chrome"),
ios: IOSSafariOptions(barCollapsingEnabled: true)));
},
child: Text("Browser"))));
}
}
class MyInAppBrowser extends InAppBrowser {
@override
Future onLoadStart(String url) async {
print("\n\nStarted $url\n\n");
}
@override
Future onLoadStop(String url) async {
print("\n\nStopped $url\n\n");
}
@override
void onLoadError(String url, int code, String message) {
print("\n\nCan't load $url.. Error: $message\n\n");
}
@override
void onExit() {
print("\n\nBrowser closed!\n\n");
}
}
class MyChromeSafariBrowser extends ChromeSafariBrowser {
MyChromeSafariBrowser(browserFallback) : super(bFallback: browserFallback);
@override
void onOpened() {
print("ChromeSafari browser opened");
}
@override
void onLoaded() {
print("ChromeSafari browser loaded");
}
@override
void onClosed() {
print("ChromeSafari browser closed");
}
}
void main(){
WidgetsFlutterBinding.ensureInitialized();
//等待许可。camera.request();
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
视觉密度:视觉密度。自适应平台密度,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
MyChromeSafariBrowser浏览器=
新MyChromeSafariBrowser(新MyInAppBrowser());
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
孩子:升起按钮(
onPressed:()异步{
debugPrint('按下浏览器');
等待widget.browser.open(
url:“https://flutter.dev/",
选项:ChromeSafariBrowserClassOptions(
android:AndroidChromecustomAbsOptions(
addDefaultShareMenuItem:false,
packageName:“com.android.chrome”),
ios:iosafarioptions(barCollapsingEnabled:true));
},
子:文本(“浏览器”);
}
}
类MyInAppBrowser扩展了InAppBrowser{
@凌驾
未来onLoadStart(字符串url)异步{
打印(“\n\n开始的$url\n\n”);
}
@凌驾
未来onLoadStop(字符串url)异步{
打印(“\n\n阻止的$url\n\n”);
}
@凌驾
void onLoadError(字符串url、int代码、字符串消息){
打印(“\n\n无法加载$url..错误:$message\n\n”);
}
@凌驾
void onExit(){
打印(“\n\n浏览器已关闭!\n\n”);
}
}
类MyChromeSafariBrowser扩展了ChromeSafariBrowser{
MyChromeSafariBrowser(browserFallback):超级(bFallback:browserFallback);
@凌驾
无效开启(){
打印(“打开ChromeSafari浏览器”);
}
@凌驾
void onload(){
打印(“已加载ChromeSafari浏览器”);
}
@凌驾
一经关闭无效(){
打印(“ChromeSafari浏览器关闭”);
}
}
应用web视图中的颤振\u
不支持颤振web(查看支持的平台)
要在Flatter web中运行javascript,您必须使用类似于或创建一个支持web的插件(我认为这在幕后使用JS interop,但这是推荐的方法,这样您就不会将本机代码与Flatter应用程序混合使用)。其他信息应编辑到问题中。我开始编写pdfjs到dart的转换,这就是我使用它的大部分经验。然后我找到了一个将typescript转换为dart()的工具,由于typescript绑定是可用的,所以我使用了这个工具并对其进行了修改以满足我的需要。从那时起,发布了一个使用pdfjs的软件包,但它也支持Android和iOS,所以我改用了它。您可以在这里查看他们的web实现:我需要从chrome浏览器运行qr阅读器javascript代码。js_facade_gen会工作吗?如果它需要一个摄像头预览窗口,我想这会很困难,但至少应该给你一个工作的基础。这基本上是JS互操作的自动化,因此您可以在以后修改它,并说明我将如何在Flatter和dartI中使用您的代码,在使用c#web api的项目中切换到angular 8。我使用visual studio代码和ng build编写代码——生成代码并将dist复制到webapi的wwwroot,然后将其部署到iis服务器。