diff --git a/frontend/asset_assistant/lib/pages/login_page.dart b/frontend/asset_assistant/lib/pages/login_page.dart index 27d8890..0dca7a8 100644 --- a/frontend/asset_assistant/lib/pages/login_page.dart +++ b/frontend/asset_assistant/lib/pages/login_page.dart @@ -31,6 +31,9 @@ class _LoginPageState extends State { return; } + // 新增:打印输入的账号密码(注意:生产环境需移除密码日志) + debugPrint('准备登录 - 账号: $account, 密码长度: ${password.length}'); + setState(() { _isLoading = true; }); @@ -45,20 +48,38 @@ class _LoginPageState extends State { // 初始化Dio实例 final dio = Dio(); + // 新增:打印Dio配置信息 + debugPrint( + 'Dio基础配置 - 超时设置: 连接${dio.options.connectTimeout}, 发送${dio.options.sendTimeout}, 接收${dio.options.receiveTimeout}', + ); + + // 准备请求数据 + final requestData = {'account': account, 'password': password}; + // 新增:打印请求参数 + debugPrint('请求参数: $requestData'); + + // 准备请求头 + final requestHeaders = {'Content-Type': 'application/json'}; + // 新增:打印请求头 + debugPrint('请求头: $requestHeaders'); + // 发送POST请求 + debugPrint('开始发送登录请求...'); final response = await dio.post( url, - data: {'account': account, 'password': password}, + data: requestData, options: Options( - headers: {'Content-Type': 'application/json'}, + headers: requestHeaders, responseType: ResponseType.json, ), ); + // 新增:请求发送成功的日志 + debugPrint('请求发送成功,开始处理响应'); + // 解析响应 if (response.statusCode == 200) { final result = response.data; - // 打印后端返回的完整数据,确认code和状态 debugPrint('登录响应:$result'); if (result['success'] == true) { @@ -66,10 +87,9 @@ class _LoginPageState extends State { // 保存token和用户信息到本地存储 final prefs = await SharedPreferences.getInstance(); - await prefs.setString('user_id', result['data']['user_id']); // 保存用户ID + await prefs.setString('user_id', result['data']['user_id']); debugPrint('保存的用户ID: ${result['data']['user_id']}'); - // 延迟后再检查上下文是否仍有效 if (mounted) { Navigator.pushReplacement( context, @@ -77,20 +97,23 @@ class _LoginPageState extends State { ); } } else { - // 登录失败,显示错误信息 _showDialog('登录失败', result['message'] ?? '未知错误'); } } else { _showDialog('错误', '服务器响应异常: ${response.statusCode}'); - debugPrint('服务器响应异常: ${response.statusCode}'); + debugPrint('服务器响应异常: ${response.statusCode}, 响应内容: ${response.data}'); } } on DioException catch (e) { // 处理Dio异常 String errorMessage = '网络请求失败'; + // 新增:详细的异常类型日志 + debugPrint('Dio异常类型: ${e.type}, 错误代码: ${e.error}'); + if (e.response != null) { errorMessage = '请求失败: ${e.response?.statusCode} - ${e.response?.statusMessage}'; debugPrint('响应数据: ${e.response?.data}'); + debugPrint('响应头: ${e.response?.headers}'); } else if (e.type == DioExceptionType.connectionTimeout) { errorMessage = '连接超时,请检查网络'; } else if (e.type == DioExceptionType.receiveTimeout) { @@ -99,18 +122,31 @@ class _LoginPageState extends State { errorMessage = '发送数据超时'; } else if (e.type == DioExceptionType.connectionError) { errorMessage = '网络连接错误,请检查网络设置'; + // 新增:连接错误时打印详细信息 + debugPrint('连接错误详情: ${e.message}'); + } else if (e.type == DioExceptionType.badCertificate) { + errorMessage = '证书验证失败'; + } else if (e.type == DioExceptionType.cancel) { + errorMessage = '请求已取消'; + } else if (e.type == DioExceptionType.badResponse) { + errorMessage = '服务器返回错误响应'; } _showDialog('错误', errorMessage); debugPrint('详细错误信息: ${e.toString()}'); + // 新增:打印堆栈跟踪 + debugPrint('错误堆栈: ${e.stackTrace}'); } catch (e) { _showDialog('错误', '发生未知错误: $e'); debugPrint('详细错误信息: ${e.toString()}'); + // 新增:打印未知错误的类型 + debugPrint('未知错误类型: ${e.runtimeType}'); } finally { if (mounted) { setState(() { _isLoading = false; }); + debugPrint('登录流程结束,加载状态已重置'); } } }