accounts screen in settings:

- you can see your accounts
- you can choose the default one for the instance with a long press
This commit is contained in:
shilangyu 2020-09-02 01:35:30 +02:00
parent da107a7ad7
commit 706bf94502
2 changed files with 60 additions and 9 deletions

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:provider/provider.dart';
import '../stores/accounts_store.dart';
import '../stores/config_store.dart';
class Settings extends StatelessWidget {
@ -23,7 +24,10 @@ class Settings extends StatelessWidget {
ListTile(
leading: Icon(Icons.person),
title: Text('Accounts'),
onTap: () {},
onTap: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (_) => _AccountsConfig()));
},
),
ListTile(
leading: Icon(Icons.color_lens),
@ -75,3 +79,54 @@ class _AppearanceConfig extends StatelessWidget {
);
}
}
class _AccountsConfig extends StatelessWidget {
@override
Widget build(BuildContext context) {
var theme = Theme.of(context);
return Scaffold(
appBar: AppBar(
backgroundColor: theme.scaffoldBackgroundColor,
shadowColor: Colors.transparent,
iconTheme: theme.iconTheme,
title: Text('Accounts', style: theme.textTheme.headline6),
centerTitle: true,
),
body: Observer(
builder: (ctx) {
var accountsStore = ctx.watch<AccountsStore>();
var theme = Theme.of(context);
return Column(
mainAxisSize: MainAxisSize.min,
children: [
for (var entry in accountsStore.users.entries) ...[
Text(
entry.key,
style: theme.textTheme.subtitle2,
),
for (var username in entry.value.keys) ...[
ListTile(
trailing:
username == accountsStore.defaultUserFor(entry.key).name
? Icon(Icons.check_circle_outline)
: null,
selected: username ==
accountsStore.defaultUserFor(entry.key).name,
title: Text(username),
onLongPress: () {
accountsStore.setDefaultAccountFor(entry.key, username);
},
onTap: () {}, // TODO: go to managing account
),
],
Divider(),
]
]..removeLast(), // removes trailing Divider
);
},
),
);
}
}

View File

@ -66,15 +66,11 @@ abstract class _AccountsStore with Store {
return tokens[userTag[1]][userTag[0]];
}
User defaultUserFor(String instanceUrl) => Computed(() {
var userTag = _defaultAccounts[instanceUrl].split('@');
return users[userTag[1]][userTag[0]];
}).value;
User defaultUserFor(String instanceUrl) =>
Computed(() => users[instanceUrl][_defaultAccounts[instanceUrl]]).value;
Jwt defaultTokenFor(String instanceUrl) => Computed(() {
var userTag = _defaultAccounts[instanceUrl].split('@');
return tokens[userTag[1]][userTag[0]];
}).value;
Jwt defaultTokenFor(String instanceUrl) =>
Computed(() => tokens[instanceUrl][_defaultAccounts[instanceUrl]]).value;
@action
void setDefaultAccount(String instanceUrl, String username) {