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.

66 lines
2.2 KiB

2 years ago
2 years ago
2 years ago
2 years ago
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_riverpod/flutter_riverpod.dart';
  3. import 'package:my_flutter_puzzle/application/states/image_splitter_state.dart';
  4. import 'package:my_flutter_puzzle/models/puzzle_data.dart';
  5. import 'package:my_flutter_puzzle/providers.dart';
  6. import 'package:my_flutter_puzzle/screens/photo/photo_screen.dart';
  7. import 'package:my_flutter_puzzle/utils/puzzle_solver.dart';
  8. import 'package:rive/rive.dart';
  9. class PuzzleStarterScreen extends ConsumerStatefulWidget {
  10. final int puzzleSize;
  11. final String image;
  12. final int duration;
  13. const PuzzleStarterScreen({
  14. Key? key,
  15. required this.duration,
  16. required this.puzzleSize,
  17. required this.image,
  18. }) : super(key: key);
  19. @override
  20. ConsumerState<ConsumerStatefulWidget> createState() => _SoloScreenState();
  21. }
  22. class _SoloScreenState extends ConsumerState<PuzzleStarterScreen> {
  23. late final PuzzleSolverClient _solverClient;
  24. late RiveAnimationController _riveController;
  25. late final int _puzzleSize;
  26. late final PuzzleData _initialPuzzleData;
  27. @override
  28. void initState() {
  29. _puzzleSize = widget.puzzleSize;
  30. _riveController = SimpleAnimation('idle');
  31. _solverClient = PuzzleSolverClient(size: _puzzleSize);
  32. _initialPuzzleData = ref.read(puzzleNotifierProvider(_solverClient).notifier).generateInitialPuzzle();
  33. ref.refresh(imageSplitterNotifierProvider);
  34. final state = ref.read(imageSplitterNotifierProvider);
  35. if (state is! ImageSplitterComplete) {
  36. WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
  37. ref.read(imageSplitterNotifierProvider.notifier).getInitialImages(
  38. puzzleSize: _puzzleSize,
  39. imagePath: widget.image,
  40. );
  41. });
  42. }
  43. ref.read(puzzleTypeNotifierProvider.notifier).changeToPhoto();
  44. super.initState();
  45. }
  46. @override
  47. Widget build(BuildContext context) {
  48. return AnimatedSwitcher(
  49. duration: const Duration(milliseconds: 400),
  50. child: PhotoScreen(
  51. solverClient: _solverClient,
  52. initialPuzzleData: _initialPuzzleData,
  53. duration: widget.duration,
  54. puzzleSize: _puzzleSize,
  55. riveController: _riveController,
  56. ),
  57. );
  58. }
  59. }