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.

28 lines
1.1 KiB

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/services.dart';
  3. import 'package:flutter_riverpod/flutter_riverpod.dart';
  4. import 'package:my_flutter_puzzle/application/states/image_splitter_state.dart';
  5. import 'package:my_flutter_puzzle/utils/image_splitter.dart';
  6. class ImageSplitterNotifier extends StateNotifier<ImageSplitterState> {
  7. final ImageSplitter _splitter;
  8. ImageSplitterNotifier(this._splitter) : super(const ImageSplitterState());
  9. void getInitialImages({required int puzzleSize, required String imagePath}) async {
  10. state = const ImageSplitterState.generating();
  11. try {
  12. final data = await rootBundle.load(imagePath);
  13. final imageBytes = data.buffer.asUint8List();
  14. final _splitter = ImageSplitter();
  15. final palette = await _splitter.getImagePalette(AssetImage(imagePath));
  16. final images = await _splitter.runSplitterIsolate(imageBytes, puzzleSize);
  17. state = ImageSplitterState.complete(Image.asset(imagePath), images, palette);
  18. } catch (e) {
  19. state = ImageSplitterState.error(message: e.toString());
  20. }
  21. }
  22. }