(Flutter)登录页面
CODE
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_login/flutter_login.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
return runApp(MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: MyHomePage(),
theme: ThemeData(
primarySwatch: Colors.deepPurple,
),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Future<String?> onLogin(LoginData data) async {
final prefs = await SharedPreferences.getInstance();
final usersJson = prefs.getString('users');
if (usersJson == null) return 'User not found';
final List<dynamic> users = jsonDecode(usersJson);
final user = users.firstWhere(
(u) => u['username'] == data.name,
orElse: () => null,
);
if (user == null) return 'User not found';
if (user['password'] != data.password) return 'Wrong password';
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => SuccessPage()),
);
return null;
}
Future<String?> signup(SignupData data) async {
final prefs = await SharedPreferences.getInstance();
final usersJson = prefs.getString('users');
final List<dynamic> users = usersJson != null ? jsonDecode(usersJson) : [];
final exists = users.any((u) => u['name'] == data.name);
if (exists) return 'Username already exists';
users.add({
'name': data.name,
'password': data.password,
});
await prefs.setString('users', jsonEncode(users));
// 添加注册成功后自动跳转到登录页面
WidgetsBinding.instance.addPostFrameCallback((_) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => MyHomePage()),
);
});
return null;
}
Future<String?> onRecoverPassword(String email) {
return Future.value('Password reset not supported');
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: FlutterLogin(
onLogin: onLogin,
onSignup: signup,
onRecoverPassword: onRecoverPassword,
loginProviders: [],
// 添加注册完成后的提示信息
messages: LoginMessages(
signUpSuccess: "注册成功,已返回登录页面",
),
),
);
}
}
class SuccessPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Welcome'),
actions: [
IconButton(
icon: Icon(Icons.exit_to_app),
onPressed: () {
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => MyHomePage()),
);
},
),
],
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Login Successful!',
style: Theme.of(context).textTheme.headline4,
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => MyHomePage()),
);
},
child: Text('退出登录'),
),
],
),
),
);
}
}
预览


实现了什么
- 注册账号,账号储存在本地,注册完成跳转回主页面
- 登录,与本地账号比对
- 登录成功跳转到主页面
License:
CC BY 4.0