123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'package:vitalapp/architecture/utils/advance_debounce.dart';
- import 'package:vitalapp/architecture/utils/prompt_box.dart';
- import 'package:vitalapp/components/appbar.dart';
- import 'package:vitalapp/components/button.dart';
- import 'package:vitalapp/components/dialog_select.dart';
- import 'package:vitalapp/components/no_data_view.dart';
- import 'package:vitalapp/components/select.dart';
- import 'package:vitalapp/database/entities/defines.dart';
- import 'package:vitalapp/global.dart';
- import 'controller.dart';
- import 'widgets/data_table.dart';
- import 'widgets/upload_dialog.dart';
- class SyncCenterPage extends GetView<SyncCenterController> {
- const SyncCenterPage({super.key});
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: VAppBar(titleText: "同步管理"),
- body: Column(
- mainAxisSize: MainAxisSize.max,
- children: [
- _Header(),
- const SyncDataTableHeader(),
- Expanded(child: const SyncDataTableBody()),
- ],
- ),
- );
- }
- }
- class _Header extends GetView<SyncCenterController> {
- @override
- Widget build(BuildContext context) {
- return Container(
- padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 8),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.end,
- children: [
- _buildStateSelect(context),
- const SizedBox(width: 12),
- _buildUploadAll(),
- ],
- ),
- );
- }
- Widget _buildUploadAll() {
- return SizedBox(
- width: 200,
- child: VButton(
- child: Row(
- mainAxisSize: MainAxisSize.min,
- children: const [
- Icon(Icons.cloud_upload, size: 24),
- SizedBox(width: 12),
- Text("全部上传", style: TextStyle(fontSize: 18)),
- ],
- ),
- onTap: () {
- Debouncer.run(
- () async {
- if (!kIsOnline) {
- PromptBox.toast("请检查网络连接");
- return;
- }
- final count = await controller.getCanUploadCount();
- if (count == 0) {
- PromptBox.toast("未查询到待上传记录");
- return;
- }
- final result = await SyncUploadDialog.show();
- // 等待Dialog关闭动画完成
- await Future.delayed(const Duration(milliseconds: 800));
- controller.reloadPageList();
- },
- );
- },
- ),
- );
- }
- Widget _buildStateSelect(BuildContext context) {
- return Row(
- mainAxisSize: MainAxisSize.min,
- children: [
- const Text("上传状态:", style: TextStyle(fontSize: 18)),
- const SizedBox(width: 4),
- GestureDetector(
- child: Container(
- height: 56,
- width: 160,
- padding: const EdgeInsets.symmetric(horizontal: 18),
- alignment: Alignment.center,
- decoration: BoxDecoration(
- border: Border.all(color: Theme.of(context).primaryColor),
- borderRadius: BorderRadius.circular(16),
- ),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.end,
- children: [
- Expanded(
- child: Obx(() {
- int value =
- _convertSyncStateInt(controller.state.syncState);
- return Text(
- _getSyncStateDesc(value),
- style: const TextStyle(
- fontSize: 18,
- color: Colors.black87,
- ),
- );
- }),
- ),
- const SizedBox(width: 12),
- Icon(
- Icons.arrow_drop_down,
- size: 36,
- color: Theme.of(context).primaryColor,
- ),
- ],
- ),
- ),
- onTap: () async {
- int value = _convertSyncStateInt(controller.state.syncState);
- final result = await VDialogSelect<int, int?>(
- title: "上传状态",
- source: [
- -1,
- ...OfflineDataSyncState.values.map((e) => e.index).toList(),
- ],
- labelGetter: (data) => _getSyncStateDesc(data),
- valueGetter: (data) => data,
- initialValue: value,
- ).show<int?>();
- if (result != null) {
- if (result == -1) {
- controller.state.syncState = null;
- } else {
- controller.state.syncState =
- OfflineDataSyncState.values[result];
- }
- controller.reloadPageList();
- }
- },
- ),
- ],
- );
- }
- static String _getSyncStateDesc(int state) {
- if (state == -1) {
- return "全部";
- }
- return OfflineDataSyncState.values[state].getDescription();
- }
- static int _convertSyncStateInt(OfflineDataSyncState? state) {
- int value = -1;
- if (state != null) {
- value = state.index;
- }
- return value;
- }
- }
|