From cae475674718c823ec800e8f40d4455c7bc21785 Mon Sep 17 00:00:00 2001
From: LittleSheep <littlesheep.code@hotmail.com>
Date: Thu, 5 Dec 2024 00:02:32 +0800
Subject: [PATCH] :iphone: Add a drawer menu button to fix cannot open drawer
 on android

---
 lib/screens/account.dart                 | 7 +++++++
 lib/screens/chat.dart                    | 7 +++++++
 lib/screens/explore.dart                 | 8 ++++++++
 lib/screens/home.dart                    | 7 +++++++
 lib/widgets/navigation/app_scaffold.dart | 3 +++
 5 files changed, 32 insertions(+)

diff --git a/lib/screens/account.dart b/lib/screens/account.dart
index 345911c..1a177f6 100644
--- a/lib/screens/account.dart
+++ b/lib/screens/account.dart
@@ -4,10 +4,12 @@ import 'package:gap/gap.dart';
 import 'package:go_router/go_router.dart';
 import 'package:material_symbols_icons/symbols.dart';
 import 'package:provider/provider.dart';
+import 'package:responsive_framework/responsive_framework.dart';
 import 'package:styled_widget/styled_widget.dart';
 import 'package:surface/providers/userinfo.dart';
 import 'package:surface/widgets/account/account_image.dart';
 import 'package:surface/widgets/dialog.dart';
+import 'package:surface/widgets/navigation/app_scaffold.dart';
 
 class AccountScreen extends StatelessWidget {
   const AccountScreen({super.key});
@@ -18,6 +20,11 @@ class AccountScreen extends StatelessWidget {
 
     return Scaffold(
       appBar: AppBar(
+        leading: ResponsiveBreakpoints.of(context).smallerOrEqualTo(MOBILE)
+            ? DrawerButton(onPressed: () {
+                globalRootScaffoldKey.currentState?.openDrawer();
+              })
+            : null,
         title: Text("screenAccount").tr(),
         actions: [
           IconButton(
diff --git a/lib/screens/chat.dart b/lib/screens/chat.dart
index 1e07cfc..c7b359c 100644
--- a/lib/screens/chat.dart
+++ b/lib/screens/chat.dart
@@ -3,12 +3,14 @@ import 'package:flutter/material.dart';
 import 'package:go_router/go_router.dart';
 import 'package:material_symbols_icons/symbols.dart';
 import 'package:provider/provider.dart';
+import 'package:responsive_framework/responsive_framework.dart';
 import 'package:surface/providers/channel.dart';
 import 'package:surface/providers/user_directory.dart';
 import 'package:surface/types/chat.dart';
 import 'package:surface/widgets/account/account_image.dart';
 import 'package:surface/widgets/dialog.dart';
 import 'package:surface/widgets/loading_indicator.dart';
+import 'package:surface/widgets/navigation/app_scaffold.dart';
 
 class ChatScreen extends StatefulWidget {
   const ChatScreen({super.key});
@@ -65,6 +67,11 @@ class _ChatScreenState extends State<ChatScreen> {
 
     return Scaffold(
       appBar: AppBar(
+        leading: ResponsiveBreakpoints.of(context).smallerOrEqualTo(MOBILE)
+            ? DrawerButton(onPressed: () {
+                globalRootScaffoldKey.currentState?.openDrawer();
+              })
+            : null,
         title: Text('screenChat').tr(),
       ),
       floatingActionButton: FloatingActionButton(
diff --git a/lib/screens/explore.dart b/lib/screens/explore.dart
index 9b0de23..4a058f2 100644
--- a/lib/screens/explore.dart
+++ b/lib/screens/explore.dart
@@ -5,8 +5,10 @@ import 'package:gap/gap.dart';
 import 'package:go_router/go_router.dart';
 import 'package:material_symbols_icons/symbols.dart';
 import 'package:provider/provider.dart';
+import 'package:responsive_framework/responsive_framework.dart';
 import 'package:surface/providers/post.dart';
 import 'package:surface/types/post.dart';
+import 'package:surface/widgets/navigation/app_scaffold.dart';
 import 'package:surface/widgets/post/post_item.dart';
 import 'package:very_good_infinite_list/very_good_infinite_list.dart';
 
@@ -137,6 +139,12 @@ class _ExploreScreenState extends State<ExploreScreen> {
         child: CustomScrollView(
           slivers: [
             SliverAppBar(
+              leading:
+                  ResponsiveBreakpoints.of(context).smallerOrEqualTo(MOBILE)
+                      ? DrawerButton(onPressed: () {
+                          globalRootScaffoldKey.currentState?.openDrawer();
+                        })
+                      : null,
               title: Text('screenExplore').tr(),
               floating: true,
               snap: true,
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index dd0c9b7..70d3134 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -6,12 +6,14 @@ import 'package:gap/gap.dart';
 import 'package:google_fonts/google_fonts.dart';
 import 'package:material_symbols_icons/symbols.dart';
 import 'package:provider/provider.dart';
+import 'package:responsive_framework/responsive_framework.dart';
 import 'package:styled_widget/styled_widget.dart';
 import 'package:flutter/material.dart';
 import 'package:surface/providers/sn_network.dart';
 import 'package:surface/providers/userinfo.dart';
 import 'package:surface/types/check_in.dart';
 import 'package:surface/widgets/dialog.dart';
+import 'package:surface/widgets/navigation/app_scaffold.dart';
 
 class HomeScreenDashEntry {
   final String name;
@@ -45,6 +47,11 @@ class _HomeScreenState extends State<HomeScreen> {
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
+        leading: ResponsiveBreakpoints.of(context).smallerOrEqualTo(MOBILE)
+            ? DrawerButton(onPressed: () {
+                globalRootScaffoldKey.currentState?.openDrawer();
+              })
+            : null,
         title: Text("screenHome").tr(),
       ),
       body: LayoutBuilder(
diff --git a/lib/widgets/navigation/app_scaffold.dart b/lib/widgets/navigation/app_scaffold.dart
index 954b8c7..27ce3f4 100644
--- a/lib/widgets/navigation/app_scaffold.dart
+++ b/lib/widgets/navigation/app_scaffold.dart
@@ -10,6 +10,8 @@ import 'package:surface/widgets/navigation/app_bottom_navigation.dart';
 import 'package:surface/widgets/navigation/app_drawer_navigation.dart';
 import 'package:surface/widgets/navigation/app_rail_navigation.dart';
 
+final globalRootScaffoldKey = GlobalKey<ScaffoldState>();
+
 class AppPageScaffold extends StatelessWidget {
   final String? title;
   final Widget? body;
@@ -93,6 +95,7 @@ class AppRootScaffold extends StatelessWidget {
     return AppBackground(
       isRoot: true,
       child: Scaffold(
+        key: globalRootScaffoldKey,
         body: Column(
           children: [
             ConnectionIndicator(),