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"