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().loggedInProfiles.map( (p) => ListTile( onTap: () async { await getIt().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().currentProfile ? const TextStyle(fontWeight: FontWeight.bold) : null, ), subtitle: Text( p.serverName, style: p == getIt().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, 'Circles Management', () => context.pushNamed(ScreenPaths.circleManagement), ), 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(); }, ), ); } }