Skip to content
Snippets Groups Projects
Select Git revision
  • 58716c8fb8240f17d8fdaddd9a6922ab0fd95314
  • master default protected
  • 61-upgrade-framework-and-dependencies
  • 44-improve-app-metadata
  • Release_0.10.0_57 protected
  • Release_0.9.2_56 protected
  • Release_0.9.1_55 protected
  • Release_0.9.0_54 protected
  • Release_0.8.0_53 protected
  • Release_0.7.0_52 protected
  • Release_0.6.0_51 protected
  • Release_0.5.3_50 protected
  • Release_0.5.2_49 protected
  • Release_0.5.1_48 protected
  • Release_0.5.0_47 protected
  • Release_0.4.1_46 protected
  • Release_0.4.0_45 protected
  • Release_0.3.1_44 protected
  • Release_0.3.0_43 protected
  • Release_0.2.1_42 protected
  • Release_0.2.0_41 protected
  • Release_0.1.19_40 protected
  • Release_0.1.18_39 protected
  • Release_0.1.17_38 protected
24 results

cell.dart

Blame
  • cell.dart 4.26 KiB
    import 'package:flutter/material.dart';
    
    import 'package:minehunter/provider/data.dart';
    import 'package:minehunter/utils/board_animate.dart';
    import 'package:minehunter/utils/board_utils.dart';
    
    class Cell {
      bool isMined = false;
      bool isExplored = false;
      bool isMarked = false;
      bool isExploded = false;
      int minesCountAround = 0;
    
      bool isAnimated = false;
    
      Cell(
        this.isMined,
      );
    
      /*
      * Build widget for board cell, with interactions
      */
      Container widget(Data myProvider, int row, int col) {
        String imageAsset = getImageAssetName(myProvider);
    
        return Container(
          decoration: BoxDecoration(
            color: getBackgroundColor(myProvider),
            border: getCellBorders(myProvider, row, col),
          ),
          child: GestureDetector(
            child: AnimatedSwitcher(
              duration: const Duration(milliseconds: 100),
              transitionBuilder: (Widget child, Animation<double> animation) {
                return ScaleTransition(scale: animation, child: child);
              },
              child: Image(
                image: AssetImage(imageAsset),
                fit: BoxFit.fill,
                key: ValueKey<int>(imageAsset.hashCode),
              ),
            ),
            onTap: () {
              // Set mines on board after first player try
              if (!myProvider.isBoardMined) {
                myProvider.updateCells(BoardUtils.createBoard(myProvider, row, col));
                myProvider.updateIsBoardMined(true);
              }
    
              if (!(myProvider.gameWin || myProvider.gameFail)) {
                if (myProvider.reportMode) {
                  BoardUtils.reportCell(myProvider, row, col);
                } else {
                  BoardUtils.walkOnCell(myProvider, row, col);
                }
                if (BoardUtils.checkGameIsFinished(myProvider)) {
                  myProvider.updateReportMode(false);
                  BoardAnimate.startAnimation(myProvider, myProvider.gameWin ? 'win' : 'fail');
                }
              }
            },
          ),
        );
      }
    
      /*
      * Compute image asset name, from skin and cell value/state
      */
      String getImageAssetName(Data myProvider) {
        String imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_unknown.png';