是否可以在 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.dart
和addSearchWeb.dart
创建相同的类/方法结构
【讨论】:
以上是关于是否可以在 Flutter 中动态激活包? (根据网页构建,移动构建)的主要内容,如果未能解决你的问题,请参考以下文章
[Flutter Widget] StatefulWidget
如何根据flutter中的sharedPrefs值设置动态initialRoute?
Flutter插件包选择 ( 查看文档是否全面 | 查看插件包的更新版本次数 | 查看使用示例 | 查看 GitHub 项目的 Star Fork Issues )