Compare commits

..

2 Commits

Author SHA1 Message Date
JingChiang
a07d69f1ab feat: 實作登出
點擊登出按鈕後刪除share preference 資料及跳轉回登入畫面
2024-09-03 00:04:53 +08:00
JingChiang
b0ef478e99 feat: 新增自動登入功能
利用share perference 套件儲存使用者資料
在開啟時自動尋找是否有儲存及登入後儲存資料進share preference
2024-09-03 00:02:38 +08:00
3 changed files with 45 additions and 1 deletions

View File

@ -1,5 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:persistent_bottom_nav_bar_v2/persistent_bottom_nav_bar_v2.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:topic/BottomNavBar.dart'; import 'package:topic/BottomNavBar.dart';
import 'package:topic/main.dart'; import 'package:topic/main.dart';
import 'package:topic/HomePage.dart'; import 'package:topic/HomePage.dart';
@ -109,6 +111,19 @@ class _PersonalInfoState extends State<PersonalInfo> {
} }
} }
void _loginOut() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
// remove all data in share preference(user data which save to identify user or others)
prefs.clear();
// navbar router setting
// replace screen with LoginPage and without navbar
pushReplacementWithoutNavBar(
context,
MaterialPageRoute(
builder: (context) => LoginPage(),
));
}
// //
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -208,7 +223,9 @@ class _PersonalInfoState extends State<PersonalInfo> {
width: 60, width: 60,
), ),
ElevatedButton( ElevatedButton(
onPressed: () {}, onPressed: () {
_loginOut();
},
child: Text('登出'), child: Text('登出'),
style: TextButton.styleFrom( style: TextButton.styleFrom(
backgroundColor: Color(0xFFF5E3C3), backgroundColor: Color(0xFFF5E3C3),

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:topic/HomePage.dart'; import 'package:topic/HomePage.dart';
import 'package:mysql_client/mysql_client.dart'; import 'package:mysql_client/mysql_client.dart';
import 'package:topic/RegisterPage.dart'; import 'package:topic/RegisterPage.dart';
@ -22,6 +23,7 @@ class _LoginPageState extends State<LoginPage> {
void initState() {// void initState() {//
super.initState(); super.initState();
_fetchData();// _fetchData();//
_CheckPreLoginInfo();//
} }
void _fetchData() async { void _fetchData() async {
@ -40,6 +42,29 @@ class _LoginPageState extends State<LoginPage> {
await conn.connect(); await conn.connect();
} }
void _CheckPreLoginInfo() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
//get user data from share preference else set empty to check not login before
String loginUserEmail = prefs.getString("email") ?? "";
//replace screen to HomePage if there are previous data in share preference
if(loginUserEmail != ""){
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomePage(
email: loginUserEmail,
),
),
);
}
}
void _setLoginInfo(String email) async{
//save user email into share preference to let app can auto login next open
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString("email", email);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
debugPaintSizeEnabled=false; debugPaintSizeEnabled=false;
@ -180,6 +205,7 @@ class _LoginPageState extends State<LoginPage> {
_emailController.clear(); _emailController.clear();
_ageController.clear(); _ageController.clear();
// //
_setLoginInfo(email);
Navigator.pushReplacement( Navigator.pushReplacement(
context, context,
MaterialPageRoute( MaterialPageRoute(

View File

@ -41,6 +41,7 @@ dependencies:
http: ^1.2.2 http: ^1.2.2
webview_flutter: ^4.8.0 webview_flutter: ^4.8.0
persistent_bottom_nav_bar_v2: ^5.3.0 persistent_bottom_nav_bar_v2: ^5.3.0
shared_preferences: ^2.2.3
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: