import 'package:battle/button/button_controller.dart'; import 'package:flutter/material.dart'; import 'package:widget/widget.dart'; import '../button/button_painter.dart'; class GamePage extends StatefulWidget { const GamePage({super.key}); @override State createState() => _GamePageState(); } class _GamePageState extends State with SingleTickerProviderStateMixin { late ButtonController _controller; @override void initState() { super.initState(); _controller = ButtonController(vsync: this); _controller.start(); } void _reset() { _controller.reset(); } @override Widget build(BuildContext context) { return Scaffold( body: Stack( children: [ Positioned.fill( child: ColorFiltered( colorFilter: const ColorFilter.matrix([ 1, 0, 0, 0, 0, //r 0, 1, 0, 0, 0, //r 0, 0, 1, 0, 0, //r 0, 0, 0, 0.25, 0, //r ]), child: Image.asset( 'assets/images/background.png', repeat: ImageRepeat.repeat, cacheWidth: 30, cacheHeight: 30, ), ), ), Positioned.fill( child: Column( children: [ Expanded( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: BattleBoard( card: ClipRRect( borderRadius: BorderRadius.circular(8), child: Container( color: Colors.grey, ), ), button: CustomPaint( painter: ButtonPainter(controller: _controller), child: const SizedBox.expand(), ), ), ), ), TextButton( onPressed: () { _reset(); }, child: const Text('重新开始'), ), ], ), ), ], ), ); } }