[client] basic sync dialog with pending actions

This commit is contained in:
Abhishek Shroff
2024-09-23 11:11:10 +05:30
parent 77ad3ffe8a
commit a91844b937
3 changed files with 51 additions and 4 deletions

View File

@@ -4,8 +4,7 @@ import 'package:flutter/material.dart';
import 'package:offtheline/offtheline.dart';
import 'package:phylum/app_shortcuts.dart';
import 'package:phylum/integrations/download_manager.dart';
import 'package:phylum/libphylum/phylum_account.dart';
import 'package:phylum/util/dialogs.dart';
import 'package:phylum/ui/sync/sync_dialog.dart';
import 'package:provider/provider.dart';
enum _SyncState {
@@ -162,8 +161,7 @@ class SyncButton extends StatelessWidget {
title: const Text('Sync'),
subtitle: Text(qState.text),
onTap: () {
final state = context.read<ApiActionQueueState>();
showAlertDialog(context, message: state.toDetailedString(context.read<PhylumAccount>()));
SyncDialog.show(context);
},
);
}

View File

@@ -0,0 +1,29 @@
import 'package:flutter/material.dart';
import 'package:offtheline/offtheline.dart';
import 'package:phylum/libphylum/phylum_account.dart';
import 'package:provider/provider.dart';
class ActionQueueList extends StatelessWidget {
const ActionQueueList({super.key});
@override
Widget build(BuildContext context) {
final queue = context.select<ApiActionQueueState, Iterable<ApiAction>>((state) => state.actions.keys).toList(growable: false);
return ListView.builder(shrinkWrap: true, itemCount: queue.length, itemBuilder: (context, i) => ActionView(action: queue[i]));
}
}
class ActionView extends StatelessWidget {
final ApiAction action;
ActionView({required this.action}) : super(key: ValueKey(action.key));
@override
Widget build(BuildContext context) {
final account = context.read<PhylumAccount>();
final state = context.select<ApiActionQueueState, ActionState>((state) => state.actions[action]!);
return ListTile(
title: Text(action.generateDescription(account)),
subtitle: Text(state.toString()),
);
}
}

View File

@@ -0,0 +1,20 @@
import 'package:flutter/material.dart';
import 'package:phylum/ui/sync/action_queue_list.dart';
class SyncDialog extends StatelessWidget {
const SyncDialog({super.key});
static void show(BuildContext context) {
showDialog(context: context, builder: (context) => const SyncDialog());
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Pending Actions'),
),
body: const ActionQueueList(),
);
}
}