feat: change logout button

This commit is contained in:
Simon Ding
2024-07-17 18:33:50 +08:00
parent 64ce976ce7
commit b691b032b2
3 changed files with 53 additions and 21 deletions

View File

@@ -50,18 +50,41 @@ class MyApp extends StatelessWidget {
IconButton( IconButton(
onPressed: () => context.go(SystemSettingsPage.route), onPressed: () => context.go(SystemSettingsPage.route),
icon: const Icon(Icons.settings)), icon: const Icon(Icons.settings)),
APIs.isLoggedIn FutureBuilder(
? IconButton( future: APIs.isLoggedIn(),
onPressed: () async { builder: (context, snapshot) {
final SharedPreferences prefs = if (snapshot.hasData && snapshot.data == true) {
await SharedPreferences.getInstance(); return MenuAnchor(
await prefs.remove('token'); menuChildren: [
if (context.mounted) { MenuItemButton(
context.go(LoginScreen.route); leadingIcon: const Icon(Icons.exit_to_app),
} child: const Text("登出"),
}, onPressed: () async {
icon: const Icon(Icons.exit_to_app)) final SharedPreferences prefs =
: Container() await SharedPreferences.getInstance();
await prefs.remove('token');
if (context.mounted) {
context.go(LoginScreen.route);
}
},
),
],
builder: (context, controller, child) {
return TextButton(
onPressed: () {
if (controller.isOpen) {
controller.close();
} else {
controller.open();
}
},
child: const Icon(Icons.account_circle),
);
},
);
}
return Container();
})
], ],
), ),
body: Center( body: Center(
@@ -73,7 +96,11 @@ class MyApp extends StatelessWidget {
child: NavDrawer(), child: NavDrawer(),
), ),
const VerticalDivider(thickness: 1, width: 1), const VerticalDivider(thickness: 1, width: 1),
Flexible(flex: 7, child: Padding(padding: const EdgeInsets.all(20),child: child), ) Flexible(
flex: 7,
child:
Padding(padding: const EdgeInsets.all(20), child: child),
)
]))), ]))),
); );
}, },

View File

@@ -44,22 +44,29 @@ class APIs {
static Dio? gDio; static Dio? gDio;
static Map<String, String> authHeaders = {}; static Map<String, String> authHeaders = {};
static bool isLoggedIn = false;
static Future<Dio> getDio() async { static Future<bool> isLoggedIn() async {
if (gDio != null) { return isNotBlank(await getToken());
return gDio!; }
}
static Future<String> getToken() async {
var token = authHeaders["Authorization"]; var token = authHeaders["Authorization"];
if (isBlank(token)) { if (isBlank(token)) {
final SharedPreferences prefs = await SharedPreferences.getInstance(); final SharedPreferences prefs = await SharedPreferences.getInstance();
var t = prefs.getString("token"); var t = prefs.getString("token");
if (isNotBlank(t)) { if (isNotBlank(t)) {
authHeaders["Authorization"] = t!; authHeaders["Authorization"] = t!;
isLoggedIn = true;
token = t; token = t;
} }
} }
return token ?? "";
}
static Future<Dio> getDio() async {
if (gDio != null) {
return gDio!;
}
var token = await getToken();
var dio = Dio(); var dio = Dio();
dio.interceptors.add(InterceptorsWrapper( dio.interceptors.add(InterceptorsWrapper(

View File

@@ -1,8 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:dio/dio.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:ui/providers/APIs.dart'; import 'package:ui/providers/APIs.dart';
import 'package:ui/providers/server_response.dart'; import 'package:ui/providers/server_response.dart';