import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../../providers/auth_provider.dart'; import '../../../core/constants/route_constants.dart'; import '../../widgets/common/app_button.dart'; import '../../widgets/common/app_text_field.dart'; import '../../widgets/common/loading_indicator.dart'; class LoginScreen extends StatefulWidget { final VoidCallback? onSuccess; const LoginScreen({super.key, this.onSuccess}); @override State createState() => _LoginScreenState(); } class _LoginScreenState extends State { final _formKey = GlobalKey(); final _emailController = TextEditingController(text: 'test@example.com'); final _passwordController = TextEditingController(text: '123456'); @override void dispose() { _emailController.dispose(); _passwordController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { final authProvider = Provider.of(context); return Scaffold( appBar: AppBar( title: const Text('登录'), ), body: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(24.0), child: Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox(height: 40), const Center( child: Text( '欢迎回来', style: TextStyle( fontSize: 28, fontWeight: FontWeight.bold, ), ), ), const SizedBox(height: 8), const Center( child: Text( '请输入您的账号信息', style: TextStyle( fontSize: 16, color: Colors.grey, ), ), ), const SizedBox(height: 40), AppTextField( controller: _emailController, // 改为username labelText: '用户名', hintText: '请输入用户名', prefixIcon: const Icon(Icons.person_outline), validator: (value) { if (value == null || value.isEmpty) { return '请输入用户名'; } return null; }, ), const SizedBox(height: 20), AppTextField( controller: _passwordController, labelText: '密码', hintText: '请输入密码', obscureText: true, prefixIcon: const Icon(Icons.lock_outline), validator: (value) { if (value == null || value.isEmpty) { return '请输入密码'; } if (value.length < 6) { return '密码至少需要6位字符'; } return null; }, ), const SizedBox(height: 30), if (authProvider.error != null) Padding( padding: const EdgeInsets.only(bottom: 16), child: Text( authProvider.error!, style: const TextStyle( color: Colors.red, fontSize: 14, ), ), ), if (authProvider.isLoading) const LoadingIndicator() else AppButton( text: '登录', onPressed: () async { if (_formKey.currentState!.validate()) { await authProvider.login( _emailController.text.trim(), _passwordController.text, ); if (authProvider.isAuthenticated) { widget.onSuccess?.call(); Navigator.of(context).pushReplacementNamed(RouteConstants.home); } } }, ), const SizedBox(height: 20), Center( child: TextButton( onPressed: () { Navigator.of(context).pushNamed(RouteConstants.register); }, child: const Text( '还没有账号?立即注册', style: TextStyle( fontSize: 14, color: Colors.blue, ), ), ), ), const SizedBox(height: 30), const Row( children: [ Expanded(child: Divider()), Padding( padding: EdgeInsets.symmetric(horizontal: 16), child: Text('或'), ), Expanded(child: Divider()), ], ), const SizedBox(height: 20), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ IconButton( onPressed: () {}, icon: Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: Colors.grey[100], borderRadius: BorderRadius.circular(50), ), child: const Icon(Icons.wechat, color: Colors.green), ), ), IconButton( onPressed: () {}, icon: Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: Colors.grey[100], borderRadius: BorderRadius.circular(50), ), child: const Icon(Icons.wechat, color: Colors.blue), ), ), ], ), ], ), ), ), ), ); } }