import 'dart:convert';
import 'dart:typed_data';
import 'package:flutter/widgets.dart';
import 'package:lottie/lottie.dart';
class BackgroundAnimation extends StatefulWidget {
final String animationJson;
final String backgroundImageUrl;
const BackgroundAnimation({
super.key,
required this.animationJson,
required this.backgroundImageUrl,
});
@override
State<BackgroundAnimation> createState() => _BackgroundAnimationState();
}
class _BackgroundAnimationState extends State<BackgroundAnimation>
with SingleTickerProviderStateMixin {
late final AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Stack(
fit: StackFit.expand,
children: [
Image.network(
widget.backgroundImageUrl,
fit: BoxFit.cover,
),
Lottie.memory(
Uint8List.fromList(utf8.encode(widget.animationJson)),
controller: _controller,
onLoaded: (composition) {
_controller
..duration = composition.duration
..repeat(
period: composition.duration * 0.6,
);
},
fit: BoxFit.cover,
),
],
);
}
}