diff --git a/flare_flutter/lib/cache.dart b/flare_flutter/lib/cache.dart index f7c73fa5..6ed8ed65 100644 --- a/flare_flutter/lib/cache.dart +++ b/flare_flutter/lib/cache.dart @@ -1,5 +1,7 @@ import 'dart:async'; +import 'package:pedantic/pedantic.dart'; + import 'asset_provider.dart'; import 'cache_asset.dart'; @@ -55,7 +57,7 @@ abstract class Cache { assert(asset != null); _assets[assetProvider] = asset; - asset.load(this, assetProvider); + unawaited(asset.load(this, assetProvider)); return asset.isAvailable ? asset : await asset.onLoaded() as T; } diff --git a/flare_flutter/lib/cache_asset.dart b/flare_flutter/lib/cache_asset.dart index 6e7cb0cb..168851a9 100644 --- a/flare_flutter/lib/cache_asset.dart +++ b/flare_flutter/lib/cache_asset.dart @@ -34,7 +34,8 @@ abstract class CacheAsset { return completer.future; } - void load(Cache cache, AssetProvider assetProvider) => _cache = cache; + Future load(Cache cache, AssetProvider assetProvider) async => + _cache = cache; void completeLoad() { if (_callbacks != null) { diff --git a/flare_flutter/lib/flare_cache_asset.dart b/flare_flutter/lib/flare_cache_asset.dart index 3aeff43a..1c78cb21 100644 --- a/flare_flutter/lib/flare_cache_asset.dart +++ b/flare_flutter/lib/flare_cache_asset.dart @@ -1,4 +1,3 @@ -import 'dart:typed_data'; import 'package:flutter/foundation.dart'; import 'asset_provider.dart'; @@ -25,17 +24,19 @@ class FlareCacheAsset extends CacheAsset { } @override - void load(Cache cache, AssetProvider assetProvider) { - super.load(cache, assetProvider); - assetProvider.load().then((ByteData data) { - if (useCompute) { - compute(FlutterActor.loadFromByteData, data) - .then((FlutterActor actor) => loadedActor(actor, assetProvider)); - } else { - FlutterActor.loadFromByteData(data) - .then((FlutterActor actor) => loadedActor(actor, assetProvider)); - } - }); + Future load(Cache cache, AssetProvider assetProvider) async { + await super.load(cache, assetProvider); + + final data = await assetProvider.load(); + if (data == null) { + print("Failed to load flare file from $assetProvider."); + return; + } + + final actor = useCompute + ? await compute(FlutterActor.loadFromByteData, data) + : await FlutterActor.loadFromByteData(data); + loadedActor(actor, assetProvider); } @override diff --git a/flare_flutter/pubspec.yaml b/flare_flutter/pubspec.yaml index 766ef1ac..8e1d021b 100644 --- a/flare_flutter/pubspec.yaml +++ b/flare_flutter/pubspec.yaml @@ -11,6 +11,7 @@ dependencies: flare_dart: path: ../flare_dart/ meta: ^1.0.5 + pedantic: ^1.9.0 dev_dependencies: flutter_test: sdk: flutter