Flutter 如何让ChromeSafariBrowser在Flatter web上发布

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

概述:我在pubspec.yaml中包括flatter_inappwebview:4.0.0+4,并导入“package:flatter_inappwebview/flatter_inappwebview.dart”;主要是飞镖。当我按browser时,什么也没发生,检查也没有发现错误。但是,终端抛出错误,平台不受支持。浏览器应该从web加载颤振页面。我是否缺少参数。我需要启动一个html来运行javascript来读取二维码

获取以下错误:

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服务器。