mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-05 19:21:23 -06:00
[client] basic sync dialog with pending actions
This commit is contained in:
@@ -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);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
29
client/lib/ui/sync/action_queue_list.dart
Normal file
29
client/lib/ui/sync/action_queue_list.dart
Normal 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()),
|
||||
);
|
||||
}
|
||||
}
|
||||
20
client/lib/ui/sync/sync_dialog.dart
Normal file
20
client/lib/ui/sync/sync_dialog.dart
Normal 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(),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user