import 'dart:async';
import 'dart:math';
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
debugShowCheckedModeBanner: false,
home: DiceRoller(),
theme: ThemeData(primarySwatch: Colors.blue),
));
}
class DiceRoller extends StatefulWidget {
@override
_DiceRollerState createState() => _DiceRollerState();
}
class _DiceRollerState extends State<DiceRoller> {
List<int> _diceValues = [1, 1]; // 初始两个骰子的点数
Random _random = Random();
bool _isAnimating = false; // 是否正在动画中
Future<void> _animateDiceRoll() async {
setState(() => _isAnimating = true);
for (int i = 0; i < 30; i++) {
await Future.delayed(Duration(milliseconds: 1));
setState(() {
_diceValues = [_random.nextInt(6) + 1, _random.nextInt(6) + 1];
});
}
await Future.delayed(Duration(milliseconds: 1));
setState(() {
_isAnimating = false;
});
}
void _rollDice() {
if (!_isAnimating) {
_animateDiceRoll();
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Dice Roller')),
body: Center(
child: Row( // 使用Row布局并排放置两个骰子
mainAxisAlignment: MainAxisAlignment.center,
children: [
AnimatedSwitcher(
duration: Duration(milliseconds: 300),
transitionBuilder: (Widget child, Animation<double> animation) {
return FadeTransition(
opacity: animation,
child: ScaleTransition(
scale: animation,
child: child,
),
);
},
child: GestureDetector(
onTap: () => _rollDice(),
child: Image.asset(
'assets/dice${_diceValues[0]}.png',
width: 150,
height: 150,
),
),
),
SizedBox(width: 5), // 为两个骰子之间添加间距
AnimatedSwitcher(
duration: Duration(milliseconds: 300),
transitionBuilder: (Widget child, Animation<double> animation) {
return FadeTransition(
opacity: animation,
child: ScaleTransition(
scale: animation,
child: child,
),
);
},
child: GestureDetector(
onTap: () => _rollDice(),
child: Image.asset(
'assets/dice${_diceValues[1]}.png',
width: 150,
height: 150,
),
),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _rollDice,
tooltip: 'Roll',
child: Icon(Icons.shuffle),
),
);
}
}