You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter对接MyFXBook登录API遇类型转换错误求助

问题分析

错误type 'bool' is not a subtype of type 'String'源于API返回字段的类型处理错误,结合MyFXBook登录接口的返回逻辑,具体问题如下:

  1. responseData['success']本身是布尔类型,你却将其转为字符串后赋值给String变量,后续还错误地用字符串和布尔值做比较,既存在逻辑错误也引发了类型不匹配问题
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:07:47