Skip to content
Snippets Groups Projects
Select Git revision
  • 185c1b27c8706bcfc26b5a760452b020871e897e
  • master default protected
  • 61-upgrade-framework-and-dependencies
  • 42-improve-app-metadata
  • 17-improve-and-complete-offline-words-list-and-tips
  • 6-allow-translate-application
  • 9-improve-documentation
  • Release_1.10.0_44 protected
  • Release_1.9.2_43 protected
  • Release_1.9.1_42 protected
  • Release_1.9.0_41 protected
  • Release_1.8.0_40 protected
  • Release_1.7.0_39 protected
  • Release_1.6.0_38 protected
  • Release_1.5.2_37 protected
  • Release_1.5.1_36 protected
  • Release_1.5.0_35 protected
  • Release_1.4.1_34 protected
  • Release_1.4.0_33 protected
  • Release_1.3.2_32 protected
  • Release_1.3.1_31 protected
  • Release_1.3.0_30 protected
  • Release_1.2.18_29 protected
  • Release_1.2.17_28 protected
  • Release_1.2.16_27 protected
  • Release_1.2.15_26 protected
  • Release_1.2.14_25 protected
27 results

game_end.dart

Blame
  • game_board.dart 4.27 KiB
    import 'package:flutter/material.dart';
    import 'package:flutter_bloc/flutter_bloc.dart';
    
    import 'package:jeweled/cubit/game_cubit.dart';
    import 'package:jeweled/models/game.dart';
    import 'package:jeweled/models/cell_location.dart';
    import 'package:jeweled/ui/painters/game_board_painter.dart';
    
    class GameBoard extends StatefulWidget {
      const GameBoard({super.key});
    
      @override
      State<GameBoard> createState() => _GameBoard();
    }
    
    class _GameBoard extends State<GameBoard> with TickerProviderStateMixin {
      final int animationDuration = 500;
    
      List<List<Animation<double>?>> animations = [];
    
      void resetAnimations(int boardSize) {
        this.animations = List.generate(
          boardSize,
          (i) => List.generate(
            boardSize,
            (i) => null,
          ),
        );
      }
    
      void animateCells(List<CellLocation> cellsToRemove) {
        final GameCubit gameCubit = BlocProvider.of<GameCubit>(context);
        final Game currentGame = gameCubit.state.currentGame;
    
        // "move down" cells
        final controller = AnimationController(
          vsync: this,
          duration: Duration(milliseconds: animationDuration),
        )..addListener(() {
            if (mounted) {
              setState(() {});
            }
          });
    
        if (mounted) {
          setState(() {});
        }
    
        Animation<double> animation(int count) => Tween(
              begin: 0.0,
              end: count.toDouble(),
            ).animate(CurvedAnimation(
              curve: Curves.bounceOut,
              parent: controller,
            ))
              ..addStatusListener((status) {
                if (status == AnimationStatus.completed) {
                  gameCubit.postAnimate();
    
                  resetAnimations(currentGame.settings.boardSize);
                  setState(() {});
    
                  controller.dispose();
                }
              });
    
        // Count translation length for each cell to move
        final List<List<int>> stepsDownCounts = List.generate(
          currentGame.settings.boardSize,
          (i) => List.generate(