J'utilise Flutter pour charger un "actif" dans un File
afin qu'une application native puisse y accéder.
Voici comment je charge l'actif:
final dbBytes = await rootBundle.load('assets/file');
Cela renvoie une instance de ByteData
.
Comment puis-je écrire ceci à un Dart.io.File
exemple?
ByteData
est une abstraction pour:
Séquence d'octets d'accès aléatoire de longueur fixe qui fournit également un accès aléatoire et non aligné aux entiers de largeur fixe et aux nombres à virgule flottante représentés par ces octets.
Comme Gunter l'a mentionné dans les commentaires, vous pouvez utiliser File.writeAsBytes
. Cela nécessite un peu de travail API pour passer de ByteData
à un List<int>
, pourtant.
import 'Dart:async';
import 'Dart:io';
import 'Dart:typed_data';
Future<void> writeToFile(ByteData data, String path) {
final buffer = data.buffer;
return new File(path).writeAsBytes(
buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
}
J'ai également déposé un problème pour rendre les documents sur Flutter plus clairs pour ce cas d'utilisation.
pour rechercher flutter ByteData to List<int>
puis trouvé ici, mais pas complètement répondre à ma question:
comment convertir ByteData
en List<int>
?
après auto-investigation, la solution est:
.cast<int>()
ByteData audioByteData = await rootBundle.load(audioAssetsFullPath);
Uint8List audioUint8List = audioByteData.buffer.asUint8List(audioByteData.offsetInBytes, audioByteData.lengthInBytes);
List<int> audioListInt = audioUint8List.cast<int>();
ou 2. utilisez .map
ByteData audioByteData = await rootBundle.load(audioAssetsFullPath);
Uint8List audioUint8List = audioByteData.buffer.asUint8List(audioByteData.offsetInBytes, audioByteData.lengthInBytes);
List<int> audioListInt = audioUint8List.map((eachUint8) => eachUint8.toInt()).toList();