yumi-flutter/lib/debug/gift_mp4_demo_main.dart
2026-05-18 19:04:56 +08:00

84 lines
2.1 KiB
Dart

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<GiftMp4DemoPage> createState() => _GiftMp4DemoPageState();
}
class _GiftMp4DemoPageState extends State<GiftMp4DemoPage> {
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<void> _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'),
),
],
),
),
],
),
);
}
}