当前位置: 首页 > 知识库问答 >
问题:

flutter-flutter-web中的条件库导入

孔志强
2023-03-14

假设<code>AudioPlayer|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/');

共有1个答案

马阳晖
2023-03-14

在这个与您的要求相似的堆栈溢出问题中,我根据超文本传输协议包的实现编写了一个答案。

我想你也可以用类似的方法来处理这种条件依赖。我在这里提供了一个工作示例。我在这里引用一下答案。

核心思想如下。

    < li >创建一个抽象类来定义您将需要在通用中使用的方法。 < li >创建特定于扩展此抽象类的< code>web和< code>android依赖项的实现。 < li >创建一个stub,它公开一个方法来返回此抽象实现的实例。这只是为了让dart分析工具高兴。 < li >在抽象类中,导入此存根文件以及特定于< code>mobile和< code>web的条件导入。然后在其工厂构造函数中返回具体实现的实例。如果写得正确,这将由条件导入自动处理。
 类似资料:
  • 由于Flutter web还不支持lib,并且有大量的包依赖于。

  • This page is for users who are familiar with the HTML and CSS syntax for arranging components of an application’s UI. It maps HTML/CSS code snippets to their Flutter/Dart code equivalents. The example

  • [!]Android toolchain-为Android设备开发(Android SDK 28.0.3版)•Android SDK在C:\users\darknight\appdata\local\Android\SDK X Flutter需要Android SDK 29和Android BuildTools 28.0.3来更新Android SDK,请访问https://Flutter.dev

  • 我正在构建一个Flutter应用程序,我试图在网络上工作。其中一部分包含一些特定于web的代码: 但是, 导入会给出以下错误: 避免在 Flutter Web 插件包之外使用纯 Web 库 警告的较长版本如下所示: 避免在非网络插件的飘飘包中使用网页库、、。这些库在 Web 上下文之外不受支持。依赖于它们的功能在Flutter移动版的运行时会失败,并且在Flutter Web中通常不鼓励使用它们。

  • 我试图让我的flutter应用程序在浏览器中工作,它依赖于Firebase_database。没有关于如何做到这一点的文档,但我根据firebase_core和firebase_auth文档做了一些假设: > https://github.com/firebaseextended/flutterfire/tree/master/packages/firebase_core/firebase_cor

  • 我在Flitter web和将图像上传到Firestore时遇到问题。我很确定问题在于图像采集器,因为普通(移动)图像采集者不适用于web。普通图像选取器返回一个文件,但备选图像选取器web返回一个图像,该图像在上传时被拒绝,因为它期望<code>未来 image_picker_web有一个替代方案来返回我使用过的,然后通过转换为-并上传罚款,但图像已损坏且无法查看。 以下是我所做的: 按下按钮时