是否可以在 Flutter 中动态激活包? (根据网页构建,移动构建)

Posted

技术标签:

【中文标题】是否可以在 Flutter 中动态激活包? (根据网页构建,移动构建)【英文标题】:Is it possible to dynamically activate a package in Flutter? (According to web build, mobile build) 【发布时间】: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';

)

【问题讨论】:

【参考方案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 创建相同的类/方法结构

【讨论】:

以上是关于是否可以在 Flutter 中动态激活包? (根据网页构建,移动构建)的主要内容,如果未能解决你的问题,请参考以下文章

[Flutter Widget] StatefulWidget

如何激活webstorm 11

如何根据flutter中的sharedPrefs值设置动态initialRoute?

Flutter插件包选择 ( 查看文档是否全面 | 查看插件包的更新版本次数 | 查看使用示例 | 查看 GitHub 项目的 Star Fork Issues )

在 Flutter Web 中使用 Flutter 移动包

17spring注解学习(自动装配)——@Profile根据当前环境,动态的激活和切换一系列组件的功能