banxiang/lib/screens/login_screen.dart
2026-02-17 16:10:18 +08:00

97 lines
3.1 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)),
),
),
],
),
),
);
}
}