import 'dart:async'; import 'package:flutter/material.dart'; import 'package:yumi/ui_kit/widgets/room/effect/gift_mp4_effect_view.dart'; const _demoVideoPath = 'assets/debug/manager-packed-alpha.mp4'; const _demoBackgroundColor = Color(0xFF7C3AED); void main() { runApp(const GiftMp4DemoApp()); } class GiftMp4DemoApp extends StatelessWidget { const GiftMp4DemoApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, theme: ThemeData.dark(useMaterial3: true), home: const GiftMp4DemoPage(), ); } } class GiftMp4DemoPage extends StatefulWidget { const GiftMp4DemoPage({super.key}); @override State createState() => _GiftMp4DemoPageState(); } class _GiftMp4DemoPageState extends State { late final SCGiftMp4Controller _controller; @override void initState() { super.initState(); _controller = SCGiftMp4Controller(); _controller.setPlaybackListener( onComplete: () => unawaited(_replay()), onFailed: (error) => debugPrint('[GiftMp4Demo] failed: $error'), ); WidgetsBinding.instance.addPostFrameCallback((_) => _replay()); } Future _replay() async { await _controller.playAsset(_demoVideoPath); } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: _demoBackgroundColor, body: Stack( children: [ Positioned.fill(child: GiftMp4EffectView(controller: _controller)), Positioned( left: 16, right: 16, bottom: 32, child: Row( children: [ FilledButton(onPressed: _replay, child: const Text('Replay')), const SizedBox(width: 12), FilledButton.tonal( onPressed: _controller.stop, child: const Text('Stop'), ), ], ), ), ], ), ); } }