Browse Source

first commit

master
mohsen zamani 2 years ago
parent
commit
0d47bf3d4b
  1. 4
      android/build.gradle
  2. 14
      lib/application/notifiers/image_splitter_notifier.dart
  3. 133
      lib/application/states/image_splitter_state.freezed.dart
  4. 13
      lib/main.dart
  5. 5
      lib/res/strings.dart
  6. 4
      lib/screens/level_list/screen/level_list_screen.dart
  7. 75
      lib/screens/photo/photo_screen.dart
  8. 225
      lib/screens/photo/photo_screen_large.dart
  9. 17
      lib/screens/photo/photo_screen_medium.dart
  10. 186
      lib/screens/photo/photo_screen_small.dart
  11. 4
      lib/widgets/photo_screen/pick_image_button.dart
  12. 5
      lib/widgets/solo_screen/puzzle_widget/puzzle_board.dart
  13. 2
      macos/Flutter/GeneratedPluginRegistrant.swift
  14. 332
      pubspec.lock

4
android/build.gradle

@ -1,12 +1,12 @@
buildscript {
ext.kotlin_version = '1.3.50'
ext.kotlin_version = '1.7.20'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath 'com.android.tools.build:gradle:4.1.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}

14
lib/application/notifiers/image_splitter_notifier.dart

@ -13,7 +13,7 @@ class ImageSplitterNotifier extends StateNotifier<ImageSplitterState> {
ImageSplitterNotifier(this._splitter) : super(const ImageSplitterState());
getInitialImages({required int puzzleSize}) async {
void getInitialImages({required int puzzleSize}) async {
state = const ImageSplitterState.generating();
try {
@ -21,19 +21,16 @@ class ImageSplitterNotifier extends StateNotifier<ImageSplitterState> {
final imageBytes = data.buffer.asUint8List();
final _splitter = ImageSplitter();
final palette =
await _splitter.getImagePalette(const AssetImage(defaultImagePath));
final palette = await _splitter.getImagePalette(const AssetImage(defaultImagePath));
final images = await _splitter.runSplitterIsolate(imageBytes, puzzleSize);
state = ImageSplitterState.complete(
Image.asset(defaultImagePath), images, palette);
state = ImageSplitterState.complete(Image.asset(defaultImagePath), images, palette);
} catch (e) {
state = ImageSplitterState.error(message: e.toString());
}
}
generateImages({required ImagePicker picker, required int puzzleSize}) async {
void generateImages({required ImagePicker picker, required int puzzleSize}) async {
state = const ImageSplitterState.generating();
try {
@ -44,8 +41,7 @@ class ImageSplitterNotifier extends StateNotifier<ImageSplitterState> {
final imageBytes = imageBytesPalette.item2;
final palette = imageBytesPalette.item3;
log('Image tuple retrieved');
final images =
await _splitter.runSplitterIsolate(imageBytes, puzzleSize);
final images = await _splitter.runSplitterIsolate(imageBytes, puzzleSize);
state = ImageSplitterState.complete(image, images, palette);
}
} catch (e) {

133
lib/application/states/image_splitter_state.freezed.dart

@ -26,8 +26,7 @@ class _$ImageSplitterStateTearOff {
return const ImageSplitterGenerating();
}
ImageSplitterComplete complete(
Image image, List<Image> images, PaletteGenerator palette) {
ImageSplitterComplete complete(Image image, List<Image> images, PaletteGenerator palette) {
return ImageSplitterComplete(
image,
images,
@ -51,18 +50,16 @@ mixin _$ImageSplitterState {
TResult when<TResult extends Object?>(
TResult Function() $default, {
required TResult Function() generating,
required TResult Function(
Image image, List<Image> images, PaletteGenerator palette)
complete,
required TResult Function(Image image, List<Image> images, PaletteGenerator palette) complete,
required TResult Function(String? message) error,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? generating,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)?
complete,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)? complete,
TResult Function(String? message)? error,
}) =>
throw _privateConstructorUsedError;
@ -70,12 +67,12 @@ mixin _$ImageSplitterState {
TResult maybeWhen<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? generating,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)?
complete,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)? complete,
TResult Function(String? message)? error,
required TResult orElse(),
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult map<TResult extends Object?>(
TResult Function(ImageSplitterIdle value) $default, {
@ -84,6 +81,7 @@ mixin _$ImageSplitterState {
required TResult Function(ImageSplitterError value) error,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>(
TResult Function(ImageSplitterIdle value)? $default, {
@ -105,34 +103,30 @@ mixin _$ImageSplitterState {
/// @nodoc
abstract class $ImageSplitterStateCopyWith<$Res> {
factory $ImageSplitterStateCopyWith(
ImageSplitterState value, $Res Function(ImageSplitterState) then) =
factory $ImageSplitterStateCopyWith(ImageSplitterState value, $Res Function(ImageSplitterState) then) =
_$ImageSplitterStateCopyWithImpl<$Res>;
}
/// @nodoc
class _$ImageSplitterStateCopyWithImpl<$Res>
implements $ImageSplitterStateCopyWith<$Res> {
class _$ImageSplitterStateCopyWithImpl<$Res> implements $ImageSplitterStateCopyWith<$Res> {
_$ImageSplitterStateCopyWithImpl(this._value, this._then);
final ImageSplitterState _value;
// ignore: unused_field
final $Res Function(ImageSplitterState) _then;
}
/// @nodoc
abstract class $ImageSplitterIdleCopyWith<$Res> {
factory $ImageSplitterIdleCopyWith(
ImageSplitterIdle value, $Res Function(ImageSplitterIdle) then) =
factory $ImageSplitterIdleCopyWith(ImageSplitterIdle value, $Res Function(ImageSplitterIdle) then) =
_$ImageSplitterIdleCopyWithImpl<$Res>;
}
/// @nodoc
class _$ImageSplitterIdleCopyWithImpl<$Res>
extends _$ImageSplitterStateCopyWithImpl<$Res>
class _$ImageSplitterIdleCopyWithImpl<$Res> extends _$ImageSplitterStateCopyWithImpl<$Res>
implements $ImageSplitterIdleCopyWith<$Res> {
_$ImageSplitterIdleCopyWithImpl(
ImageSplitterIdle _value, $Res Function(ImageSplitterIdle) _then)
_$ImageSplitterIdleCopyWithImpl(ImageSplitterIdle _value, $Res Function(ImageSplitterIdle) _then)
: super(_value, (v) => _then(v as ImageSplitterIdle));
@override
@ -151,8 +145,7 @@ class _$ImageSplitterIdle implements ImageSplitterIdle {
@override
bool operator ==(dynamic other) {
return identical(this, other) ||
(other.runtimeType == runtimeType && other is ImageSplitterIdle);
return identical(this, other) || (other.runtimeType == runtimeType && other is ImageSplitterIdle);
}
@override
@ -163,9 +156,7 @@ class _$ImageSplitterIdle implements ImageSplitterIdle {
TResult when<TResult extends Object?>(
TResult Function() $default, {
required TResult Function() generating,
required TResult Function(
Image image, List<Image> images, PaletteGenerator palette)
complete,
required TResult Function(Image image, List<Image> images, PaletteGenerator palette) complete,
required TResult Function(String? message) error,
}) {
return $default();
@ -176,8 +167,7 @@ class _$ImageSplitterIdle implements ImageSplitterIdle {
TResult? whenOrNull<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? generating,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)?
complete,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)? complete,
TResult Function(String? message)? error,
}) {
return $default?.call();
@ -188,8 +178,7 @@ class _$ImageSplitterIdle implements ImageSplitterIdle {
TResult maybeWhen<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? generating,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)?
complete,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)? complete,
TResult Function(String? message)? error,
required TResult orElse(),
}) {
@ -243,17 +232,14 @@ abstract class ImageSplitterIdle implements ImageSplitterState {
/// @nodoc
abstract class $ImageSplitterGeneratingCopyWith<$Res> {
factory $ImageSplitterGeneratingCopyWith(ImageSplitterGenerating value,
$Res Function(ImageSplitterGenerating) then) =
factory $ImageSplitterGeneratingCopyWith(ImageSplitterGenerating value, $Res Function(ImageSplitterGenerating) then) =
_$ImageSplitterGeneratingCopyWithImpl<$Res>;
}
/// @nodoc
class _$ImageSplitterGeneratingCopyWithImpl<$Res>
extends _$ImageSplitterStateCopyWithImpl<$Res>
class _$ImageSplitterGeneratingCopyWithImpl<$Res> extends _$ImageSplitterStateCopyWithImpl<$Res>
implements $ImageSplitterGeneratingCopyWith<$Res> {
_$ImageSplitterGeneratingCopyWithImpl(ImageSplitterGenerating _value,
$Res Function(ImageSplitterGenerating) _then)
_$ImageSplitterGeneratingCopyWithImpl(ImageSplitterGenerating _value, $Res Function(ImageSplitterGenerating) _then)
: super(_value, (v) => _then(v as ImageSplitterGenerating));
@override
@ -272,8 +258,7 @@ class _$ImageSplitterGenerating implements ImageSplitterGenerating {
@override
bool operator ==(dynamic other) {
return identical(this, other) ||
(other.runtimeType == runtimeType && other is ImageSplitterGenerating);
return identical(this, other) || (other.runtimeType == runtimeType && other is ImageSplitterGenerating);
}
@override
@ -284,9 +269,7 @@ class _$ImageSplitterGenerating implements ImageSplitterGenerating {
TResult when<TResult extends Object?>(
TResult Function() $default, {
required TResult Function() generating,
required TResult Function(
Image image, List<Image> images, PaletteGenerator palette)
complete,
required TResult Function(Image image, List<Image> images, PaletteGenerator palette) complete,
required TResult Function(String? message) error,
}) {
return generating();
@ -297,8 +280,7 @@ class _$ImageSplitterGenerating implements ImageSplitterGenerating {
TResult? whenOrNull<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? generating,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)?
complete,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)? complete,
TResult Function(String? message)? error,
}) {
return generating?.call();
@ -309,8 +291,7 @@ class _$ImageSplitterGenerating implements ImageSplitterGenerating {
TResult maybeWhen<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? generating,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)?
complete,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)? complete,
TResult Function(String? message)? error,
required TResult orElse(),
}) {
@ -364,18 +345,16 @@ abstract class ImageSplitterGenerating implements ImageSplitterState {
/// @nodoc
abstract class $ImageSplitterCompleteCopyWith<$Res> {
factory $ImageSplitterCompleteCopyWith(ImageSplitterComplete value,
$Res Function(ImageSplitterComplete) then) =
factory $ImageSplitterCompleteCopyWith(ImageSplitterComplete value, $Res Function(ImageSplitterComplete) then) =
_$ImageSplitterCompleteCopyWithImpl<$Res>;
$Res call({Image image, List<Image> images, PaletteGenerator palette});
}
/// @nodoc
class _$ImageSplitterCompleteCopyWithImpl<$Res>
extends _$ImageSplitterStateCopyWithImpl<$Res>
class _$ImageSplitterCompleteCopyWithImpl<$Res> extends _$ImageSplitterStateCopyWithImpl<$Res>
implements $ImageSplitterCompleteCopyWith<$Res> {
_$ImageSplitterCompleteCopyWithImpl(
ImageSplitterComplete _value, $Res Function(ImageSplitterComplete) _then)
_$ImageSplitterCompleteCopyWithImpl(ImageSplitterComplete _value, $Res Function(ImageSplitterComplete) _then)
: super(_value, (v) => _then(v as ImageSplitterComplete));
@override
@ -432,26 +411,20 @@ class _$ImageSplitterComplete implements ImageSplitterComplete {
}
@override
int get hashCode => Object.hash(
runtimeType,
const DeepCollectionEquality().hash(image),
const DeepCollectionEquality().hash(images),
const DeepCollectionEquality().hash(palette));
int get hashCode => Object.hash(runtimeType, const DeepCollectionEquality().hash(image),
const DeepCollectionEquality().hash(images), const DeepCollectionEquality().hash(palette));
@JsonKey(ignore: true)
@override
$ImageSplitterCompleteCopyWith<ImageSplitterComplete> get copyWith =>
_$ImageSplitterCompleteCopyWithImpl<ImageSplitterComplete>(
this, _$identity);
_$ImageSplitterCompleteCopyWithImpl<ImageSplitterComplete>(this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>(
TResult Function() $default, {
required TResult Function() generating,
required TResult Function(
Image image, List<Image> images, PaletteGenerator palette)
complete,
required TResult Function(Image image, List<Image> images, PaletteGenerator palette) complete,
required TResult Function(String? message) error,
}) {
return complete(image, images, palette);
@ -462,8 +435,7 @@ class _$ImageSplitterComplete implements ImageSplitterComplete {
TResult? whenOrNull<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? generating,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)?
complete,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)? complete,
TResult Function(String? message)? error,
}) {
return complete?.call(image, images, palette);
@ -474,8 +446,7 @@ class _$ImageSplitterComplete implements ImageSplitterComplete {
TResult maybeWhen<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? generating,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)?
complete,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)? complete,
TResult Function(String? message)? error,
required TResult orElse(),
}) {
@ -524,32 +495,31 @@ class _$ImageSplitterComplete implements ImageSplitterComplete {
}
abstract class ImageSplitterComplete implements ImageSplitterState {
const factory ImageSplitterComplete(
Image image, List<Image> images, PaletteGenerator palette) =
const factory ImageSplitterComplete(Image image, List<Image> images, PaletteGenerator palette) =
_$ImageSplitterComplete;
Image get image;
List<Image> get images;
PaletteGenerator get palette;
@JsonKey(ignore: true)
$ImageSplitterCompleteCopyWith<ImageSplitterComplete> get copyWith =>
throw _privateConstructorUsedError;
$ImageSplitterCompleteCopyWith<ImageSplitterComplete> get copyWith => throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $ImageSplitterErrorCopyWith<$Res> {
factory $ImageSplitterErrorCopyWith(
ImageSplitterError value, $Res Function(ImageSplitterError) then) =
factory $ImageSplitterErrorCopyWith(ImageSplitterError value, $Res Function(ImageSplitterError) then) =
_$ImageSplitterErrorCopyWithImpl<$Res>;
$Res call({String? message});
}
/// @nodoc
class _$ImageSplitterErrorCopyWithImpl<$Res>
extends _$ImageSplitterStateCopyWithImpl<$Res>
class _$ImageSplitterErrorCopyWithImpl<$Res> extends _$ImageSplitterStateCopyWithImpl<$Res>
implements $ImageSplitterErrorCopyWith<$Res> {
_$ImageSplitterErrorCopyWithImpl(
ImageSplitterError _value, $Res Function(ImageSplitterError) _then)
_$ImageSplitterErrorCopyWithImpl(ImageSplitterError _value, $Res Function(ImageSplitterError) _then)
: super(_value, (v) => _then(v as ImageSplitterError));
@override
@ -590,8 +560,7 @@ class _$ImageSplitterError implements ImageSplitterError {
}
@override
int get hashCode =>
Object.hash(runtimeType, const DeepCollectionEquality().hash(message));
int get hashCode => Object.hash(runtimeType, const DeepCollectionEquality().hash(message));
@JsonKey(ignore: true)
@override
@ -603,9 +572,7 @@ class _$ImageSplitterError implements ImageSplitterError {
TResult when<TResult extends Object?>(
TResult Function() $default, {
required TResult Function() generating,
required TResult Function(
Image image, List<Image> images, PaletteGenerator palette)
complete,
required TResult Function(Image image, List<Image> images, PaletteGenerator palette) complete,
required TResult Function(String? message) error,
}) {
return error(message);
@ -616,8 +583,7 @@ class _$ImageSplitterError implements ImageSplitterError {
TResult? whenOrNull<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? generating,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)?
complete,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)? complete,
TResult Function(String? message)? error,
}) {
return error?.call(message);
@ -628,8 +594,7 @@ class _$ImageSplitterError implements ImageSplitterError {
TResult maybeWhen<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? generating,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)?
complete,
TResult Function(Image image, List<Image> images, PaletteGenerator palette)? complete,
TResult Function(String? message)? error,
required TResult orElse(),
}) {
@ -681,7 +646,7 @@ abstract class ImageSplitterError implements ImageSplitterState {
const factory ImageSplitterError({String? message}) = _$ImageSplitterError;
String? get message;
@JsonKey(ignore: true)
$ImageSplitterErrorCopyWith<ImageSplitterError> get copyWith =>
throw _privateConstructorUsedError;
$ImageSplitterErrorCopyWith<ImageSplitterError> get copyWith => throw _privateConstructorUsedError;
}

13
lib/main.dart

@ -1,8 +1,11 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:my_flutter_puzzle/res/palette.dart';
import 'package:my_flutter_puzzle/screens/level_list/screen/level_list_screen.dart';
import 'package:my_flutter_puzzle/screens/puzzle/puzzle_starter_screen.dart';
import 'package:my_flutter_puzzle/utils/color_brightness.dart';
import 'package:my_flutter_puzzle/utils/extensions/string_extensions.dart';
import 'package:url_strategy/url_strategy.dart';
void main() async {
@ -18,6 +21,10 @@ class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
return MaterialApp(
title: 'Flutter Puzzle',
debugShowCheckedModeBanner: false,
@ -39,7 +46,11 @@ class MyApp extends StatelessWidget {
onSurface: Colors.white38,
),
),
home: const LevelListScreen(),
home: PuzzleStarterScreen(
duration: 3,
puzzleSize: 5,
image: 'default_image'.pngPath,
),
);
}
}

5
lib/res/strings.dart

@ -12,8 +12,3 @@ class Strings {
}
const defaultImagePath = 'assets/images/default_image.png';
/// username can be made like this
/// <entered_name>@<uid>
/// eg: souvik@124432523

4
lib/screens/level_list/screen/level_list_screen.dart

@ -30,7 +30,7 @@ class _LevelListScreenState extends State<LevelListScreen> {
Widget build(BuildContext context) {
return Scaffold(
body: GridView.builder(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 5),
itemBuilder: (context, index) {
return Container(
margin: const EdgeInsets.all(8),
@ -45,7 +45,7 @@ class _LevelListScreenState extends State<LevelListScreen> {
Text("زمان بازی : ${_levelList[index].duration} دقیقه"),
const SizedBox(height: 8),
GestureDetector(
child: const Text('شروغ'),
child: const Text('شروع'),
onTap: () => _startLevel(_levelList[index]),
),
],

75
lib/screens/photo/photo_screen.dart

@ -6,11 +6,8 @@ import 'package:my_flutter_puzzle/models/puzzle_data.dart';
import 'package:my_flutter_puzzle/providers.dart';
import 'package:my_flutter_puzzle/res/palette.dart';
import 'package:my_flutter_puzzle/screens/photo/photo_screen_large.dart';
import 'package:my_flutter_puzzle/screens/photo/photo_screen_medium.dart';
import 'package:my_flutter_puzzle/screens/photo/photo_screen_small.dart';
import 'package:my_flutter_puzzle/utils/color_brightness.dart';
import 'package:my_flutter_puzzle/utils/puzzle_solver.dart';
import 'package:my_flutter_puzzle/utils/responsive_layout.dart';
import 'package:rive/rive.dart';
class PhotoScreen extends ConsumerStatefulWidget {
@ -82,29 +79,17 @@ class _PhotoScreenState extends ConsumerState<PhotoScreen> {
final state = ref.watch(imageSplitterNotifierProvider);
return state.maybeWhen(
() => Theme(
data: _themeData,
child: ResponsiveLayout(
largeChild: PhotoScreenLarge(
solverClient: _solverClient,
initialPuzzleData: _initialPuzzleData,
puzzleSize: _puzzleSize,
riveController: _riveController,
),
mediumChild: PhotoScreenMedium(
solverClient: _solverClient,
initialPuzzleData: _initialPuzzleData,
puzzleSize: _puzzleSize,
riveController: _riveController,
),
smallChild: PhotoScreenSmall(
() {
return Theme(
data: _themeData,
child: PhotoScreenLarge(
solverClient: _solverClient,
initialPuzzleData: _initialPuzzleData,
puzzleSize: _puzzleSize,
riveController: _riveController,
),
),
),
);
},
complete: (image, images, palette) {
_themeData = Theme.of(context).copyWith(
colorScheme: ColorScheme(
@ -123,49 +108,21 @@ class _PhotoScreenState extends ConsumerState<PhotoScreen> {
);
return Theme(
data: _themeData,
child: ResponsiveLayout(
largeChild: PhotoScreenLarge(
solverClient: _solverClient,
initialPuzzleData: _initialPuzzleData,
puzzleSize: _puzzleSize,
riveController: _riveController,
),
mediumChild: PhotoScreenMedium(
solverClient: _solverClient,
initialPuzzleData: _initialPuzzleData,
puzzleSize: _puzzleSize,
riveController: _riveController,
),
smallChild: PhotoScreenSmall(
solverClient: _solverClient,
initialPuzzleData: _initialPuzzleData,
puzzleSize: _puzzleSize,
riveController: _riveController,
),
),
);
},
orElse: () => Theme(
data: _themeData,
child: ResponsiveLayout(
largeChild: PhotoScreenLarge(
solverClient: _solverClient,
initialPuzzleData: _initialPuzzleData,
puzzleSize: _puzzleSize,
riveController: _riveController,
),
mediumChild: PhotoScreenMedium(
solverClient: _solverClient,
initialPuzzleData: _initialPuzzleData,
puzzleSize: _puzzleSize,
riveController: _riveController,
),
smallChild: PhotoScreenSmall(
child: PhotoScreenLarge(
solverClient: _solverClient,
initialPuzzleData: _initialPuzzleData,
puzzleSize: _puzzleSize,
riveController: _riveController,
),
);
},
orElse: () => Theme(
data: _themeData,
child: PhotoScreenLarge(
solverClient: _solverClient,
initialPuzzleData: _initialPuzzleData,
puzzleSize: _puzzleSize,
riveController: _riveController,
),
),
);

225
lib/screens/photo/photo_screen_large.dart

@ -74,140 +74,139 @@ class _SoloScreenLargeState extends ConsumerState<PhotoScreenLarge> {
});
var fontSize = 70.0;
var boardSize = 450.0;
var boardSize = 280.0;
var spacing = 5;
var spacing = 4;
var eachBoxSize = (boardSize / _puzzleSize) - (spacing * (_puzzleSize - 1));
return Scaffold(
backgroundColor: Theme.of(context).colorScheme.background,
body: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Padding(
padding: const EdgeInsets.only(left: 56.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 32),
MovesTilesWidget(solverClient: _solverClient),
const SizedBox(height: 32),
GameButtonWidget(
solverClient: _solverClient,
initialPuzzleData: _initialPuzzleData,
),
],
body: SafeArea(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Padding(
padding: const EdgeInsetsDirectional.symmetric(horizontal: 10),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const SizedBox(height: 32),
MovesTilesWidget(solverClient: _solverClient, fontSize: 16),
const SizedBox(height: 32),
GameButtonWidget(
solverClient: _solverClient,
initialPuzzleData: _initialPuzzleData,
),
],
),
),
),
SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
const TimerWidget(
fontSize: 40,
),
const SizedBox(height: 36),
Consumer(
builder: (context, ref, child) {
final state = ref.watch(imageSplitterNotifierProvider);
SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
const TimerWidget(fontSize: 30),
const SizedBox(height: 12),
Consumer(
builder: (context, ref, child) {
final state = ref.watch(imageSplitterNotifierProvider);
return state.maybeWhen(
() => PuzzleWidget(
solverClient: _solverClient,
boardSize: boardSize,
eachBoxSize: eachBoxSize,
initialPuzzleData: _initialPuzzleData,
fontSize: fontSize,
images: _previousImages,
kInitialSpeed: kInitialSpeed,
),
complete: (image, images, palette) {
_previousImages = images;
_previousImage = image;
_previousPalette = palette;
return state.maybeWhen(
() => PuzzleWidget(
solverClient: _solverClient,
boardSize: boardSize,
eachBoxSize: eachBoxSize,
initialPuzzleData: _initialPuzzleData,
fontSize: fontSize,
images: _previousImages,
kInitialSpeed: kInitialSpeed,
),
complete: (image, images, palette) {
_previousImages = images;
_previousImage = image;
_previousPalette = palette;
return PuzzleWidget(
return PuzzleWidget(
solverClient: _solverClient,
boardSize: boardSize,
eachBoxSize: eachBoxSize,
initialPuzzleData: _initialPuzzleData,
fontSize: fontSize,
images: images,
kInitialSpeed: kInitialSpeed,
);
},
orElse: () => PuzzleWidget(
solverClient: _solverClient,
boardSize: boardSize,
eachBoxSize: eachBoxSize,
initialPuzzleData: _initialPuzzleData,
fontSize: fontSize,
images: images,
images: _previousImages,
kInitialSpeed: kInitialSpeed,
);
},
orElse: () => PuzzleWidget(
solverClient: _solverClient,
boardSize: boardSize,
eachBoxSize: eachBoxSize,
initialPuzzleData: _initialPuzzleData,
fontSize: fontSize,
images: _previousImages,
kInitialSpeed: kInitialSpeed,
),
);
},
),
const SizedBox(height: 30),
],
),
),
Stack(
children: [
AnimatedDash(
boardSize: boardSize * 0.80,
riveController: _riveController,
onInit: (_) => setState(() {}),
),
);
},
),
const SizedBox(height: 30),
],
),
Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.end,
),
Padding(
padding: const EdgeInsetsDirectional.symmetric(horizontal: 10),
child: Stack(
children: [
const Spacer(),
Row(),
CountdownWidget(
isStartPressed: _isStartPressed,
onFinish: () {
ref.read(timerNotifierProvider.notifier).startTimer();
setState(() {
_isStartPressed = false;
});
},
initialSpeed: kInitialSpeed,
AnimatedDash(
boardSize: boardSize * 0.8,
riveController: _riveController,
onInit: (_) => setState(() {}),
),
Visibility(
visible: !_isStartPressed,
child: Column(
children: [
ImageViewer(
imagePicker: _imagePicker,
puzzleSize: _puzzleSize,
previousImage: _previousImage,
previousPalette: _previousPalette,
imageSize: 200,
),
PickImageButton(
text: 'Pick Image',
onTap: ref.read(imageSplitterNotifierProvider) is ImageSplitterComplete
? () => ref.read(imageSplitterNotifierProvider.notifier).generateImages(
picker: _imagePicker,
puzzleSize: _puzzleSize,
)
: null,
Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.center,
children: [
CountdownWidget(
isStartPressed: _isStartPressed,
onFinish: () {
ref.read(timerNotifierProvider.notifier).startTimer();
setState(() {
_isStartPressed = false;
});
},
initialSpeed: kInitialSpeed,
),
Visibility(
visible: !_isStartPressed,
child: Column(
children: [
ImageViewer(
imagePicker: _imagePicker,
puzzleSize: _puzzleSize,
previousImage: _previousImage,
previousPalette: _previousPalette,
imageSize: 200,
),
PickImageButton(
text: 'Pick Image',
onTap: ref.read(imageSplitterNotifierProvider) is ImageSplitterComplete
? () => ref.read(imageSplitterNotifierProvider.notifier).generateImages(
picker: _imagePicker,
puzzleSize: _puzzleSize,
)
: null,
),
],
),
],
),
),
],
),
const Spacer(),
const Spacer(),
const Spacer(),
],
),
],
),
// SizedBox(),
],
),
// SizedBox(),
],
),
),
);
}

17
lib/screens/photo/photo_screen_medium.dart

@ -105,23 +105,6 @@ class _PhotoScreenMediumState extends ConsumerState<PhotoScreenMedium> {
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(),
// Text(
// _puzzleType,
// style: const TextStyle(
// fontSize: 18,
// fontWeight: FontWeight.w500,
// color: Colors.white,
// ),
// ),
const SizedBox(height: 8),
const Text(
'Puzzle Challenge',
style: TextStyle(
fontSize: 36,
fontWeight: FontWeight.w500,
color: Colors.white,
),
),
const SizedBox(height: 16),
MovesTilesWidget(solverClient: _solverClient),
const SizedBox(height: 16),

186
lib/screens/photo/photo_screen_small.dart

@ -92,16 +92,6 @@ class _SoloScreenLargeState extends ConsumerState<PhotoScreenSmall> {
// ),
body: Stack(
children: [
// CountdownWidget(
// isStartPressed: _isStartPressed,
// onFinish: () {
// ref.read(timerNotifierProvider.notifier).startTimer();
// setState(() {
// _isStartPressed = false;
// });
// },
// initialSpeed: kInitialSpeed,
// ),
Row(
children: [
const Spacer(),
@ -113,115 +103,95 @@ class _SoloScreenLargeState extends ConsumerState<PhotoScreenSmall> {
),
],
),
SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(),
// Text(
// _puzzleType,
// style: const TextStyle(
// fontSize: 18,
// fontWeight: FontWeight.w500,
// color: Colors.white,
// ),
// ),
const SizedBox(height: 30),
const Text(
'Puzzle Challenge',
style: TextStyle(
fontSize: 32,
fontWeight: FontWeight.w500,
color: Colors.white,
),
),
const SizedBox(height: 8),
MovesTilesWidget(
solverClient: _solverClient,
fontSize: 22,
),
const SizedBox(height: 8),
const TimerWidget(fontSize: 24),
Consumer(
builder: (context, ref, child) {
final state = ref.watch(imageSplitterNotifierProvider);
return state.maybeWhen(
() => PuzzleWidget(
solverClient: _solverClient,
boardSize: boardSize,
eachBoxSize: eachBoxSize,
initialPuzzleData: _initialPuzzleData,
fontSize: fontSize,
images: _previousImages,
kInitialSpeed: kInitialSpeed,
borderRadius: 16,
),
complete: (image, images, palette) {
_previousImages = images;
_previousImage = image;
_previousPalette = palette;
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Row(),
const SizedBox(height: 60),
MovesTilesWidget(
solverClient: _solverClient,
fontSize: 22,
),
const SizedBox(height: 20),
const TimerWidget(fontSize: 24),
const SizedBox(height: 60),
Consumer(
builder: (context, ref, child) {
final state = ref.watch(imageSplitterNotifierProvider);
return state.maybeWhen(
() => PuzzleWidget(
solverClient: _solverClient,
boardSize: boardSize,
eachBoxSize: eachBoxSize,
initialPuzzleData: _initialPuzzleData,
fontSize: fontSize,
images: _previousImages,
kInitialSpeed: kInitialSpeed,
borderRadius: 16,
),
complete: (image, images, palette) {
_previousImages = images;
_previousImage = image;
_previousPalette = palette;
return PuzzleWidget(
solverClient: _solverClient,
boardSize: boardSize,
eachBoxSize: eachBoxSize,
initialPuzzleData: _initialPuzzleData,
fontSize: fontSize,
images: images,
kInitialSpeed: kInitialSpeed,
borderRadius: 16,
);
},
orElse: () => PuzzleWidget(
return PuzzleWidget(
solverClient: _solverClient,
boardSize: boardSize,
eachBoxSize: eachBoxSize,
initialPuzzleData: _initialPuzzleData,
fontSize: fontSize,
images: _previousImages,
images: images,
kInitialSpeed: kInitialSpeed,
borderRadius: 16,
),
);
},
),
const SizedBox(height: 24),
Row(
mainAxisSize: MainAxisSize.min,
children: [
GameButtonWidget(
);
},
orElse: () => PuzzleWidget(
solverClient: _solverClient,
boardSize: boardSize,
eachBoxSize: eachBoxSize,
initialPuzzleData: _initialPuzzleData,
padding: const EdgeInsets.only(top: 10.0, bottom: 9.0),
width: 130,
fontSize: fontSize,
images: _previousImages,
kInitialSpeed: kInitialSpeed,
borderRadius: 16,
),
const SizedBox(width: 16),
PickImageButton(
text: 'Pick Image',
onTap: ref.read(imageSplitterNotifierProvider) is ImageSplitterComplete
? () => ref.read(imageSplitterNotifierProvider.notifier).generateImages(
picker: _imagePicker,
puzzleSize: _puzzleSize,
)
: null,
padding: const EdgeInsets.only(top: 10.0, bottom: 9.0),
width: 130,
),
],
),
const SizedBox(height: 16),
ImageViewer(
imagePicker: _imagePicker,
puzzleSize: _puzzleSize,
previousImage: _previousImage,
previousPalette: _previousPalette,
imageSize: 110,
),
const SizedBox(height: 50),
],
),
);
},
),
const SizedBox(height: 24),
Row(
mainAxisSize: MainAxisSize.min,
children: [
GameButtonWidget(
solverClient: _solverClient,
initialPuzzleData: _initialPuzzleData,
padding: const EdgeInsets.only(top: 10.0, bottom: 9.0),
width: 130,
),
const SizedBox(width: 16),
PickImageButton(
text: 'Pick Image',
onTap: ref.read(imageSplitterNotifierProvider) is ImageSplitterComplete
? () => ref.read(imageSplitterNotifierProvider.notifier).generateImages(
picker: _imagePicker,
puzzleSize: _puzzleSize,
)
: null,
padding: const EdgeInsets.only(top: 10.0, bottom: 9.0),
width: 130,
),
],
),
const SizedBox(height: 16),
ImageViewer(
imagePicker: _imagePicker,
puzzleSize: _puzzleSize,
previousImage: _previousImage,
previousPalette: _previousPalette,
imageSize: 110,
),
const SizedBox(height: 50),
],
),
],
),

4
lib/widgets/photo_screen/pick_image_button.dart

@ -32,9 +32,7 @@ class PickImageButton extends ConsumerWidget {
return Theme.of(context).colorScheme.primary.withOpacity(0.5);
}
return Theme.of(context)
.colorScheme
.primary; // Use the component's default.
return Theme.of(context).colorScheme.primary;
},
),
),

5
lib/widgets/solo_screen/puzzle_widget/puzzle_board.dart

@ -68,13 +68,14 @@ class PuzzleBoard extends ConsumerWidget {
child: Text(
puzzleData.offsetMap.entries.toList()[i].key.toString(),
style: TextStyle(
fontSize: fontSize,
fontSize: 30,
fontWeight: FontWeight.bold,
color: Colors.white.withOpacity(isEnabled ? 1 : 0.5),
),
),
),
))
),
)
: SizedBox(
height: eachBoxSize,
width: eachBoxSize,

2
macos/Flutter/GeneratedPluginRegistrant.swift

@ -5,7 +5,7 @@
import FlutterMacOS
import Foundation
import path_provider_macos
import path_provider_foundation
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))

332
pubspec.lock

@ -5,42 +5,42 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: d994c55943e77955bd2cd299c6c02c52ceffc3d21a26461f903f7e10abc05b82
sha256: e6dd5609f0945ef6bc72bdcd28af6eeabefef99a6d62b7790320133789217759
url: "https://pub.dev"
source: hosted
version: "34.0.0"
version: "38.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
sha256: "426436ca1a3390b330aedf78dad8d70d8df3dc88cf4cabd870428fb02b00119e"
sha256: c71e50e4e1674c9ffeaf053bb8d38e4a03b94d08af6a27fb352f3ff569becc44
url: "https://pub.dev"
source: hosted
version: "3.2.0"
version: "3.4.1"
animated_text_kit:
dependency: "direct main"
description:
name: animated_text_kit
sha256: "5e6bf696c1db94fae17ef0527a17cef82f3100daebb53a3bdeb1c34f6b2ccdcc"
sha256: "37392a5376c9a1a503b02463c38bc0342ef814ddbb8f9977bc90f2a84b22fa92"
url: "https://pub.dev"
source: hosted
version: "4.2.1"
version: "4.2.2"
archive:
dependency: transitive
description:
name: archive
sha256: b4e685f9b52b7c50b6433fa4008572f157ca5841f4dbddda513a112a8c23cb69
sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d
url: "https://pub.dev"
source: hosted
version: "3.2.1"
version: "3.3.6"
args:
dependency: transitive
description:
name: args
sha256: "0bd9a99b6eb96f07af141f0eb53eace8983e8e5aa5de59777aca31684680ef22"
sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440"
url: "https://pub.dev"
source: hosted
version: "2.3.0"
version: "2.4.0"
async:
dependency: transitive
description:
@ -61,50 +61,50 @@ packages:
dependency: transitive
description:
name: build
sha256: c9b6c412967d7887e88efe1ffbfe0f31bfaf6a5a4b98eb8d59964977a90f2f9e
sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
version: "2.3.1"
build_config:
dependency: transitive
description:
name: build_config
sha256: ad77deb6e9c143a3f550fbb4c5c1e0c6aadabe24274898d06b9526c61b9cf4fb
sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1
url: "https://pub.dev"
source: hosted
version: "1.0.0"
version: "1.1.1"
build_daemon:
dependency: transitive
description:
name: build_daemon
sha256: "4e2dbfa914f99bca9c447ba5aaa572edf7335a71717944e4ab2e26ca079e7f79"
sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.1.0"
build_resolvers:
dependency: transitive
description:
name: build_resolvers
sha256: "4666aef1d045c5ca15ebba63e400bd4e4fbd9f0dd06e791b51ab210da78a27f7"
sha256: "9aae031a54ab0beebc30a888c93e900d15ae2fd8883d031dbfbd5ebdb57f5a4c"
url: "https://pub.dev"
source: hosted
version: "2.0.6"
version: "2.0.9"
build_runner:
dependency: "direct dev"
description:
name: build_runner
sha256: e090beee726671ff68747cb4d8c9151704864ec9a5dc88db9fe6441c24b3fa55
sha256: "56942f8114731d1e79942cd981cfef29501937ff1bccf4dbdce0273f31f13640"
url: "https://pub.dev"
source: hosted
version: "2.1.7"
version: "2.2.0"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
sha256: f4d6244cc071ba842c296cb1c4ee1b31596b9f924300647ac7a1445493471a3f
sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292"
url: "https://pub.dev"
source: hosted
version: "7.2.3"
version: "7.2.7"
built_collection:
dependency: transitive
description:
@ -117,10 +117,10 @@ packages:
dependency: transitive
description:
name: built_value
sha256: b6c9911b2d670376918d5b8779bc27e0e612a94ec3ff0343689e991d8d0a3b8a
sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725"
url: "https://pub.dev"
source: hosted
version: "8.1.4"
version: "8.4.3"
characters:
dependency: transitive
description:
@ -129,30 +129,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.2.1"
charcode:
dependency: transitive
description:
name: charcode
sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306
url: "https://pub.dev"
source: hosted
version: "1.3.1"
checked_yaml:
dependency: transitive
description:
name: checked_yaml
sha256: dd007e4fb8270916820a0d66e24f619266b60773cddd082c6439341645af2659
url: "https://pub.dev"
source: hosted
version: "2.0.1"
cli_util:
dependency: transitive
description:
name: cli_util
sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c"
sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311"
url: "https://pub.dev"
source: hosted
version: "0.3.5"
version: "2.0.2"
clock:
dependency: transitive
description:
@ -165,10 +149,10 @@ packages:
dependency: transitive
description:
name: code_builder
sha256: bdb1ab29be158c4784d7f9b7b693745a0719c5899e31c01112782bb1cb871e80
sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe"
url: "https://pub.dev"
source: hosted
version: "4.1.0"
version: "4.4.0"
collection:
dependency: "direct main"
description:
@ -189,50 +173,50 @@ packages:
dependency: transitive
description:
name: convert
sha256: f08428ad63615f96a27e34221c65e1a451439b5f26030f78d790f461c686d65d
sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.1.1"
crop:
dependency: "direct main"
description:
name: crop
sha256: d46d586cc71a56d18341b61138146a41b6e11a4b16d3b453b77c7eb24da847d4
sha256: "0168b1e6be35077c6d6af328363fffb8f8526a00bc2c8a5a9ba51b0f61146421"
url: "https://pub.dev"
source: hosted
version: "0.5.2"
version: "0.5.4"
cross_file:
dependency: transitive
description:
name: cross_file
sha256: "552ffd2f851d4314958e6265452af1891959e00cd32b6d17452c5b836e27a0fa"
sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9"
url: "https://pub.dev"
source: hosted
version: "0.3.2"
version: "0.3.3+4"
crypto:
dependency: transitive
description:
name: crypto
sha256: cf75650c66c0316274e21d7c43d3dea246273af5955bd94e8184837cd577575c
sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.0.2"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
sha256: "1989d917fbe8e6b39806207df5a3fdd3d816cbd090fac2ce26fb45e9a71476e5"
sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be
url: "https://pub.dev"
source: hosted
version: "1.0.4"
version: "1.0.5"
dart_style:
dependency: transitive
description:
name: dart_style
sha256: "6e8086e1d3c2f6bc15056ee248c4ddc48c2bc71287c0961bf801a08633ed4333"
sha256: "8aff82f9b26fd868992e5430335a9d773bfef01e1d852d7ba71bf4c5d9349351"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
version: "2.2.3"
fake_async:
dependency: transitive
description:
@ -245,26 +229,26 @@ packages:
dependency: transitive
description:
name: ffi
sha256: "35d0f481d939de0d640b3db9a7aa36a52cd22054a798a73b4f50bdad5ce12678"
sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978
url: "https://pub.dev"
source: hosted
version: "1.1.2"
version: "2.0.1"
file:
dependency: transitive
description:
name: file
sha256: b69516f2c26a5bcac4eee2e32512e1a5205ab312b3536c1c1227b2b942b5f9ad
sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
url: "https://pub.dev"
source: hosted
version: "6.1.2"
version: "6.1.4"
fixnum:
dependency: transitive
description:
name: fixnum
sha256: "6a2ef17156f4dc49684f9d99aaf4a93aba8ac49f5eac861755f5730ddf6e2e4e"
sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
version: "1.1.0"
flutter:
dependency: "direct main"
description: flutter
@ -282,18 +266,18 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "5c574d21b98ec92adab05ead10afd2b13ff5856c7ca79696edb338a9dd8ed387"
sha256: "4bef634684b2c7f3468c77c766c831229af829a0cd2d4ee6c1b99558bd14e5d2"
url: "https://pub.dev"
source: hosted
version: "2.0.5"
version: "2.0.8"
flutter_riverpod:
dependency: "direct main"
description:
name: flutter_riverpod
sha256: c57d053ca394a9f4ae3cb09654564700515c01ecf969e1bff0b5be479df4e3c4
sha256: d84e180f039a6b963e610d2e4435641fdfe8f12437e8770e963632e05af16d80
url: "https://pub.dev"
source: hosted
version: "1.0.3"
version: "1.0.4"
flutter_test:
dependency: "direct dev"
description: flutter
@ -332,98 +316,114 @@ packages:
dependency: transitive
description:
name: frontend_server_client
sha256: "6d2930621b9377f6a4b7d260fce525d48dd77a334f0d5d4177d07b0dcb76c032"
sha256: "4f4a162323c86ffc1245765cfe138872b8f069deb42f7dbb36115fa27f31469b"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "2.1.3"
glob:
dependency: transitive
description:
name: glob
sha256: "8321dd2c0ab0683a91a51307fa844c6db4aa8e3981219b78961672aaab434658"
sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c"
url: "https://pub.dev"
source: hosted
version: "2.0.2"
version: "2.1.1"
graphs:
dependency: transitive
description:
name: graphs
sha256: ae0b3d956ff324c6f8671f08dcb2dbd71c99cdbf2aa3ca63a14190c47aa6679c
sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.2.0"
http:
dependency: transitive
description:
name: http
sha256: "2ed163531e071c2c6b7c659635112f24cb64ecbebf6af46b550d536c0b1aa112"
sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482"
url: "https://pub.dev"
source: hosted
version: "0.13.4"
version: "0.13.5"
http_multi_server:
dependency: transitive
description:
name: http_multi_server
sha256: bfb651625e251a88804ad6d596af01ea903544757906addcb2dcdf088b5ea185
sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.2.1"
http_parser:
dependency: transitive
description:
name: http_parser
sha256: e362d639ba3bc07d5a71faebb98cde68c05bfbcfbbb444b60b6f60bb67719185
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
url: "https://pub.dev"
source: hosted
version: "4.0.0"
version: "4.0.2"
image:
dependency: "direct main"
description:
name: image
sha256: "02bafd3b4f399bfeb10034deba9753d93b55ce41cd0c4d3d8b355626f80e5b32"
sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6"
url: "https://pub.dev"
source: hosted
version: "3.1.3"
version: "3.3.0"
image_picker:
dependency: "direct main"
description:
name: image_picker
sha256: "28769e99d4a61b810a5b15c3d7a1dbdaf3b48273e5d26fbf7ad4d72f3a222dc3"
sha256: "22207768556b82d55ec70166824350fee32298732d5efa4d6e756f848f51f66a"
url: "https://pub.dev"
source: hosted
version: "0.8.6+3"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
sha256: "68d067baf7f6e401b1124ee83dd6967e67847314250fd68012aab34a69beb344"
url: "https://pub.dev"
source: hosted
version: "0.8.4+10"
version: "0.8.5+7"
image_picker_for_web:
dependency: transitive
description:
name: image_picker_for_web
sha256: "837609ccdb538b6d255808f6920179af004f2fecd1eb529fb14d313c289a9333"
sha256: "66fc6e3877bbde82c33d122f3588777c3784ac5bd7d1cdd79213ef7aecb85b34"
url: "https://pub.dev"
source: hosted
version: "2.1.6"
version: "2.1.11"
image_picker_ios:
dependency: transitive
description:
name: image_picker_ios
sha256: "39aa70b5f1e5e7c94585b9738632d5fdb764a5655e40cd9e7b95fbd2fc50c519"
url: "https://pub.dev"
source: hosted
version: "0.8.6+9"
image_picker_platform_interface:
dependency: transitive
description:
name: image_picker_platform_interface
sha256: "32eeb07cc4cac86ff61d5f4efb5756098e17841411ad010f380a61837da9eaf6"
sha256: "1991219d9dbc42a99aff77e663af8ca51ced592cd6685c9485e3458302d3d4f8"
url: "https://pub.dev"
source: hosted
version: "2.4.4"
version: "2.6.3"
io:
dependency: transitive
description:
name: io
sha256: "0d4c73c3653ab85bf696d51a9657604c900a370549196a91f33e4c39af760852"
sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e"
url: "https://pub.dev"
source: hosted
version: "1.0.3"
version: "1.0.4"
isolated_worker:
dependency: "direct main"
description:
name: isolated_worker
sha256: a848f249c7255d323455d7e5e932024e5e6138f09403a568fd763c2aaf78cb1b
sha256: "79353f342871be5b6a19153a33d75f7a391aac9b210d97db4415d50c78e0170b"
url: "https://pub.dev"
source: hosted
version: "0.1.0"
version: "0.1.1"
js:
dependency: transitive
description:
@ -436,10 +436,10 @@ packages:
dependency: transitive
description:
name: json_annotation
sha256: "2639efc0237c7b71c6584696c0847ea4e4733ddaf571ae9c79d5295e8ae17272"
sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317
url: "https://pub.dev"
source: hosted
version: "4.4.0"
version: "4.8.0"
lints:
dependency: transitive
description:
@ -452,10 +452,10 @@ packages:
dependency: transitive
description:
name: logging
sha256: "293ae2d49fd79d4c04944c3a26dfd313382d5f52e821ec57119230ae16031ad4"
sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d"
url: "https://pub.dev"
source: hosted
version: "1.0.2"
version: "1.1.1"
matcher:
dependency: transitive
description:
@ -484,26 +484,26 @@ packages:
dependency: transitive
description:
name: mime
sha256: fd5f81041e6a9fc9b9d7fa2cb8a01123f9f5d5d49136e06cb9dc7d33689529f4
sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e
url: "https://pub.dev"
source: hosted
version: "1.0.1"
version: "1.0.4"
package_config:
dependency: transitive
description:
name: package_config
sha256: a4d5ede5ca9c3d88a2fef1147a078570c861714c806485c596b109819135bc12
sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd"
url: "https://pub.dev"
source: hosted
version: "2.0.2"
version: "2.1.0"
palette_generator:
dependency: "direct main"
description:
name: palette_generator
sha256: "6a44587e4c4e4ca670f89840615bdd7ca3de708805ccee0e2519cda9bb42dc98"
sha256: "0e3cd6974e10b1434dcf4cf779efddb80e2696585e273a2dbede6af52f94568d"
url: "https://pub.dev"
source: hosted
version: "0.3.3"
version: "0.3.3+2"
path:
dependency: transitive
description:
@ -516,66 +516,58 @@ packages:
dependency: "direct main"
description:
name: path_provider
sha256: e92dee4d38a9044605cb3fb253e9b46eb9375dfcad4515d0379b44ac90797568
sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9"
url: "https://pub.dev"
source: hosted
version: "2.0.9"
version: "2.0.13"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
sha256: "8b759fb6c74955931e87f550cc9e890b0cccb7ef8e710943973efeaa9695c54d"
sha256: "7623b7d4be0f0f7d9a8b5ee6879fc13e4522d4c875ab86801dee4af32b54b83e"
url: "https://pub.dev"
source: hosted
version: "2.0.12"
path_provider_ios:
version: "2.0.23"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_ios
sha256: "943b76e54056386432cdc2731cb303e2f580346b61a1fc73819721767be72309"
name: path_provider_foundation
sha256: eec003594f19fe2456ea965ae36b3fc967bc5005f508890aafe31fa75e41d972
url: "https://pub.dev"
source: hosted
version: "2.0.8"
version: "2.1.2"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
sha256: "1e109f4df28bd95eab71e323008b53d19c4d633bc1ab05b577518773474e9621"
url: "https://pub.dev"
source: hosted
version: "2.1.5"
path_provider_macos:
dependency: transitive
description:
name: path_provider_macos
sha256: "0adeb313e1f2c3fc52baeeee59b0fe9c2d1f7da56fd96a9234e1702ec653a453"
sha256: "525ad5e07622d19447ad740b1ed5070031f7a5437f44355ae915ff56e986429a"
url: "https://pub.dev"
source: hosted
version: "2.0.5"
version: "2.1.9"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
sha256: "3dc0d51b07f85fec3746d9f4e8d31c73bb173cafa2e763f03f8df2e8d1878882"
sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec"
url: "https://pub.dev"
source: hosted
version: "2.0.3"
version: "2.0.6"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
sha256: "366ad4e3541ea707f859e7148d4d5aba67d589d7936cee04a05c464a277eeb27"
sha256: "642ddf65fde5404f83267e8459ddb4556316d3ee6d511ed193357e25caa3632d"
url: "https://pub.dev"
source: hosted
version: "2.0.5"
version: "2.1.4"
petitparser:
dependency: transitive
description:
name: petitparser
sha256: "1a914995d4ef10c94ff183528c120d35ed43b5eaa8713fc6766a9be4570782e2"
sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4"
url: "https://pub.dev"
source: hosted
version: "4.4.0"
version: "5.1.0"
platform:
dependency: transitive
description:
@ -588,18 +580,26 @@ packages:
dependency: transitive
description:
name: plugin_platform_interface
sha256: "075f927ebbab4262ace8d0b283929ac5410c0ac4e7fc123c76429564facfb757"
sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "2.1.4"
pointycastle:
dependency: transitive
description:
name: pointycastle
sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346
url: "https://pub.dev"
source: hosted
version: "3.6.2"
pool:
dependency: transitive
description:
name: pool
sha256: "05955e3de2683e1746222efd14b775df7131139e07695dc8e24650f6b4204504"
sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
url: "https://pub.dev"
source: hosted
version: "1.5.0"
version: "1.5.1"
process:
dependency: transitive
description:
@ -612,34 +612,26 @@ packages:
dependency: transitive
description:
name: pub_semver
sha256: b5a5fcc6425ea43704852ba4453ba94b08c2226c63418a260240c3a054579014
sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.1.3"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
sha256: "3686efe4a4613a4449b1a4ae08670aadbd3376f2e78d93e3f8f0919db02a7256"
sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
quiver:
dependency: transitive
description:
name: quiver
sha256: "616b691d1c8f5c53b7b39ce3542f6a25308d7900bf689d0210e72a644a10387e"
url: "https://pub.dev"
source: hosted
version: "3.0.1+1"
version: "1.2.1"
rive:
dependency: "direct main"
description:
name: rive
sha256: "46cccb2ad44033ad34448f5dc2b7381860694d5d2b658dc800913f525dc1e24e"
sha256: f76eaf823d7b0c7d6640dbb10f499f387fa66d01aa711ce7a4533a4e90b48c4a
url: "https://pub.dev"
source: hosted
version: "0.8.1"
version: "0.8.4"
riverpod:
dependency: transitive
description:
@ -652,18 +644,18 @@ packages:
dependency: transitive
description:
name: shelf
sha256: c240984c924796e055e831a0a36db23be8cb04f170b26df572931ab36418421d
sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c
url: "https://pub.dev"
source: hosted
version: "1.2.0"
version: "1.4.0"
shelf_web_socket:
dependency: transitive
description:
name: shelf_web_socket
sha256: fd84910bf7d58db109082edf7326b75322b8f186162028482f53dc892f00332d
sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8
url: "https://pub.dev"
source: hosted
version: "1.0.1"
version: "1.0.3"
sky_engine:
dependency: transitive
description: flutter
@ -673,10 +665,10 @@ packages:
dependency: transitive
description:
name: source_gen
sha256: d5aa894fcfa327e19196d6f4f733597a10b42a7e55c8cb2b0dd60d7e7d27dccf
sha256: "00f8b6b586f724a8c769c96f1d517511a41661c0aede644544d8d86a1ab11142"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
version: "1.2.2"
source_span:
dependency: transitive
description:
@ -713,10 +705,10 @@ packages:
dependency: transitive
description:
name: stream_transform
sha256: ed464977cb26a1f41537e177e190c67223dbd9f4f683489b6ab2e5d211ec564e
sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
version: "2.1.0"
string_scanner:
dependency: transitive
description:
@ -745,26 +737,26 @@ packages:
dependency: transitive
description:
name: timing
sha256: c386d07d7f5efc613479a7c4d9d64b03710b03cfaa7e8ad5f2bfb295a1f0dfad
sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
version: "1.0.1"
tuple:
dependency: "direct main"
description:
name: tuple
sha256: fe3ae4f0dca3f9aac0888e2e0d117b642ce283a82d7017b54136290c0a3b0dd3
sha256: "0ea99cd2f9352b2586583ab2ce6489d1f95a5f6de6fb9492faaf97ae2060f0aa"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
version: "2.0.1"
typed_data:
dependency: transitive
description:
name: typed_data
sha256: "53bdf7e979cfbf3e28987552fd72f637e63f3c8724c9e56d9246942dc2fa36ee"
sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5"
url: "https://pub.dev"
source: hosted
version: "1.3.0"
version: "1.3.1"
url_strategy:
dependency: "direct main"
description:
@ -785,50 +777,50 @@ packages:
dependency: transitive
description:
name: watcher
sha256: e42dfcc48f67618344da967b10f62de57e04bae01d9d3af4c2596f3712a88c99
sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
version: "1.0.2"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
sha256: "0c2ada1b1aeb2ad031ca81872add6be049b8cb479262c6ad3c4b0f9c24eaab2f"
sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.3.0"
win32:
dependency: transitive
description:
name: win32
sha256: cde1e6d546d8cfd0b3c72bc6f29d980fa629d1cb107f38e2a039ca5d10d79e41
sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46
url: "https://pub.dev"
source: hosted
version: "2.4.1"
version: "3.1.3"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
sha256: "060b6e1c891d956f72b5ac9463466c37cce3fa962a921532fc001e86fe93438e"
sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1
url: "https://pub.dev"
source: hosted
version: "0.2.0+1"
version: "1.0.0"
xml:
dependency: transitive
description:
name: xml
sha256: baa23bcba1ba4ce4b22c0c7a1d9c861e7015cb5169512676da0b85138e72840c
sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5"
url: "https://pub.dev"
source: hosted
version: "5.3.1"
version: "6.2.2"
yaml:
dependency: transitive
description:
name: yaml
sha256: "3cee79b1715110341012d27756d9bae38e650588acd38d3f3c610822e1337ace"
sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
version: "3.1.1"
sdks:
dart: ">=2.18.0 <3.0.0"
flutter: ">=2.8.0"
dart: ">=2.19.0 <3.0.0"
flutter: ">=3.0.0"
Loading…
Cancel
Save