feat: 新增自動登入功能

利用share perference 套件儲存使用者資料
在開啟時自動尋找是否有儲存及登入後儲存資料進share preference
This commit is contained in:
JingChiang
2024-09-03 00:02:38 +08:00
parent 73e0f8f04c
commit b0ef478e99
2 changed files with 27 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:topic/HomePage.dart';
import 'package:mysql_client/mysql_client.dart';
import 'package:topic/RegisterPage.dart';
@@ -22,6 +23,7 @@ class _LoginPageState extends State<LoginPage> {
void initState() {//初始化
super.initState();
_fetchData();//連資料庫
_CheckPreLoginInfo();//確定有先前有無登入
}
void _fetchData() async {
@@ -40,6 +42,29 @@ class _LoginPageState extends State<LoginPage> {
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
Widget build(BuildContext context) {
debugPaintSizeEnabled=false;
@@ -180,6 +205,7 @@ class _LoginPageState extends State<LoginPage> {
_emailController.clear();
_ageController.clear();
// 如果找到匹配的帳號,登入成功,跳轉到主頁
_setLoginInfo(email);
Navigator.pushReplacement(
context,
MaterialPageRoute(