relatica/lib/controls/standard_app_drawer.dart

90 wiersze
2.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import '../globals.dart';
import '../routes.dart';
import '../services/auth_service.dart';
import 'login_aware_cached_network_image.dart';
class StandardAppDrawer extends StatelessWidget {
@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 (context.mounted && context.canPop()) {
context.pop();
}
},
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),
),
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();
},
),
);
}
}