Files
PiliPlus/lib/utils/asset_utils.dart
My-Responsitories 7276cde48a refa player (#1848)
* tweak

* Reapply "opt: audio uri" (#1833)

This reverts commit 8e726f49b2.

* opt: player

* opt: player

* refa: create player

* refa: player

* opt: UaType

* fix: sb seek preview

* opt: setSub

* fix: screenshot

* opt: unnecessary final player state

* opt: player track

* opt FileSource constructor [skip ci]

* fixes

* fix: dispose player

* fix: quote

* update

* fix: multi ua & remove unused loop

* remove unneeded check [skip ci]

---------

Co-authored-by: dom <githubaccount56556@proton.me>
2026-02-27 15:51:55 +08:00

71 lines
1.6 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'package:flutter/services.dart';
import 'package:path/path.dart' as path;
abstract final class AssetUtils {
/// from media-kit AssetLoader
static String? tryGetPath(String key) {
if (Platform.isWindows || Platform.isLinux) {
return path.join(
path.dirname(Platform.resolvedExecutable),
'data',
'flutter_assets',
key,
);
} else if (Platform.isMacOS) {
return path.join(
path.dirname(Platform.resolvedExecutable),
'..',
'Frameworks',
'App.framework',
'Resources',
'flutter_assets',
key,
);
} else if (Platform.isIOS) {
return path.join(
path.dirname(Platform.resolvedExecutable),
'Frameworks',
'App.framework',
'flutter_assets',
key,
);
}
return null;
}
static FutureOr<String> getOrCopy(
String src,
Iterable<String> files,
String dst,
) async {
final parsedSrc = tryGetPath(src);
if (parsedSrc != null) {
final srcDir = Directory(parsedSrc);
if (srcDir.existsSync()) {
return srcDir.absolute.path;
}
}
final dstDir = Directory(dst);
if (!dstDir.existsSync()) {
await dstDir.create(recursive: true);
}
for (final file in files) {
final targetFile = File(path.join(dst, file));
if (targetFile.existsSync()) {
continue;
}
try {
final data = await rootBundle.load(file);
await targetFile.writeAsBytes(data.buffer.asUint8List());
} catch (_) {}
}
return dst;
}
}