97 lines
3.1 KiB
Dart
97 lines
3.1 KiB
Dart
import 'package:flutter/material.dart';
|
||
import 'package:shared_preferences/shared_preferences.dart';
|
||
import 'profile_setup_screen.dart';
|
||
import 'activity_list_screen.dart';
|
||
|
||
class LoginScreen extends StatefulWidget {
|
||
const LoginScreen({super.key});
|
||
@override
|
||
State<LoginScreen> createState() => _LoginScreenState();
|
||
}
|
||
|
||
class _LoginScreenState extends State<LoginScreen> {
|
||
final _phoneController = TextEditingController();
|
||
final _codeController = TextEditingController();
|
||
bool _codeSent = false;
|
||
|
||
void _sendCode() {
|
||
if (_phoneController.text.length == 11) {
|
||
setState(() => _codeSent = true);
|
||
ScaffoldMessenger.of(context).showSnackBar(
|
||
SnackBar(content: Text('验证码已发送(测试码:123456)')),
|
||
);
|
||
}
|
||
}
|
||
|
||
void _login() async {
|
||
if (_codeController.text == '123456') {
|
||
final prefs = await SharedPreferences.getInstance();
|
||
await prefs.setString('auth_token', 'mock_token_${DateTime.now().millisecondsSinceEpoch}');
|
||
await prefs.setString('phone', _phoneController.text);
|
||
final isNewUser = prefs.getString('user_nickname') == null;
|
||
if (mounted) {
|
||
Navigator.pushReplacement(
|
||
context,
|
||
MaterialPageRoute(builder: (_) => isNewUser ? ProfileSetupScreen() : ActivityListScreen()),
|
||
);
|
||
}
|
||
} else {
|
||
ScaffoldMessenger.of(context).showSnackBar(
|
||
SnackBar(content: Text('验证码错误')),
|
||
);
|
||
}
|
||
}
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
return Scaffold(
|
||
backgroundColor: const Color(0xFFFFF8F0),
|
||
appBar: AppBar(title: Text('登录 / 注册')),
|
||
body: Padding(
|
||
padding: EdgeInsets.all(24),
|
||
child: Column(
|
||
mainAxisAlignment: MainAxisAlignment.center,
|
||
children: [
|
||
Text('欢迎使用伴享', style: TextStyle(fontSize: 28, fontWeight: FontWeight.w300)),
|
||
SizedBox(height: 60),
|
||
TextField(
|
||
controller: _phoneController,
|
||
keyboardType: TextInputType.phone,
|
||
maxLength: 11,
|
||
decoration: InputDecoration(
|
||
labelText: '手机号',
|
||
border: OutlineInputBorder(),
|
||
),
|
||
),
|
||
SizedBox(height: 20),
|
||
if (_codeSent) ...[
|
||
TextField(
|
||
controller: _codeController,
|
||
keyboardType: TextInputType.number,
|
||
maxLength: 6,
|
||
decoration: InputDecoration(
|
||
labelText: '验证码',
|
||
border: OutlineInputBorder(),
|
||
),
|
||
),
|
||
SizedBox(height: 20),
|
||
],
|
||
SizedBox(
|
||
width: double.infinity,
|
||
height: 50,
|
||
child: ElevatedButton(
|
||
onPressed: _codeSent ? _login : _sendCode,
|
||
style: ElevatedButton.styleFrom(
|
||
backgroundColor: Color(0xFF333333),
|
||
foregroundColor: Colors.white,
|
||
),
|
||
child: Text(_codeSent ? '登录' : '获取验证码', style: TextStyle(fontSize: 16)),
|
||
),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
);
|
||
}
|
||
}
|