不支持的操作:Platform._operatingSystem

时间:2019-10-19 00:14:05

标签: flutter flutter-web

我的浮动代码未在网络上运行。

我发现“ bool kisweb”可用于检测平台。但是我的代码在“ FirebaseAuth.instance”处失败。这是否意味着我不能在Web上使用Firebaseauth,因为可能取决于dart:io?

  

在调试模式下在Chrome上启动lib \ main.dart ...调试服务   在ws://127.0.0.1:54007 / NghsYaNRLKE =上为Web编译compiled   小工具图书馆的例外情况   ╞═════════════════════════════════════════════════ ══════════   在构建MultiProvider时引发了以下UnsupportedError:   不支持的操作:Platform._operatingSystem相关   引起错误的小部件是:MultiProvider   org-dartlang-app:///packages/My_App/main.dart:30:10发生异常时   被抛出,这是堆栈:   软件包:build_web_compilers / src / dev_compiler / dart_sdk.js 3996:11
  throw_包:build_web_compilers / src / dev_compiler / dart_sdk.js   57810:17 _operatingSystem   软件包:build_web_compilers / src / dev_compiler / dart_sdk.js 57859:27获取   操作系统   软件包:build_web_compilers / src / dev_compiler / dart_sdk.js 57772:27获取   _operatingSystem软件包:build_web_compilers / src / dev_compiler / dart_sdk.js 5020:17 get   软件包:build_web_compilers / src / dev_compiler / dart_sdk.js 57796:26获取   isIOS包:build_web_compilers / src / dev_compiler / dart_sdk.js 5020:17   获取包:firebase_core / src%5Cfirebase_app.dart 15:16
  获取defaultAppName   软件包:build_web_compilers / src / dev_compiler / dart_sdk.js 5020:17 get   软件包:firebase_core / src%5Cfirebase_app.dart 51:57得到   实例包:build_web_compilers / src / dev_compiler / dart_sdk.js   5020:17获取包:firebase_auth / src%5Cfirebase_auth.dart 25:67
  获取实例包:build_web_compilers / src / dev_compiler / dart_sdk.js   5020:17获取internalCallback   ══════════════════════════════════════════════════ ══════════════════════════════════════════════════   退出

请帮助我解决此问题。

5 个答案:

答案 0 :(得分:11)

我重新打开此问题以提供更合适的答案,现在可在 Flutter 中使用原生版本:

import 'package:flutter/foundation.dart';
if ((defaultTargetPlatform == TargetPlatform.iOS) || (defaultTargetPlatform == TargetPlatform.android)) {
    // Some android/ios specific code
}
else if ((defaultTargetPlatform == TargetPlatform.linux) || (defaultTargetPlatform == TargetPlatform.macOS) || (defaultTargetPlatform == TargetPlatform.windows)) {
    // Some desktop specific code there
}
else {
    // Some web specific code there
}

答案 1 :(得分:6)

您可以使用try-catch块来防止异常破坏流程:

bool kisweb;
try{
    if(Platform.isAndroid||Platform.isIOS) {
        kisweb=false;
    } else {
        kisweb=true;
    }
} catch(e){
    kisweb=true;
}

答案 2 :(得分:3)

对我来说,转移到开发者渠道使用 flutter channel dev

大多数firebase插件现已提供网络支持。

答案 3 :(得分:2)

否,FlutterWeb上完全不支持FlutterFire插件组。它们依赖于特定于平台的API,目前仅适用于Android和iOS。

答案 4 :(得分:1)

我花了最后4个小时研究此问题。已经提到的所有内容都是正确的。但是,我很高兴也找到了适用于Web的解决方案:universal_io软件包。

请记住不要使用1.0.1版本,因为v1.0.1和其他版本无法正确检测到iOS。我只需要降级到0.2.0版本就可以解决它。在您阅读本文时,它可能已经修复,请在此处查看问题状态:https://github.com/dint-dev/universal_io/issues/8

实现(超级简单)

import'package:universal_io / io.dart';

然后仅使用Platform.operatingSystem例如

print('OS: ${Platform.operatingSystem}');