gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:25:56 29 4
gpt4 key购买 nike

假设 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 中。详情 here (感谢 阿洛伊斯·丹尼尔 !)。

在 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/');

最佳答案

在这个堆栈溢出 question与您的要求相似,我根据来自 http 的此实现写了一个答案包裹。
我认为您也可以使用类似的方法来处理这种条件依赖关系。我提供了一个工作示例 there .我在这里引用答案。

The core idea is as follows.

  1. Create an abstract class to define the methods you will need to use in genral.
  2. Create implementations specific to web and android dependencies which extends this abstract class.
  3. Create a stub which exposes a method to return the instance of this abstract implementation. This is only to keep the dart analysis tool happy.
  4. In the abstract class import this stub file along with the conditional imports specific for mobile and web. Then in its factory constructor return the instance of the specific implementation. This will be handled automatically by conditional import if written correctly.

关于Flutter - flutter-web 中的条件库导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58670361/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com