-
Notifications
You must be signed in to change notification settings - Fork 521
Description
I'm having the same issue as @azhansy here on this closed issue.
I've just updated my app from Flutter 1.x.x to 2.x.x and using flare_flutter 3.0.2.
Everything was working fine under Flutter 1.x.x, but since upgrading my code to work with 2.2.3, this is the only problem I'm experiencing in my app. The error output is:
[VERBOSE-2:ui_dart_state.cc(199)] Unhandled Exception: Exception: LateInitializationError: Field '_paint@235459774' has not been initialized.
#0 FlutterActorImage._paint (package:flare_flutter/flare.dart)
#1 FlutterActorImage.onBlendModeChanged (package:flare_flutter/flare.dart:505:5)
#2 FlutterActorDrawable.blendMode= (package:flare_flutter/flare.dart:226:5)
#3 FlutterActorDrawable.blendModeId= (package:flare_flutter/flare.dart:234:5)
#4 ActorDrawable.read (package:flare_flutter/base/actor_drawable.dart:77:17)
#5 ActorImage.read (package:flare_flutter/base/actor_image.dart:305:19)
#6 ActorArtboard.readComponentsBlock (package:flare_flutter/base/actor_artboard.dart:387:34)
#7 ActorArtboard.read (package:flare_flutter/base/actor_artboard.dart:349:11)
#8 Actor.readArtboardsBlock (package:flare_flutter/base/actor.dart:180:22)
#9 Actor.load (package:flare_flutter/base/actor.dart:85:11)
#10 FlutterActor.loadFromByteData (package:flare_flutter/flare.dar<…>
I created a helper class for my Flare/Rive animations as below:
class Rive {
// Singleton
static final Rive _instance = new Rive.internal();
factory Rive() => _instance;
Rive.internal();
final Map<String, AssetFlare> _assets = {};
// Initialise the Flare assets.
Future<void> init() async {
animAsset.forEach((name, filename) {
_assets[name] = AssetFlare(bundle: rootBundle, name: filename);
});
// Don't prune the Flare cache, keep cached files ready to be re-displayed.
FlareCache.doesPrune = false;
await _cacheAssets();
}
// Play the named Flare animation asset.
Widget play({
@required String name,
@required String animation,
String artboard,
FlareController controller,
bool isPaused = false,
Alignment alignment = Alignment.center,
BoxFit fit = BoxFit.contain,
bool antialias = false,
void Function(String) callback,
}) {
return FlareActor.asset(_assets[name],
animation: animation,
artboard: artboard,
controller: controller,
isPaused: isPaused,
alignment: alignment,
fit: fit,
antialias: antialias,
callback: callback,
);
}
// Load all the Flare assets into the cache.
Future<void> _cacheAssets() async =>
_assets.forEach((name, asset) async => await cachedActor(asset));
// Load the specified Flare asset into the cache.
Future<void> cacheAsset(String name) async => await cachedActor(_assets[name]);
}
Basically, on initialisation, I cache the flare assets so they're all ready to be animated. Then call the play() function to run the animation.
This all used to work beautifully in the past. Now, with Flutter 2.x I'm getting the above error (even if I don't cache the files and attempt to play the files directly). It appears to be that _paint is not getting initialised in flare.dart.
Any pointers/help are most appreciated!