
Enables offline capabilities and improved data access for stock picking records. API calls now prioritize local ObjectBox storage when offline and persist fetched data upon successful remote retrieval. Introduces comprehensive model-to-entity conversion logic for stock picking data and its related models. Updates UI components and state management to directly consume ObjectBox entities, optimizing data display and interaction. Adjusts ObjectBox entity schema for improved flexibility and adds utility getters.
69 lines
2.3 KiB
Dart
69 lines
2.3 KiB
Dart
import 'package:e_scan/backend/api/api_calls.dart';
|
|
import 'package:e_scan/backend/objectbox/entities/stock_picking/stock_picking_record_entity.dart';
|
|
import 'package:e_scan/backend/schema/user/user_struct.dart';
|
|
import 'package:e_scan/services/secure_storage.dart';
|
|
import 'package:e_scan/services/token_provider.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
|
|
part 'reception_page_model.freezed.dart';
|
|
|
|
final receptionPageModelProvider =
|
|
StateNotifierProvider<ReceptionPageModel, ReceptionPageState>((ref) {
|
|
return ReceptionPageModel(
|
|
secureStorage: ref.read(sharedPrefsProvider),
|
|
tokenProvider: ref.read(tokenProvider),
|
|
userConnectedProvider: ref.read(userConnectedProvider),
|
|
);
|
|
});
|
|
|
|
class ReceptionPageModel extends StateNotifier<ReceptionPageState> {
|
|
ReceptionPageModel({
|
|
required this.secureStorage,
|
|
required this.tokenProvider,
|
|
required this.userConnectedProvider,
|
|
}) : super(const ReceptionPageState()) {
|
|
getAllReceptions();
|
|
}
|
|
|
|
late FlutterSecureStorage secureStorage;
|
|
late TokenProvider tokenProvider;
|
|
final UserConnectedProvider userConnectedProvider;
|
|
|
|
Future getUserConnected() async {
|
|
state = state.copyWith(loadingUser: true);
|
|
final user = await userConnectedProvider.get();
|
|
state = state.copyWith(user: user, loadingUser: false);
|
|
}
|
|
|
|
Future getAllReceptions() async {
|
|
try {
|
|
state = state.copyWith(loadingReceptions: true);
|
|
final res = await ApiCalls.getAllStockPiking();
|
|
res.when(
|
|
(data) {
|
|
state = state.copyWith(receptions: data, loadingReceptions: false);
|
|
},
|
|
(error) {
|
|
state = state.copyWith(loadingReceptions: false);
|
|
},
|
|
);
|
|
} catch (e) {
|
|
state = state.copyWith(loadingReceptions: false);
|
|
}
|
|
}
|
|
}
|
|
|
|
@freezed
|
|
abstract class ReceptionPageState with _$ReceptionPageState {
|
|
const factory ReceptionPageState({
|
|
UserStruct? user,
|
|
@Default(<StockPickingRecordEntity>[])
|
|
List<StockPickingRecordEntity> receptions,
|
|
@Default(false) bool loadingReceptions,
|
|
@Default(false) bool loadingUser,
|
|
}) = _ReceptionPageState;
|
|
}
|