投掷骰子App

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),
      ),
    );
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值