Files
fcs/lib/pages/carton/model/carton_selection_model.dart

108 lines
2.7 KiB
Dart
Raw Normal View History

2024-02-02 18:00:51 +06:30
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:fcs/domain/entities/carton.dart';
import 'package:logging/logging.dart';
import '../../../domain/constants.dart';
import '../../main/model/base_model.dart';
class CartonSelectionModel extends BaseModel {
final log = Logger("CartonSelectionModel");
String query = "";
List<Carton> cartons = [];
2024-03-04 17:09:47 +06:30
List<Carton> selectedCartons = [];
2024-02-02 18:00:51 +06:30
2024-02-05 17:49:12 +06:30
bool isLoading = false;
2024-02-02 18:00:51 +06:30
DocumentSnapshot? _lastDocument;
bool ended = false;
Timer? t;
search(String term, {bool imm = false, required String shipmentId}) async {
query = term;
cartons.clear();
2024-03-04 17:09:47 +06:30
_lastDocument = null;
ended = false;
2024-02-02 18:00:51 +06:30
t?.cancel();
t = Timer(Duration(milliseconds: imm ? 0 : 800), () async {
2024-03-04 17:09:47 +06:30
await refresh(shipmentId, term: term);
2024-02-02 18:00:51 +06:30
});
}
2024-03-04 17:09:47 +06:30
Future<void> refresh(String shipmentId, {String term = ""}) async {
2024-02-02 18:00:51 +06:30
cartons.clear();
_lastDocument = null;
ended = false;
2024-03-04 17:09:47 +06:30
await loadMoreData(shipmentId, term: term);
2024-02-02 18:00:51 +06:30
notifyListeners();
}
2024-03-04 17:09:47 +06:30
Future<void> loadMoreData(String shipmentId, {String term = ""}) async {
2024-02-02 18:00:51 +06:30
int rowPerPage = 20;
try {
2024-02-05 11:13:12 +06:30
isLoading = true;
2024-02-02 18:00:51 +06:30
String path = "/$cartons_collection";
Query query = FirebaseFirestore.instance
.collection(path)
2024-02-05 17:49:12 +06:30
// .where("fcs_shipment_id", isEqualTo: shipmentId)
2024-02-02 18:00:51 +06:30
// .where("status", isEqualTo: carton_processing_status)
2024-03-04 17:09:47 +06:30
.where("is_deleted", isEqualTo: false);
if (term != "") {
query = query.where("carton_number", isEqualTo: term);
}
query = query.orderBy("created_at", descending: true);
2024-02-02 18:00:51 +06:30
if (_lastDocument != null) {
query = query.startAfterDocument(_lastDocument!);
}
QuerySnapshot querySnap = await query.limit(rowPerPage).get();
if (querySnap.docs.isEmpty) return;
_lastDocument = querySnap.docs[querySnap.docs.length - 1];
List<Carton> list = querySnap.docs.map((documentSnapshot) {
var p = Carton.fromMap(documentSnapshot.data() as Map<String, dynamic>,
documentSnapshot.id);
return p;
}).toList();
for (var p in list) {
2024-03-04 17:09:47 +06:30
selectedCartons.contains(p)
2024-02-02 18:00:51 +06:30
? p.isSelected = true
: p.isSelected = false;
}
cartons.addAll(list);
if (list.length < rowPerPage) ended = true;
notifyListeners();
} catch (e) {
log.warning("error:$e");
2024-02-05 17:49:12 +06:30
} finally {
2024-02-05 11:13:12 +06:30
isLoading = false;
2024-02-02 18:00:51 +06:30
}
}
2024-03-04 17:09:47 +06:30
selectCarton(Carton a) {
if (a.isSelected) {
selectedCartons.add(a);
} else {
selectedCartons.remove(a);
}
}
2024-02-02 18:00:51 +06:30
clearSelection() {
2024-03-04 17:09:47 +06:30
selectedCartons.clear();
2024-02-02 18:00:51 +06:30
cartons.clear();
query = "";
}
addSelectedCarton(List<Carton> list) {
2024-03-04 17:09:47 +06:30
selectedCartons = list;
}
2024-02-02 18:00:51 +06:30
}