【问题标题】:Is it possible to dynamically activate a package in Flutter? (According to web build, mobile build)是否可以在 Flutter 中动态激活包? (根据网页构建,移动构建)
【发布时间】:2021-06-09 05:11:58
【问题描述】:

目前,我正在使用 Flutter 开发移动和 Web 应用程序。 如下图所示,web文件夹的index.html在移动端没有使用,在web端运行时使用。

在代码中我想使用下面的'KIsWeb'来使用 addSearch.dart 作为移动视图和 addSearchWeb.dart 作为 web 视图。

但是,在移动端运行时,无法读取index.html文件,出现如下错误(使用js包)。

目前 导入'包:flutter_app2/addSearch.dart'; 导入'包:flutter_app2/addSearchWeb.dart'; 有两个参考。

能不能只在移动端运行时使用import'package:flutter_app2/addSearch.dart',而在web运行时只使用import'package:flutter_app2/addSearchWeb.dart'?

(如使用 if 函数

if(kIsWeb) import 'package:flutter_app2/addSearch.dart';
else import 'package:flutter_app2/addSearch.dart';

)

【问题讨论】:

    标签: flutter web mobile import


    【解决方案1】:

    从技术上讲,您不能动态激活导入。 但是,您可以像这样首先使用别名导入包:

    import 'package:flutter_app2/addSearch.dart' as as1;
    import 'package:flutter_app2/addSearch.dart' as as2;
    

    然后在您的相关类中,您可以像这样动态使用这两个导入:

    class ClassName{
       var a = as1.something;
       var b = as2.something;
    
       someMethod(){
          var x = kIsWeb? a : b;
       }
    }
    

    【讨论】:

      【解决方案2】:

      您可以通过以下方式实现它:

      import 'package: flutter_app2/addSearch.dart'
          if (dart.library.html) 'package: flutter_app2/addSearchWeb.dart';
      

      请记住为addSearch.dartaddSearchWeb.dart 创建相同的类/方法结构

      【讨论】:

        猜你喜欢
        • 2012-02-21
        • 1970-01-01
        • 2018-01-18
        • 2019-05-23
        • 2019-10-13
        • 2019-07-04
        • 2011-03-07
        • 2019-03-17
        相关资源
        最近更新 更多