Merge branch with resolved conflicts - restructured features and added new modules

This commit is contained in:
2025-12-17 10:26:39 +03:30
484 changed files with 55236 additions and 4255 deletions

View File

@@ -1,4 +1,6 @@
description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions:
- hive_ce: true
- hive_ce: true
- provider: true
- shared_preferences: true

View File

@@ -2,6 +2,7 @@ import 'package:rasadyar_core/core.dart';
part 'app_model.g.dart';
@HiveType(typeId: appModelTypeId)
class AppModel extends HiveObject {
@HiveField(0, defaultValue: true)
@@ -16,7 +17,12 @@ class AppModel extends HiveObject {
@HiveField(3)
List<TargetPage>? targetPages;
AppModel({this.isFirstRun, this.isDarkMode, this.selectedModule, this.targetPages});
AppModel({
this.isFirstRun,
this.isDarkMode,
this.selectedModule,
this.targetPages,
});
@override
String toString() {

View File

@@ -0,0 +1,39 @@
# Generated by Hive CE
# Manual modifications may be necessary for certain migrations
# Check in to version control
nextTypeId: 3
types:
AppModel:
typeId: 0
nextIndex: 4
fields:
isFirstRun:
index: 0
isDarkMode:
index: 1
selectedModule:
index: 2
targetPages:
index: 3
TargetPage:
typeId: 1
nextIndex: 4
fields:
route:
index: 0
functions:
index: 1
module:
index: 2
selectedRole:
index: 3
Module:
typeId: 2
nextIndex: 3
fields:
liveStocks:
index: 0
inspection:
index: 1
chicken:
index: 2

View File

@@ -0,0 +1,15 @@
import 'package:hive_ce_flutter/hive_flutter.dart';
import 'package:rasadyar_core/data/model/local/app_model/app_model.dart';
import 'package:rasadyar_core/data/model/local/user_local/user_local_model.dart';
@GenerateAdapters([
AdapterSpec<AppModel>(),
AdapterSpec<TargetPage>(),
AdapterSpec<UserLocalModel>(),
AdapterSpec<Module>(),
])
part 'hive_adapters.g.dart';

View File

@@ -0,0 +1,185 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'hive_adapters.dart';
// **************************************************************************
// AdaptersGenerator
// **************************************************************************
class AppModelAdapter extends TypeAdapter<AppModel> {
@override
final typeId = 0;
@override
AppModel read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return AppModel(
isFirstRun: fields[0] == null ? true : fields[0] as bool?,
isDarkMode: fields[1] as bool?,
selectedModule: fields[2] as Module?,
targetPages: (fields[3] as List?)?.cast<TargetPage>(),
);
}
@override
void write(BinaryWriter writer, AppModel obj) {
writer
..writeByte(4)
..writeByte(0)
..write(obj.isFirstRun)
..writeByte(1)
..write(obj.isDarkMode)
..writeByte(2)
..write(obj.selectedModule)
..writeByte(3)
..write(obj.targetPages);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is AppModelAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
class TargetPageAdapter extends TypeAdapter<TargetPage> {
@override
final typeId = 1;
@override
TargetPage read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return TargetPage(
route: fields[0] as String?,
functions: (fields[1] as List?)?.cast<String>(),
module: fields[2] as Module?,
)..selectedRole = fields[3] as String?;
}
@override
void write(BinaryWriter writer, TargetPage obj) {
writer
..writeByte(4)
..writeByte(0)
..write(obj.route)
..writeByte(1)
..write(obj.functions)
..writeByte(2)
..write(obj.module)
..writeByte(3)
..write(obj.selectedRole);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is TargetPageAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
class UserLocalModelAdapter extends TypeAdapter<UserLocalModel> {
@override
final typeId = 2;
@override
UserLocalModel read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return UserLocalModel(
username: fields[0] as String?,
password: fields[1] as String?,
token: fields[2] as String?,
refreshToken: fields[3] as String?,
module: fields[4] as Module?,
backend: fields[5] as String?,
roles: (fields[6] as List?)?.cast<String>(),
);
}
@override
void write(BinaryWriter writer, UserLocalModel obj) {
writer
..writeByte(7)
..writeByte(0)
..write(obj.username)
..writeByte(1)
..write(obj.password)
..writeByte(2)
..write(obj.token)
..writeByte(3)
..write(obj.refreshToken)
..writeByte(4)
..write(obj.module)
..writeByte(5)
..write(obj.backend)
..writeByte(6)
..write(obj.roles);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is UserLocalModelAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
class ModuleAdapter extends TypeAdapter<Module> {
@override
final typeId = 3;
@override
Module read(BinaryReader reader) {
switch (reader.readByte()) {
case 0:
return Module.liveStocks;
case 1:
return Module.inspection;
case 2:
return Module.chicken;
default:
return Module.liveStocks;
}
}
@override
void write(BinaryWriter writer, Module obj) {
switch (obj) {
case Module.liveStocks:
writer.writeByte(0);
case Module.inspection:
writer.writeByte(1);
case Module.chicken:
writer.writeByte(2);
}
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is ModuleAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}

View File

@@ -0,0 +1,57 @@
# Generated by Hive CE
# Manual modifications may be necessary for certain migrations
# Check in to version control
nextTypeId: 4
types:
AppModel:
typeId: 0
nextIndex: 4
fields:
isFirstRun:
index: 0
isDarkMode:
index: 1
selectedModule:
index: 2
targetPages:
index: 3
TargetPage:
typeId: 1
nextIndex: 4
fields:
route:
index: 0
functions:
index: 1
module:
index: 2
selectedRole:
index: 3
UserLocalModel:
typeId: 2
nextIndex: 7
fields:
username:
index: 0
password:
index: 1
token:
index: 2
refreshToken:
index: 3
module:
index: 4
backend:
index: 5
roles:
index: 6
Module:
typeId: 3
nextIndex: 3
fields:
liveStocks:
index: 0
inspection:
index: 1
chicken:
index: 2

View File

@@ -9,8 +9,11 @@ import 'package:rasadyar_core/data/model/local/user_local/user_local_model.dart'
extension HiveRegistrar on HiveInterface {
void registerAdapters() {
registerAdapter(AppModelAdapter());
registerAdapter(ModuleAdapter());
registerAdapter(TargetPageAdapter());
registerAdapter(UserLocalModelAdapter());
}
}
@@ -18,8 +21,12 @@ extension HiveRegistrar on HiveInterface {
extension IsolatedHiveRegistrar on IsolatedHiveInterface {
void registerAdapters() {
registerAdapter(AppModelAdapter());
registerAdapter(AppModelAdapter());
registerAdapter(ModuleAdapter());
registerAdapter(ModuleAdapter());
registerAdapter(TargetPageAdapter());
registerAdapter(TargetPageAdapter());
registerAdapter(UserLocalModelAdapter());
registerAdapter(UserLocalModelAdapter());
}
}

View File

@@ -2,6 +2,8 @@ import 'package:rasadyar_core/core.dart';
part 'user_local_model.g.dart';
@HiveType(typeId: authUserLocalModelTypeId)
class UserLocalModel extends HiveObject {
@HiveField(0)

View File

@@ -0,0 +1,23 @@
# Generated by Hive CE
# Manual modifications may be necessary for certain migrations
# Check in to version control
nextTypeId: 1
types:
UserLocalModel:
typeId: 0
nextIndex: 7
fields:
username:
index: 0
password:
index: 1
token:
index: 2
refreshToken:
index: 3
module:
index: 4
backend:
index: 5
roles:
index: 6

View File

@@ -1,5 +1,6 @@
import 'package:rasadyar_core/core.dart';
import 'package:rasadyar_core/hive_registrar.g.dart';
import 'package:rasadyar_core/data/model/local/hive_registrar.g.dart';
class GService extends GetxService {
final String _boxName = "appBox";
@@ -42,14 +43,18 @@ class GService extends GetxService {
if (isFirstTime()) {
return null;
}
var res = box.values.first.targetPages?.firstWhereOrNull((element) => element.module == module);
var res = box.values.first.targetPages?.firstWhereOrNull(
(element) => element.module == module,
);
return res;
}
Future<void> saveRoute(Module module, String route) async {
AppModel model = box.values.first;
TargetPage? targetPage = model.targetPages?.firstWhere((element) => element.module == module);
TargetPage? targetPage = model.targetPages?.firstWhere(
(element) => element.module == module,
);
if (targetPage != null) {
targetPage.route = route;
model.save();
@@ -62,7 +67,9 @@ class GService extends GetxService {
Future<void> saveRole(Module module, String role) async {
AppModel model = box.values.first;
TargetPage? targetPage = model.targetPages?.firstWhere((element) => element.module == module);
TargetPage? targetPage = model.targetPages?.firstWhere(
(element) => element.module == module,
);
if (targetPage != null) {
targetPage.selectedRole = role;
model.save();

View File

@@ -37,6 +37,7 @@ class DioRemote implements IHttpClient {
PrettyDioLogger(
request: true,
enabled: true,
requestHeader: true,
responseHeader: true,
requestBody: true,

View File

@@ -14,6 +14,8 @@ Future<void> setupAllCoreProvider() async {
// await FMTCObjectBoxBackend().initialise();
await diCore.allReady();
}
Future<void> _setupLocalStorage() async {

View File

@@ -0,0 +1,102 @@
import 'package:camera/camera.dart';
import 'package:flutter/foundation.dart';
import 'package:rasadyar_core/utils/logger_utils.dart';
class RImagePickerController extends ChangeNotifier {
List<CameraDescription> _cameras = [];
CameraController? cameraController;
bool isLoading = false;
bool isCameraReady = false;
bool frontCamera = true;
bool isCameraLoading = false;
bool hasTwoCameras = false;
List<XFile> capturedImages = <XFile>[];
Future<void> getAvailableCameras() async {
_cameras = await availableCameras();
if (_cameras.length > 1) {
hasTwoCameras = true;
}
}
Future<void> openCamera() async {
try {
isCameraLoading = true;
await disposeCameraController();
await getAvailableCameras();
if (_cameras.isNotEmpty) {
if (hasTwoCameras && frontCamera) {
cameraController = CameraController(
_cameras[0],
ResolutionPreset.high,
enableAudio: false,
);
}
if (hasTwoCameras && !frontCamera) {
cameraController = CameraController(
_cameras[1],
ResolutionPreset.high,
enableAudio: false,
);
}
await cameraController?.initialize();
isCameraReady = true;
isCameraLoading = false;
notifyListeners();
} else {
isCameraReady = false;
isCameraLoading = false;
notifyListeners();
}
} catch (e) {
isCameraReady = false;
isCameraLoading = false;
notifyListeners();
eLog(e);
}
}
Future<void> takePicture() async {
if (cameraController == null || !cameraController!.value.isInitialized) {
return;
}
if (isLoading) return;
try {
isLoading = true;
notifyListeners();
final image = await cameraController!.takePicture();
capturedImages.insert(0, image);
isLoading = false;
} catch (e) {
eLog(e);
} finally {
isLoading = false;
notifyListeners();
}
}
void removeImage(int index) {
if (index < capturedImages.length) {
capturedImages.removeAt(index);
notifyListeners();
}
}
Future<void> disposeCameraController() async {
isCameraReady = false;
notifyListeners();
await cameraController?.dispose();
cameraController = null;
}
}

View File

@@ -0,0 +1,211 @@
import 'dart:io';
import 'package:camera/camera.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:rasadyar_core/core.dart';
class RImagePicker extends StatefulWidget {
const RImagePicker({super.key, this.maxImages, required this.controller});
final int? maxImages;
final RImagePickerController controller;
@override
State<RImagePicker> createState() => _RImagePickerState();
}
class _RImagePickerState extends State<RImagePicker> {
@override
void initState() {
super.initState();
widget.controller.openCamera();
}
@override
void dispose() {
widget.controller.disposeCameraController();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
body: AnimatedBuilder(
animation: widget.controller,
builder: (context, child) {
if (!widget.controller.isCameraReady) {
return const Center(
child: CoreLoadingIndicator(
color: Colors.white,
variant: CoreLoadingVariant.cupertino,
size: CoreLoadingSize.medium,
),
);
}
return Stack(
alignment: Alignment.center,
fit: StackFit.expand,
children: [
CameraPreview(widget.controller.cameraController!),
Positioned(
top: 50,
right: 10,
child: GestureDetector(
onTap: () => Get.back(),
child: Container(
width: 40.w,
height: 40.h,
decoration: BoxDecoration(
color: Colors.white.withAlpha(50),
borderRadius: BorderRadius.circular(10.r),
),
child: Icon(
CupertinoIcons.clear,
color: Colors.white,
size: 20,
),
),
),
),
Positioned(
bottom: 40,
right: 10,
child: RFab(
onPressed: () => Get.back(),
icon: Assets.vec.checkSvg.svg(),
backgroundColor: AppColor.greenNormal,
),
),
if (widget.maxImages == null ||
widget.controller.capturedImages.length <
(widget.maxImages ?? 1000)) ...[
Positioned(
bottom: 40,
left: 0,
right: 0,
child: Center(
child: FloatingActionButton(
onPressed: widget.controller.isLoading
? null
: () async {
await widget.controller.takePicture();
},
backgroundColor: Colors.white,
child: widget.controller.isLoading
? const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
strokeWidth: 2,
valueColor: AlwaysStoppedAnimation<Color>(
Colors.black,
),
),
)
: const Icon(Icons.camera_alt, color: Colors.black),
),
),
),
],
Positioned(
bottom: 40,
left: 10,
child: Center(
child: FloatingActionButton(
onPressed: widget.controller.isCameraLoading
? null
: () async {
widget.controller.frontCamera =
!widget.controller.frontCamera;
await widget.controller.openCamera();
},
backgroundColor: Colors.white,
child: widget.controller.isCameraLoading
? const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
strokeWidth: 2,
valueColor: AlwaysStoppedAnimation<Color>(
Colors.black,
),
),
)
: const Icon(Icons.cameraswitch, color: Colors.black),
),
),
),
if (widget.controller.capturedImages.isNotEmpty) ...[
Positioned(
bottom: 120,
left: 0,
right: 0,
height: 100.h,
child: ListView.separated(
itemCount: widget.controller.capturedImages.length,
padding: EdgeInsets.symmetric(
horizontal: 20.w,
vertical: 10.h,
),
scrollDirection: Axis.horizontal,
separatorBuilder: (context, index) => SizedBox(width: 10.w),
itemBuilder: (context, index) {
final image = widget.controller.capturedImages[index];
return Container(
width: 100.w,
height: 100.h,
decoration: BoxDecoration(
border: Border.all(color: Colors.white, width: 2),
borderRadius: BorderRadius.circular(8.r),
image: DecorationImage(
image: FileImage(File(image.path)),
fit: BoxFit.cover,
),
),
child: Stack(
fit: StackFit.expand,
children: [
Positioned(
top: 2,
right: 2,
child: GestureDetector(
onTap: () =>
widget.controller.removeImage(index),
child: Container(
padding: const EdgeInsets.all(4),
decoration: const BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
),
child: const Icon(
Icons.close,
size: 16,
color: Colors.white,
),
),
),
),
],
),
);
},
),
),
],
],
);
},
),
);
}
}

View File

@@ -23,6 +23,7 @@ class RTextField extends StatefulWidget {
final BoxConstraints? boxConstraints;
final RTextFieldVariant variant;
final bool filled;
final bool isFullHeight;
final Color? filledColor;
final Color? borderColor;
final bool showCounter;
@@ -92,6 +93,7 @@ class RTextField extends StatefulWidget {
this.prefixIcon,
this.suffix,
this.boxConstraints,
this.isFullHeight = false,
// 📐 Layout & appearance
this.borderColor,
@@ -201,8 +203,8 @@ class _RTextFieldState extends State<RTextField> {
child: Padding(
padding: widget.padding ?? EdgeInsets.zero,
child: TextFormField(
textAlignVertical: TextAlignVertical.center,
controller: widget.controller,
focusNode: widget.focusNode,
textAlign: widget.textAlign ?? TextAlign.start,
readOnly: widget.readonly,
@@ -229,7 +231,11 @@ class _RTextFieldState extends State<RTextField> {
textInputAction: widget.textInputAction,
autofillHints: widget.autofillHints,
decoration: InputDecoration(
contentPadding: const EdgeInsets.symmetric(horizontal: 16),
contentPadding: EdgeInsets.symmetric(
horizontal: 16,
vertical: widget.isFullHeight ? widget.height / 3 : 0,
),
errorStyle: widget.errorStyle,
errorMaxLines: 1,
isDense: widget.isDense,

View File

@@ -50,3 +50,7 @@ export 'tabs/new_tab.dart';
export 'tabs/r_segment.dart';
export 'tabs/tab.dart';
export 'vec_widget.dart';
//image picker
export 'image_picker/image_picker_controller.dart';
export 'image_picker/image_picker_widget.dart';

View File

@@ -3,41 +3,37 @@ import 'package:logger/logger.dart';
import 'package:rasadyar_core/injection/di.dart';
void iLog(dynamic message) {
if(kDebugMode){
if (kDebugMode) {
diCore.get<Logger>().i(message.toString());
}
}
void wLog(dynamic message){
if(kDebugMode){
void wLog(dynamic message) {
if (kDebugMode) {
diCore.get<Logger>().w(message.toString());
}
}
void eLog(dynamic message) {
if(kDebugMode){
diCore.get<Logger>().e(message.toString());
if (kDebugMode) {
diCore.get<Logger>().e(message.toString());
}
}
void dLog(dynamic message) {
if(kDebugMode){
diCore.get<Logger>().d(message.toString());
if (kDebugMode) {
diCore.get<Logger>().d(message.toString());
}
}
void fLog(dynamic message){
if(kDebugMode){
diCore.get<Logger>().f(message.toString());
void fLog(dynamic message) {
if (kDebugMode) {
diCore.get<Logger>().f(message.toString());
}
}
void tLog(dynamic message) {
if(kDebugMode){
diCore.get<Logger>().t(message.toString());
if (kDebugMode) {
diCore.get<Logger>().t(message.toString());
}
}

View File

@@ -77,10 +77,10 @@ packages:
dependency: transitive
description:
name: build
sha256: dfb67ccc9a78c642193e0c2d94cb9e48c2c818b3178a86097d644acdcde6a8d9
sha256: c1668065e9ba04752570ad7e038288559d1e2ca5c6d0131c0f5f55e39e777413
url: "https://pub.dev"
source: hosted
version: "4.0.2"
version: "4.0.3"
build_config:
dependency: transitive
description:
@@ -101,10 +101,10 @@ packages:
dependency: "direct dev"
description:
name: build_runner
sha256: "7b5b569f3df370590a85029148d6fc66c7d0201fc6f1847c07dd85d365ae9fcd"
sha256: "110c56ef29b5eb367b4d17fc79375fa8c18a6cd7acd92c05bb3986c17a079057"
url: "https://pub.dev"
source: hosted
version: "2.10.3"
version: "2.10.4"
built_collection:
dependency: transitive
description:
@@ -117,10 +117,10 @@ packages:
dependency: transitive
description:
name: built_value
sha256: a30f0a0e38671e89a492c44d005b5545b830a961575bbd8336d42869ff71066d
sha256: "426cf75afdb23aa74bd4e471704de3f9393f3c7b04c1e2d9c6f1073ae0b8b139"
url: "https://pub.dev"
source: hosted
version: "8.12.0"
version: "8.12.1"
cached_network_image:
dependency: "direct main"
description:
@@ -145,6 +145,46 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.1"
camera:
dependency: "direct main"
description:
name: camera
sha256: eefad89f262a873f38d21e5eec853461737ea074d7c9ede39f3ceb135d201cab
url: "https://pub.dev"
source: hosted
version: "0.11.3"
camera_android_camerax:
dependency: transitive
description:
name: camera_android_camerax
sha256: "474d8355961658d43f1c976e2fa1ca715505bea1adbd56df34c581aaa70ec41f"
url: "https://pub.dev"
source: hosted
version: "0.6.26+2"
camera_avfoundation:
dependency: transitive
description:
name: camera_avfoundation
sha256: "035b90c1e33c2efad7548f402572078f6e514d4f82be0a315cd6c6af7e855aa8"
url: "https://pub.dev"
source: hosted
version: "0.9.22+6"
camera_platform_interface:
dependency: transitive
description:
name: camera_platform_interface
sha256: "98cfc9357e04bad617671b4c1f78a597f25f08003089dd94050709ae54effc63"
url: "https://pub.dev"
source: hosted
version: "2.12.0"
camera_web:
dependency: transitive
description:
name: camera_web
sha256: "3bc7bb1657a0f29c34116453c5d5e528c23efcf5e75aac0a3387cf108040bf65"
url: "https://pub.dev"
source: hosted
version: "0.3.5+2"
characters:
dependency: transitive
description:
@@ -237,10 +277,10 @@ packages:
dependency: transitive
description:
name: cross_file
sha256: "942a4791cd385a68ccb3b32c71c427aba508a1bb949b86dff2adbe4049f16239"
sha256: "701dcfc06da0882883a2657c445103380e53e647060ad8d9dfb710c100996608"
url: "https://pub.dev"
source: hosted
version: "0.3.5"
version: "0.3.5+1"
crypto:
dependency: transitive
description:
@@ -309,10 +349,10 @@ packages:
dependency: "direct main"
description:
name: device_info_plus
sha256: dd0e8e02186b2196c7848c9d394a5fd6e5b57a43a546082c5820b1ec72317e33
sha256: "4df8babf73058181227e18b08e6ea3520cf5fc5d796888d33b7cb0f33f984b7c"
url: "https://pub.dev"
source: hosted
version: "12.2.0"
version: "12.3.0"
device_info_plus_platform_interface:
dependency: transitive
description:
@@ -381,18 +421,18 @@ packages:
dependency: transitive
description:
name: file_selector_linux
sha256: "80a877f5ec570c4fb3b40720a70b6f31e8bb1315a464b4d3e92fe82754d4b21a"
sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0"
url: "https://pub.dev"
source: hosted
version: "0.9.3+3"
version: "0.9.4"
file_selector_macos:
dependency: transitive
description:
name: file_selector_macos
sha256: "44f24d102e368370951b98ffe86c7325b38349e634578312976607d28cc6d747"
sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a"
url: "https://pub.dev"
source: hosted
version: "0.9.4+6"
version: "0.9.5"
file_selector_platform_interface:
dependency: transitive
description:
@@ -511,10 +551,10 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687"
sha256: ee8068e0e1cd16c4a82714119918efdeed33b3ba7772c54b5d094ab53f9b7fd1
url: "https://pub.dev"
source: hosted
version: "2.0.32"
version: "2.0.33"
flutter_rating_bar:
dependency: "direct main"
description:
@@ -591,10 +631,10 @@ packages:
dependency: "direct main"
description:
name: flutter_svg
sha256: "055de8921be7b8e8b98a233c7a5ef84b3a6fcc32f46f1ebf5b9bb3576d108355"
sha256: "87fbd7c534435b6c5d9d98b01e1fd527812b82e68ddd8bd35fc45ed0fa8f0a95"
url: "https://pub.dev"
source: hosted
version: "2.2.2"
version: "2.2.3"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -681,10 +721,10 @@ packages:
dependency: "direct main"
description:
name: get
sha256: c79eeb4339f1f3deffd9ec912f8a923834bec55f7b49c9e882b8fef2c139d425
sha256: "5ed34a7925b85336e15d472cc4cfe7d9ebf4ab8e8b9f688585bf6b50f4c3d79a"
url: "https://pub.dev"
source: hosted
version: "4.7.2"
version: "4.7.3"
get_it:
dependency: "direct main"
description:
@@ -745,10 +785,10 @@ packages:
dependency: "direct dev"
description:
name: hive_ce_generator
sha256: b19ac263cb37529513508ba47352c41e6de72ba879952898d9c18c9c8a955921
sha256: c3d04f17b39cac9439e1c7d098d0b3fd93a488d167af2bd52746dbb5fc109411
url: "https://pub.dev"
source: hosted
version: "1.10.0"
version: "1.10.1"
http:
dependency: transitive
description:
@@ -777,10 +817,10 @@ packages:
dependency: transitive
description:
name: image
sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
sha256: "51555e36056541237b15b57afc31a0f53d4f9aefd9bd00873a6dc0090e54e332"
url: "https://pub.dev"
source: hosted
version: "4.5.4"
version: "4.6.0"
image_cropper:
dependency: "direct main"
description:
@@ -817,26 +857,26 @@ packages:
dependency: transitive
description:
name: image_picker_android
sha256: a1cd1584fae64f6ecca63113fd5450e3483c097cc05e43a2f073330f62adcabe
sha256: "5e9bf126c37c117cf8094215373c6d561117a3cfb50ebc5add1a61dc6e224677"
url: "https://pub.dev"
source: hosted
version: "0.8.13+8"
version: "0.8.13+10"
image_picker_for_web:
dependency: transitive
description:
name: image_picker_for_web
sha256: "40c2a6a0da15556dc0f8e38a3246064a971a9f512386c3339b89f76db87269b6"
sha256: "66257a3191ab360d23a55c8241c91a6e329d31e94efa7be9cf7a212e65850214"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
version: "3.1.1"
image_picker_ios:
dependency: transitive
description:
name: image_picker_ios
sha256: "997d100ce1dda5b1ba4085194c5e36c9f8a1fb7987f6a36ab677a344cd2dc986"
sha256: "956c16a42c0c708f914021666ffcd8265dde36e673c9fa68c81f7d085d9774ad"
url: "https://pub.dev"
source: hosted
version: "0.8.13+2"
version: "0.8.13+3"
image_picker_linux:
dependency: transitive
description:
@@ -921,10 +961,10 @@ packages:
dependency: "direct dev"
description:
name: json_serializable
sha256: "33a040668b31b320aafa4822b7b1e177e163fc3c1e835c6750319d4ab23aa6fe"
sha256: "6b253f7851cf1626a05c8b49c792e04a14897349798c03798137f2b5f7e0b5b1"
url: "https://pub.dev"
source: hosted
version: "6.11.1"
version: "6.11.3"
latlong2:
dependency: "direct main"
description:
@@ -1041,10 +1081,10 @@ packages:
dependency: transitive
description:
name: mockito
sha256: "4feb43bc4eb6c03e832f5fcd637d1abb44b98f9cfa245c58e27382f58859f8f6"
sha256: dac24d461418d363778d53198d9ac0510b9d073869f078450f195766ec48d05e
url: "https://pub.dev"
source: hosted
version: "5.5.1"
version: "5.6.1"
mocktail:
dependency: "direct dev"
description:
@@ -1153,18 +1193,18 @@ packages:
dependency: transitive
description:
name: path_provider_android
sha256: "95c68a74d3cab950fd0ed8073d9fab15c1c06eb1f3eec68676e87aabc9ecee5a"
sha256: f2c65e21139ce2c3dad46922be8272bb5963516045659e71bb16e151c93b580e
url: "https://pub.dev"
source: hosted
version: "2.2.21"
version: "2.2.22"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: "97390a0719146c7c3e71b6866c34f1cde92685933165c1c671984390d2aca776"
sha256: "6d13aece7b3f5c5a9731eaf553ff9dcbc2eff41087fd2df587fd0fed9a3eb0c4"
url: "https://pub.dev"
source: hosted
version: "2.4.4"
version: "2.5.1"
path_provider_linux:
dependency: transitive
description:
@@ -1369,18 +1409,18 @@ packages:
dependency: transitive
description:
name: shared_preferences
sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
sha256: "2939ae520c9024cb197fc20dee269cd8cdbf564c8b5746374ec6cacdc5169e64"
url: "https://pub.dev"
source: hosted
version: "2.5.3"
version: "2.5.4"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
sha256: "07d552dbe8e71ed720e5205e760438ff4ecfb76ec3b32ea664350e2ca4b0c43b"
sha256: "83af5c682796c0f7719c2bbf74792d113e40ae97981b8f266fa84574573556bc"
url: "https://pub.dev"
source: hosted
version: "2.4.16"
version: "2.4.18"
shared_preferences_foundation:
dependency: transitive
description:
@@ -1478,18 +1518,18 @@ packages:
dependency: transitive
description:
name: source_gen
sha256: "9098ab86015c4f1d8af6486b547b11100e73b193e1899015033cb3e14ad20243"
sha256: "07b277b67e0096c45196cbddddf2d8c6ffc49342e88bf31d460ce04605ddac75"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
version: "4.1.1"
source_helper:
dependency: transitive
description:
name: source_helper
sha256: "6a3c6cc82073a8797f8c4dc4572146114a39652851c157db37e964d9c7038723"
sha256: e82b1996c63da42aa3e6a34cc1ec17427728a1baf72ed017717a5669a7123f0d
url: "https://pub.dev"
source: hosted
version: "1.3.8"
version: "1.3.9"
source_map_stack_trace:
dependency: transitive
description:
@@ -1630,10 +1670,10 @@ packages:
dependency: transitive
description:
name: time
sha256: "370572cf5d1e58adcb3e354c47515da3f7469dac3a95b447117e728e7be6f461"
sha256: "46187cf30bffdab28c56be9a63861b36e4ab7347bf403297595d6a97e10c789f"
url: "https://pub.dev"
source: hosted
version: "2.1.5"
version: "2.1.6"
typed_data:
dependency: transitive
description:
@@ -1702,10 +1742,10 @@ packages:
dependency: transitive
description:
name: watcher
sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a"
sha256: f52385d4f73589977c80797e60fe51014f7f2b957b5e9a62c3f6ada439889249
url: "https://pub.dev"
source: hosted
version: "1.1.4"
version: "1.2.0"
web:
dependency: transitive
description:

View File

@@ -91,9 +91,10 @@ dependencies:
##code generation
freezed_annotation: ^3.1.0
json_annotation: ^4.9.0
camera: ^0.11.3
dependency_overrides:
analyzer: ^8.0.0 # Ensures analyzer ^8.0.0 is used despite other conflicts
analyzer: ^8.0.0
dev_dependencies: