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

使用Multipart请求作为Http body参数获API成功响应后如何跳转下一个Material页面

问题解决方案

报错根因

你的报错完全是因为jsonResponse变量没有被赋值,全程都是null:

  • 你发送请求后拿到的是StreamedResponse类型的响应对象,没有把响应内容读取解析成JSON并赋值给jsonResponse
  • 直接把null传入DieticianEncBookingIdModel.fromJson方法,方法内部尝试读取["Status"]字段时就触发了空指针错误
  • 额外还有一个参数传值错误:你给请求字段赋值时加了多余的单引号,把变量写成了字符串常量,会导致传给后端的参数完全不对

修改后完整代码

首先确认你已经导入了必要依赖:

import 'dart:convert';
import 'package:http/http.dart' as http;

修改SaveCustomTestBooking方法如下:

Future<void> SaveCustomTestBooking() async {
  var jsonResponse;
  if (EncUserId.isNotEmpty) {
    var postUri = Uri.parse("http://mkklklklklktBooking");
    var request  = http.MultipartRequest('POST',postUri);
    // 去掉多余的单引号,传入实际变量值
    request.fields['VisitDate'] = _selectedDate;
    request.fields['EncUserId'] = EncUserId;

    request.files.add(http.MultipartFile.fromBytes(
        "UserFile", 
        File(image!.path).readAsBytesSync(),
        filename:"Image.jpg",
        contentType: MediaType('image', 'jpg')
    ));

    // 改用await写法避免异步嵌套,逻辑更清晰
    final response = await request.send();
    if (response.statusCode == 200) {
      print("Uploaded!");
      // 读取响应流内容,解析为JSON赋值给jsonResponse
      final respStr = await response.stream.bytesToString();
      jsonResponse = jsonDecode(respStr);
      // 增加mounted判断,防止页面销毁后context失效报错
      if(mounted) {
        Navigator.push(context, MaterialPageRoute(
          builder: (context) => DieticianAfterDateSelectPage(
            rresponse: DieticianEncBookingIdModel.fromJson(jsonResponse)
          )
        ));
      }
    } else {
      if(mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(content: Text("Something went wrong"))
        );
      }
      throw Exception("Failed to fetch");
    }
  }
}

其他注意事项

  • 建议给DieticianEncBookingIdModel.fromJson方法增加空安全判断,避免后端返回字段缺失时再次触发空指针
  • 如果你的后端返回的不是标准JSON格式,需要根据实际返回格式调整解析逻辑
  • 上传大尺寸图片建议改用异步读取方式,避免阻塞UI线程

内容的提问来源于stack exchange,提问作者Toujo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:06:04