relatica/lib/controls/standard_app_drawer.dart

124 wiersze
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
? const TextStyle(fontWeight: FontWeight.bold)
: null,
),
subtitle: Text(
p.serverName,
style: p == getIt<AccountsService>().currentProfile
? const 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();
},
),
);
}
}