controller.dart 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import 'package:get/get.dart';
  2. import 'package:vitalapp/architecture/defines.dart';
  3. import 'package:vitalapp/architecture/utils/prompt_box.dart';
  4. import 'package:vitalapp/database/entities/defines.dart';
  5. import 'package:vitalapp/global.dart';
  6. import 'package:vitalapp/managers/interfaces/data_sync.dart';
  7. import 'state.dart';
  8. class SyncCenterController extends FControllerBase {
  9. final state = SyncCenterState();
  10. final syncManager = Get.find<IDataSyncManager>();
  11. @override
  12. void onReady() {
  13. super.onReady();
  14. reloadPageList();
  15. }
  16. /// 获取可上传(筛选后)的数量
  17. Future<int> getCanUploadCount() async {
  18. final result = await syncManager.getPatientPagedList(
  19. 1,
  20. isReturnCountOnly: true,
  21. syncStates: [
  22. OfflineDataSyncState.fail,
  23. OfflineDataSyncState.wait,
  24. ],
  25. );
  26. return result.totalCount;
  27. }
  28. /// 单个上传
  29. ///
  30. /// [index] 选择的索引
  31. Future<void> uploadSingle(int index) async {
  32. if (!kIsOnline) {
  33. PromptBox.toast("请检查网络连接");
  34. return;
  35. }
  36. SyncCenterDataModel model = state.dataList[index];
  37. final data = model.data;
  38. final patientCode = data.code;
  39. setBusy("正在上传...");
  40. // 让Loading显示一会
  41. await Future.delayed(const Duration(milliseconds: 500));
  42. final result = await syncManager.syncPatientAllData(patientCode);
  43. // 让错误提示也显示一会
  44. await Future.delayed(const Duration(milliseconds: 500));
  45. final message = "上传${result ? "成功" : "失败"}";
  46. PromptBox.toast(message);
  47. // 刷新列表
  48. await reloadPageList();
  49. cancelBusy();
  50. }
  51. /// 加载分页列表
  52. Future<void> reloadPageList() async {
  53. state.pageIndex = 1;
  54. state.dataList = [];
  55. await loadNextPageList();
  56. }
  57. /// 追加下一页数据
  58. Future<void> loadNextPageList() async {
  59. busy = true;
  60. final pagedList = await syncManager.getPatientPagedList(
  61. state.pageIndex,
  62. syncStates: state.syncState != null ? [state.syncState!] : [],
  63. );
  64. state.totalCount = pagedList.totalCount;
  65. final appendList =
  66. pagedList.data.map((e) => SyncCenterDataModel(e)).toList();
  67. state.dataList = [...state.dataList, ...appendList];
  68. state.pageIndex = state.pageIndex + 1;
  69. busy = false;
  70. }
  71. }