chore: update devtools options to include new extensions, increment package versions, and refactor authentication logic for improved user experience

This commit is contained in:
2025-12-14 12:48:48 +03:30
parent afbd72404d
commit e7b0159ea9
28 changed files with 592 additions and 143 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

@@ -201,8 +201,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,8 +229,12 @@ 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.height / 3,
),
errorStyle: widget.errorStyle,
errorMaxLines: 1,
isDense: widget.isDense,
suffix: widget.suffix,

View File

@@ -93,7 +93,7 @@ dependencies:
json_annotation: ^4.9.0
dependency_overrides:
analyzer: ^8.0.0 # Ensures analyzer ^8.0.0 is used despite other conflicts
analyzer: ^8.0.0
dev_dependencies: