116 lines
2.8 KiB
Dart
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();
|
|
}
|
|
}
|