Make account actions more obvious

This commit is contained in:
shilangyu 2021-04-06 14:42:42 +02:00
parent 9b725d8a02
commit ee4ef8de91
3 changed files with 65 additions and 64 deletions

View File

@ -2,13 +2,13 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import '../hooks/stores.dart'; import '../hooks/stores.dart';
import '../l10n/l10n.dart'; import '../l10n/l10n.dart';
import '../util/goto.dart'; import '../util/goto.dart';
import '../widgets/about_tile.dart'; import '../widgets/about_tile.dart';
import '../widgets/bottom_modal.dart';
import '../widgets/radio_picker.dart'; import '../widgets/radio_picker.dart';
import 'add_account.dart'; import 'add_account.dart';
import 'add_instance.dart'; import 'add_instance.dart';
@ -128,6 +128,7 @@ class AccountsConfigPage extends HookWidget {
) ?? ) ??
false) { false) {
await accountsStore.removeInstance(instanceHost); await accountsStore.removeInstance(instanceHost);
Navigator.of(context).pop();
} }
} }
@ -151,10 +152,50 @@ class AccountsConfigPage extends HookWidget {
), ),
) ?? ) ??
false) { false) {
return accountsStore.removeAccount(instanceHost, username); await accountsStore.removeAccount(instanceHost, username);
Navigator.of(context).pop();
} }
} }
void accountActions(String instanceHost, String username) {
showBottomModal(
context: context,
builder: (context) => Column(
children: [
if (accountsStore.defaultUsernameFor(instanceHost) != username)
ListTile(
leading: const Icon(Icons.check_circle_outline),
title: const Text('Set as default'),
onTap: () {
accountsStore.setDefaultAccountFor(instanceHost, username);
Navigator.of(context).pop();
},
),
ListTile(
leading: const Icon(Icons.delete),
title: const Text('Remove account'),
onTap: () => removeUserDialog(instanceHost, username),
),
],
),
);
}
void instanceActions(String instanceHost) {
showBottomModal(
context: context,
builder: (context) => Column(
children: [
ListTile(
leading: const Icon(Icons.delete),
title: const Text('Remove instance'),
onTap: () => removeInstanceDialog(instanceHost),
),
],
),
);
}
return Scaffold( return Scaffold(
key: _scaffoldKey, key: _scaffoldKey,
appBar: AppBar( appBar: AppBar(
@ -206,52 +247,22 @@ class AccountsConfigPage extends HookWidget {
), ),
for (final instance in accountsStore.instances) ...[ for (final instance in accountsStore.instances) ...[
const SizedBox(height: 40), const SizedBox(height: 40),
Slidable( ListTile(
actionPane: const SlidableBehindActionPane(),
secondaryActions: [
IconSlideAction(
onTap: () => removeInstanceDialog(instance),
icon: Icons.delete_sweep,
color: Colors.red,
),
],
key: Key(instance),
// TODO: missing ripple effect
child: Container(
color: theme.scaffoldBackgroundColor,
child: ListTile(
dense: true, dense: true,
contentPadding: EdgeInsets.zero, contentPadding: EdgeInsets.zero,
onLongPress: () => instanceActions(instance),
title: _SectionHeading(instance), title: _SectionHeading(instance),
), ),
),
),
for (final username in accountsStore.usernamesFor(instance)) ...[ for (final username in accountsStore.usernamesFor(instance)) ...[
Slidable( ListTile(
actionPane: const SlidableBehindActionPane(), trailing: username == accountsStore.defaultUsernameFor(instance)
key: Key('$username@$instance'),
secondaryActions: [
IconSlideAction(
onTap: () => removeUserDialog(instance, username),
icon: Icons.delete_sweep,
color: Colors.red,
),
],
// TODO: missing ripple effect
child: Container(
color: theme.scaffoldBackgroundColor,
child: ListTile(
trailing:
username == accountsStore.defaultUsernameFor(instance)
? Icon( ? Icon(
Icons.check_circle_outline, Icons.check_circle_outline,
color: theme.accentColor, color: theme.accentColor,
) )
: null, : null,
title: Text(username), title: Text(username),
onLongPress: () { onLongPress: () => accountActions(instance, username),
accountsStore.setDefaultAccountFor(instance, username);
},
onTap: () { onTap: () {
goTo( goTo(
context, context,
@ -261,8 +272,6 @@ class AccountsConfigPage extends HookWidget {
)); ));
}, },
), ),
),
),
], ],
if (accountsStore.usernamesFor(instance).isEmpty) if (accountsStore.usernamesFor(instance).isEmpty)
ListTile( ListTile(

View File

@ -263,13 +263,6 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "2.0.0"
flutter_slidable:
dependency: "direct main"
description:
name: flutter_slidable
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.7"
flutter_speed_dial: flutter_speed_dial:
dependency: "direct main" dependency: "direct main"
description: description:

View File

@ -23,7 +23,6 @@ environment:
dependencies: dependencies:
# widgets # widgets
flutter_speed_dial: ^1.2.5 flutter_speed_dial: ^1.2.5
flutter_slidable: ^0.5.7
photo_view: ^0.10.2 photo_view: ^0.10.2
markdown: ^4.0.0 markdown: ^4.0.0
flutter_markdown: ^0.6.1 flutter_markdown: ^0.6.1