En supposant que audioplayers|lib/audio_cache.Dart
ne fonctionnait que sur Android/iOS, j'exclus conditionnellement l'importation suivante à partir d'un fichier Dart:
import "package:audioplayers/audio_cache.Dart"
de la manière suivante:
import "Dart:math" if (Dart.library.io) "package:audioplayers/audio_cache.Dart";
où "Dart: math" peut être n'importe quel fichier Dart fake_stub. En bref, cela importe une bibliothèque uniquement pour les appareils mobiles dans Flutter. Détails ici (merci Alois Deniel !).
Quelle serait la meilleure façon de masquer le code spécifique à la plate-forme dans l'implémentation de 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');
}
}
}
Cet essai naïf échoue sur AudioCache
référence bien sûr.
Error: Method not found: 'AudioCache'.
_audioPlayer = AudioCache(prefix: 'sounds/');
Dans ce débordement de pile question qui a des exigences similaires aux vôtres, j'ai écrit une réponse basée sur cette implémentation de http package.
Je pense que vous pouvez également utiliser une approche similaire pour gérer ces dépendances conditionnelles. J'ai fourni un exemple de travail là . Je cite la réponse ici.
L'idée centrale est la suivante.
- Créez une classe abstraite pour définir les méthodes que vous devrez utiliser en général.
- Créez des implémentations spécifiques aux dépendances
web
etAndroid
qui étendent cette classe abstraite.- Créez un stub qui expose une méthode pour renvoyer l'instance de cette implémentation abstraite. C'est seulement pour garder l'outil d'analyse Dart heureux.
- Dans la classe abstraite, importez ce fichier de raccord avec les importations conditionnelles spécifiques à
mobile
etweb
. Ensuite, dans son constructeur d'usine, retournez l'instance de l'implémentation spécifique. Cela sera géré automatiquement par importation conditionnelle s'il est écrit correctement.