APP_NEW/lib/Provider/User/manager_provider.dart
2025-03-11 21:17:14 +08:00

116 lines
2.8 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:lamiter/Class/API/api.dart';
import 'package:lamiter/Class/UsageTimer/usage_timer.dart';
import 'package:lamiter/Class/User/client.dart';
import 'package:lamiter/Class/User/manager.dart';
import 'package:lamiter/Mixin/filter.dart';
import 'package:lamiter/Page/login_page.dart';
import 'package:lamiter/Provider/User/user_provider.dart';
class ManagerProvider extends UserProvider<Manager> with Filter {
late Manager? self;
late String name;
late String? photo;
late int clientMaxNumber;
late List<Client> clients;
late bool loading;
ManagerProvider() {
init();
}
@override
void init() {
self = null;
name = '';
photo = null;
clientMaxNumber = 0;
clients = [];
super.filtedList = [];
notifyListeners();
}
Future<void> start(Manager manager) async {
self = manager;
name = manager.name;
photo = manager.photo;
await refresh();
}
@override
Future<void> refresh() async {
updateLoading(true);
var res = await API().get_clients(self!.id!);
clients = (res["success"] ?? [])
.map<Client>((json) => Client.fromJson(json))
.toList();
res = await API().get_client_max_number(self!.id!);
clientMaxNumber = res["success"] ?? 0;
updateLoading(false);
filt('');
notifyListeners();
}
void updateLoading(bool b) {
loading = b;
notifyListeners();
}
@override
Future<void> edit(BuildContext context) async {
// await Navigator.push(
// context,
// CupertinoPageRoute(
// builder: (context) =>
// CreateEditManagerPage(manager: self, isSelf: true),
// ),
// );
// if (manager == null) return;
// // update db
// self = manager;
// refresh
refresh();
}
@override
Future<void> logout(BuildContext context) async {
// self!.lastUpdateTime = DateTime.now();
await UsageTime.instance.end(context);
Navigator.pushReplacement(
context,
CupertinoPageRoute(
builder: (context) => const LoginPage(),
),
);
}
@override
Future<void> navigate(BuildContext context, Widget page) async {
await Navigator.push(
context,
CupertinoPageRoute(builder: (context) => page),
);
await refresh();
}
void filt(String keyword) {
super.filtedList = clients;
super.filtedList = filtWithKeyword(super.filtedList!, keyword);
super.filtedList = sortWithLastUpdateTime(super.filtedList!);
notifyListeners();
}
List<Client> findClientsWithTag(ClientTagType type) {
return filtedList
?.where((client) => client.tag == type.index)
.map((client) => client as Client)
.toList() ??
[];
}
Future<void> deleteClient(BuildContext context, String clientId) async {
await API().delete_client(self!.id!, clientId);
await refresh();
}
}