Skip to content
Snippets Groups Projects
Select Git revision
  • c23f7fb7d1d58f8ffdac0ac1dbbbbcb30c4c791e
  • master default protected
  • 61-upgrade-framework-and-dependencies
  • 42-add-allowed-categories-in-settings-page
  • 44-improve-app-metadata
  • 23-add-tip-response-on-clic-on-button
  • Release_1.11.0_55 protected
  • Release_1.10.2_54 protected
  • Release_1.10.1_53 protected
  • Release_1.10.0_52 protected
  • Release_1.9.0_51 protected
  • Release_1.8.0_50 protected
  • Release_1.7.0_49 protected
  • Release_1.6.2_48 protected
  • Release_1.6.1_47 protected
  • Release_1.6.0_46 protected
  • Release_1.5.1_45 protected
  • Release_1.5.0_44 protected
  • Release_1.4.1_43 protected
  • Release_1.4.0_42 protected
  • Release_1.3.1_41 protected
  • Release_1.3.0_40 protected
  • Release_1.2.33_39 protected
  • Release_1.2.32_38 protected
  • Release_1.2.31_37 protected
  • Release_1.2.30_36 protected
26 results

button_resume_saved_game.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(