You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.9 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_bloc/flutter_bloc.dart';
  3. import 'package:flutter_riverpod/flutter_riverpod.dart';
  4. import 'package:my_flutter_puzzle/cubits/count_down_timer_cubit.dart';
  5. import 'package:my_flutter_puzzle/models/puzzle_data.dart';
  6. import 'package:my_flutter_puzzle/providers.dart';
  7. import 'package:my_flutter_puzzle/utils/puzzle_solver.dart';
  8. import 'game_button_widget/puzzle_game_button.dart';
  9. class GameButtonWidget extends StatelessWidget {
  10. const GameButtonWidget({
  11. Key? key,
  12. required PuzzleSolverClient solverClient,
  13. required PuzzleData initialPuzzleData,
  14. this.width = 145,
  15. this.padding = const EdgeInsets.only(top: 13.0, bottom: 12.0),
  16. }) : _solverClient = solverClient,
  17. _initialPuzzleData = initialPuzzleData,
  18. super(key: key);
  19. final PuzzleSolverClient _solverClient;
  20. final PuzzleData _initialPuzzleData;
  21. final double width;
  22. final EdgeInsets padding;
  23. @override
  24. Widget build(BuildContext context) {
  25. return Consumer(
  26. builder: (context, ref, child) {
  27. final state = ref.watch(puzzleNotifierProvider(_solverClient));
  28. return state.when(
  29. () => PuzzleGameButton(
  30. text: 'Start Game',
  31. onTap: () => ref.read(puzzleNotifierProvider(_solverClient).notifier).initializePuzzle(
  32. initialPuzzleData: _initialPuzzleData,
  33. ),
  34. padding: padding,
  35. width: width,
  36. ),
  37. initializing: () => PuzzleGameButton(
  38. text: 'Get ready...',
  39. onTap: null,
  40. padding: padding,
  41. width: width,
  42. ),
  43. scrambling: (_) => PuzzleGameButton(
  44. text: 'Get ready...',
  45. onTap: null,
  46. padding: padding,
  47. width: width,
  48. ),
  49. current: (puzzleData) => const SizedBox(),
  50. computingSolution: (puzzleData) => PuzzleGameButton(
  51. text: 'Processing...',
  52. onTap: null,
  53. padding: padding,
  54. width: width,
  55. ),
  56. autoSolving: (puzzleData) => PuzzleGameButton(
  57. text: 'Solving...',
  58. onTap: null,
  59. padding: padding,
  60. width: width,
  61. ),
  62. solved: (puzzleData) => PuzzleGameButton(
  63. text: 'Start Game',
  64. onTap: () => ref.read(puzzleNotifierProvider(_solverClient).notifier).initializePuzzle(
  65. initialPuzzleData: puzzleData,
  66. ),
  67. padding: padding,
  68. width: width,
  69. ),
  70. error: (_) => PuzzleGameButton(
  71. text: 'Start Game',
  72. onTap: () => ref.read(puzzleNotifierProvider(_solverClient).notifier).initializePuzzle(
  73. initialPuzzleData: _initialPuzzleData,
  74. ),
  75. padding: padding,
  76. width: width,
  77. ),
  78. );
  79. },
  80. );
  81. }
  82. }