lemmur-app-android/lib/pages/profile_tab.dart

128 lines
4.1 KiB
Dart
Raw Normal View History

import 'package:flutter/cupertino.dart';
2020-08-31 01:04:08 +02:00
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
2020-09-01 13:22:37 +02:00
import 'package:flutter_mobx/flutter_mobx.dart';
2020-09-16 23:15:42 +02:00
import 'package:lemmur/hooks/stores.dart';
2020-08-31 12:05:45 +02:00
import '../util/api_extensions.dart';
import '../util/goto.dart';
import '../widgets/bottom_modal.dart';
2020-08-31 12:05:45 +02:00
import '../widgets/user_profile.dart';
2020-08-31 16:17:39 +02:00
import 'settings.dart';
2020-08-31 01:04:08 +02:00
class UserProfileTab extends HookWidget {
2020-09-01 13:22:37 +02:00
UserProfileTab();
2020-08-31 01:04:08 +02:00
@override
Widget build(BuildContext context) {
2020-09-16 23:22:04 +02:00
final theme = Theme.of(context);
2020-09-16 23:15:42 +02:00
final accountsStore = useAccountsStore();
2020-08-31 01:04:08 +02:00
2020-09-01 13:22:37 +02:00
return Observer(
builder: (ctx) {
2020-09-16 23:15:42 +02:00
if (accountsStore.hasNoAccount) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('No account was added.'),
FlatButton.icon(
onPressed: () {
goTo(context, (_) => AccountsConfigPage());
},
icon: Icon(Icons.add),
label: Text('Add account'),
)
],
),
),
);
}
2020-09-16 23:22:04 +02:00
final user = accountsStore.defaultUser;
2020-09-01 13:22:37 +02:00
return Scaffold(
extendBodyBehindAppBar: true,
appBar: AppBar(
backgroundColor: Colors.transparent,
shadowColor: Colors.transparent,
centerTitle: true,
title: FlatButton(
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'@${user.name}', // TODO: fix overflow issues
style: theme.primaryTextTheme.headline6,
overflow: TextOverflow.fade,
2020-09-01 13:22:37 +02:00
),
Icon(
Icons.expand_more,
color: theme.primaryIconTheme.color,
),
],
),
onPressed: () {
showModalBottomSheet(
context: context,
backgroundColor: Colors.transparent,
builder: (_) {
2020-09-16 23:22:04 +02:00
final userTags = <String>[];
2020-09-16 23:15:42 +02:00
accountsStore.users.forEach((instanceUrl, value) {
value.forEach((username, _) {
userTags.add('$username@$instanceUrl');
});
});
return Observer(
builder: (ctx) {
2020-09-16 23:22:04 +02:00
final user = accountsStore.defaultUser;
final instanceUrl = user.instanceUrl;
return BottomModal(
title: 'account',
child: Column(
children: [
for (final tag in userTags)
RadioListTile<String>(
value: tag,
title: Text(tag),
groupValue: '${user.name}@$instanceUrl',
onChanged: (selected) {
2020-09-16 23:22:04 +02:00
final userTag = selected.split('@');
2020-09-16 23:15:42 +02:00
accountsStore.setDefaultAccount(
userTag[1], userTag[0]);
Navigator.of(ctx).pop();
},
)
],
),
);
},
);
},
);
},
2020-09-01 13:22:37 +02:00
),
actions: [
IconButton(
2020-09-03 23:18:48 +02:00
icon: Icon(Icons.settings),
2020-09-01 13:22:37 +02:00
onPressed: () {
goTo(context, (_) => SettingsPage());
2020-09-01 13:22:37 +02:00
},
)
],
),
2020-09-01 13:22:37 +02:00
body: UserProfile(
userId: user.id,
instanceUrl: user.instanceUrl,
2020-09-01 13:22:37 +02:00
),
);
},
2020-08-31 01:04:08 +02:00
);
}
}