relatica/lib/controls/standard_app_drawer.dart

86 lines
2.6 KiB
Dart
Raw Normal View History

import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import '../globals.dart';
import '../routes.dart';
import '../services/auth_service.dart';
class StandardAppDrawer extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: [
...getIt<AccountsService>().loggedInProfiles.map(
(p) => ListTile(
onTap: () async {
await getIt<AccountsService>().setActiveProfile(p);
if (context.mounted) {
context.pop();
}
},
leading: CircleAvatar(
child: CachedNetworkImage(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),
),
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();
},
),
);
}
}