Flutter对接MyFXBook登录API遇类型转换错误求助
问题分析
错误type 'bool' is not a subtype of type 'String'源于API返回字段的类型处理错误,结合MyFXBook登录接口的返回逻辑,具体问题如下:
responseData['success']本身是布尔类型,你却将其转为字符串后赋值给String变量,后续还错误地用字符串和布尔值做比较,既存在逻辑错误也引发了类型不匹配问题error和session是可选返回字段(登录成功时无error,失败时无session),直接声明为非空String会因字段缺失导致类型或空值异常
修复后的代码
import 'dart:convert'; import 'package:http/http.dart' as http; class MyFxbookApi { static const String _baseUrl = 'https://www.myfxbook.com/api/login.json'; Future<bool> login(String email, String password) async { final response = await http.post(Uri.parse(_baseUrl), body: { 'email': email, 'password': password, }); if (response.statusCode == 200) { final Map<String, dynamic> responseData = json.decode(response.body); // 直接获取布尔类型的success字段 final bool success = responseData['success'] as bool; // error和session可能为null,声明为可空字符串 final String? error = responseData['error'] as String?; final String? session = responseData['session'] as String?; if (success) { print('Login successful, session: $session'); return true; } else { print('Login failed, error: $error'); return false; } } else { print('Error occurred, status code: ${response.statusCode}'); return false; } } }
关键修改点
- 移除
success字段的toString()转换,直接以布尔类型获取并作为判断条件 - 将
error和session声明为可空字符串类型(String?),适配接口的可选返回逻辑 - 使用
as明确字段的预期类型,提升代码的类型安全性
内容的提问来源于stack exchange,提问作者Kaweng Mancha
相关产品推荐
相关产品推荐

