Flutter-在Flutter web中导入条件库



假设audioplayers|lib/audio_cache.dart仅在Android/iOS上工作,我有条件地从Dart文件中排除以下导入:

import "package:audioplayers/audio_cache.dart"

以以下方式:

import "dart:math" if (dart.library.io) "package:audioplayers/audio_cache.dart";

其中"dart:math"可以是任何fake_stub dart文件。简而言之,此仅为Flutter中的移动设备导入库。此处提供详细信息(感谢Alois Deniel!(。

在Flutter Web实现中隐藏平台特定代码的最佳方式是什么?

import 'dart:io' show Platform;
bool isMobile() => Platform.isAndroid || Platform.isIOS;
class _MyPageState extends State<MyPage> {
dynamic _audioPlayer;
@override
void initState() {
if (isMobile()) {
_audioPlayer = AudioCache(prefix: 'sounds/');
_audioPlayer.load('mysound.mp3');
}
}
}

当然,这种天真的尝试在AudioCache参考文献上失败了。

Error: Method not found: 'AudioCache'.
_audioPlayer = AudioCache(prefix: 'sounds/');

在这个与您有类似要求的堆栈溢出问题中,我从http包中编写了一个基于此实现的答案。

我认为您也可以使用类似的方法来处理这种条件依赖关系。我在那里提供了一个工作示例。我在这里引用答案。

核心思想如下。

  1. 创建一个抽象类来定义需要在genral中使用的方法
  2. 创建特定于扩展此抽象类的webandroid依赖项的实现
  3. 创建一个存根,该存根公开一个方法以返回该抽象实现的实例。这只是为了让飞镖分析工具满意
  4. 在抽象类中,导入此存根文件以及特定于mobileweb的条件导入。然后在其工厂构造函数中返回特定实现的实例。如果写入正确,这将由条件导入自动处理

相关内容

  • 没有找到相关文章

最新更新