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.
69 lines
2.2 KiB
69 lines
2.2 KiB
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:my_flutter_puzzle/application/states/image_splitter_state.dart';
|
|
import 'package:my_flutter_puzzle/models/puzzle_data.dart';
|
|
import 'package:my_flutter_puzzle/providers.dart';
|
|
import 'package:my_flutter_puzzle/screens/photo/photo_screen.dart';
|
|
import 'package:my_flutter_puzzle/utils/puzzle_solver.dart';
|
|
import 'package:rive/rive.dart';
|
|
|
|
class PuzzleStarterScreen extends ConsumerStatefulWidget {
|
|
final int puzzleSize;
|
|
final String image;
|
|
final int duration;
|
|
final int level;
|
|
|
|
const PuzzleStarterScreen({
|
|
Key? key,
|
|
required this.duration,
|
|
required this.puzzleSize,
|
|
required this.image,
|
|
required this.level,
|
|
}) : super(key: key);
|
|
|
|
@override
|
|
ConsumerState<ConsumerStatefulWidget> createState() => _SoloScreenState();
|
|
}
|
|
|
|
class _SoloScreenState extends ConsumerState<PuzzleStarterScreen> {
|
|
late final PuzzleSolverClient _solverClient;
|
|
late RiveAnimationController _riveController;
|
|
late final int _puzzleSize;
|
|
late final PuzzleData _initialPuzzleData;
|
|
|
|
@override
|
|
void initState() {
|
|
_puzzleSize = widget.puzzleSize;
|
|
_riveController = SimpleAnimation('idle');
|
|
_solverClient = PuzzleSolverClient(size: _puzzleSize);
|
|
_initialPuzzleData = ref.read(puzzleNotifierProvider(_solverClient).notifier).generateInitialPuzzle();
|
|
ref.refresh(imageSplitterNotifierProvider);
|
|
final state = ref.read(imageSplitterNotifierProvider);
|
|
if (state is! ImageSplitterComplete) {
|
|
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
|
|
ref.read(imageSplitterNotifierProvider.notifier).getInitialImages(
|
|
puzzleSize: _puzzleSize,
|
|
imagePath: widget.image,
|
|
);
|
|
});
|
|
}
|
|
|
|
ref.read(puzzleTypeNotifierProvider.notifier).changeToPhoto();
|
|
super.initState();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return AnimatedSwitcher(
|
|
duration: const Duration(milliseconds: 400),
|
|
child: PhotoScreen(
|
|
solverClient: _solverClient,
|
|
initialPuzzleData: _initialPuzzleData,
|
|
level: widget.level,
|
|
duration: widget.duration,
|
|
puzzleSize: _puzzleSize,
|
|
riveController: _riveController,
|
|
),
|
|
);
|
|
}
|
|
}
|