mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-19 15:13:31 +00:00
123 lines
3.9 KiB
Dart
123 lines
3.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
import 'package:logging/logging.dart';
|
|
|
|
import '../globals.dart';
|
|
import '../routes.dart';
|
|
import '../services/auth_service.dart';
|
|
import 'login_aware_cached_network_image.dart';
|
|
|
|
class StandardAppDrawer extends StatelessWidget {
|
|
final bool skipPopDismiss;
|
|
|
|
static final _logger = Logger('$StandardAppDrawer');
|
|
|
|
const StandardAppDrawer({
|
|
super.key,
|
|
this.skipPopDismiss = false,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return SafeArea(
|
|
child: Drawer(
|
|
child: ListView(
|
|
padding: EdgeInsets.zero,
|
|
children: [
|
|
...getIt<AccountsService>().loggedInProfiles.map(
|
|
(p) => ListTile(
|
|
onTap: () async {
|
|
await getIt<AccountsService>().setActiveProfile(p);
|
|
if (!skipPopDismiss &&
|
|
context.mounted &&
|
|
context.canPop()) {
|
|
try {
|
|
context.pop();
|
|
} catch (e) {
|
|
context.go(ScreenPaths.timelines);
|
|
_logger.severe(
|
|
'Error trying to close the drawer, going home: $e');
|
|
}
|
|
}
|
|
},
|
|
leading: CircleAvatar(
|
|
child:
|
|
LoginAwareCachedNetworkImage(imageUrl: p.avatar)),
|
|
title: Text(
|
|
p.username,
|
|
style: p == getIt<AccountsService>().currentProfile
|
|
? TextStyle(fontWeight: FontWeight.bold)
|
|
: null,
|
|
),
|
|
subtitle: Text(
|
|
p.serverName,
|
|
style: p == getIt<AccountsService>().currentProfile
|
|
? TextStyle(fontWeight: FontWeight.bold)
|
|
: null,
|
|
),
|
|
),
|
|
),
|
|
buildMenuButton(
|
|
context,
|
|
'Manage Profiles',
|
|
() => context.pushNamed(ScreenPaths.manageProfiles),
|
|
),
|
|
const Divider(),
|
|
buildMenuButton(
|
|
context,
|
|
'Gallery',
|
|
() => context.pushNamed(ScreenPaths.gallery),
|
|
),
|
|
buildMenuButton(
|
|
context,
|
|
'Direct Messages',
|
|
() => context.pushNamed(ScreenPaths.messages),
|
|
),
|
|
const Divider(),
|
|
buildMenuButton(
|
|
context,
|
|
'Blocks',
|
|
() => context.pushNamed(ScreenPaths.blocks),
|
|
),
|
|
buildMenuButton(
|
|
context,
|
|
'Filters',
|
|
() => context.pushNamed(ScreenPaths.filters),
|
|
),
|
|
buildMenuButton(
|
|
context,
|
|
'Groups Management',
|
|
() => context.pushNamed(ScreenPaths.groupManagement),
|
|
),
|
|
buildMenuButton(
|
|
context,
|
|
'Settings',
|
|
() => context.pushNamed(ScreenPaths.settings),
|
|
),
|
|
// TODO Add back in clearing ability but has to do disk caches too
|
|
// buildMenuButton(context, 'Clear Caches', () async {
|
|
// final confirm = await showYesNoDialog(
|
|
// context, 'You want to clear all memory and disk cache data?');
|
|
// if (confirm == true) {
|
|
// clearCaches();
|
|
// }
|
|
// }),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget buildMenuButton(BuildContext context, String title, Function() onTap) {
|
|
return Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: ListTile(
|
|
title: Text(title),
|
|
onTap: () {
|
|
context.pop();
|
|
onTap();
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|