它不能把请求放得乱七八糟,所以我知道这不是服务器端的问题,我和postman 核实了一下,服务器端工作得很好.

我的原始数据:

enter image description here

我向服务器发送的方法:

  Future<void> addProductType(
      {required String productID,
      required String title,
      required String description,
      required String isAvailable,
      required String status,
      required List<ModelTypeProduct> typeProduct}) async {
    String token = await getToken();


    var _body = <String, dynamic>{
      "title": title,
      "description": description,
      "is_available": isAvailable,
      "status": status,
      "product_types": typeProduct
    };
    print('sss -> ${jsonEncode(_body)}');

    final url = Uri.parse(url.config);

    final response = await http.put(
      url,
      body: jsonEncode(_body),
      headers: {
        'Accept': 'application/json; charset=UTF-8',
        'Authorization': 'Bearer $token',
      },
    );

    if (response.statusCode == 200) {
      print('Hata: ${response.statusCode}');
    } else {
      print('Hata: ${response.statusCode}');
    }
  }

我的日志(log)cat :

enter image description here

我不知道,但我试着这样做,但不幸的是没有成功的寻找最好的方式,我只是写了顶层代码,没有找出为什么不发送.

推荐答案

在这个问题上,我有三个 Select 来try 解决.

如果你确认了服务器端的功能,问题可能会从Flutter 代码抛出,所以你可以判断你的Request Body FormattingHeaders and Authorization,以及Debugging the Request.这就是我解决这个问题的办法.

  1. 请求正文格式: 您应该确认typeProduct列表已被正确序列化.判断 struct 是否与您的服务器预期的匹配.

  2. 标头和授权: 验证您的给定令牌是否有效,以及是否具有更新操作所需的权限.

3.调试请求: 你可以打印URL并在发送之前完成请求,这样如果你有问题,你就可以发现你的问题.

我更新了你的代码,就像贝娄一样,所以你可以试试,

Future<void> addProductType({
  required String productID,
  required String title,
  required String description,
  required String isAvailable,
  required String status,
  required List<ModelTypeProduct> typeProduct,
}) async {
  try {
    String token = await getToken();

    var _body = <String, dynamic>{
      "title": title,
      "description": description,
      "is_available": isAvailable,
      "status": status,
      "product_types": typeProduct.map((product) => product.toJson()).toList(),
    };

    print('Your Request Body: ${jsonEncode(_body)}');

    final url = Uri.parse('http://app.shandizmive.ir/admin/api/v1/products/$productID');

    final response = await http.put(
      url,
      body: jsonEncode(_body),
      headers: {
        'Accept': 'application/json; charset=UTF-8',
        'Authorization': 'Bearer $token',
      },
    );

    print('Ypur Final Request URL: $url');
    print('Print your Response Status Code: ${response.statusCode}');
    print('Response Body: ${response.body}');

    if (response.statusCode == 200) {
      print('Product Updated Successfully');
    } else {
      print('Failed to update this product. Status Code: ${response.statusCode}');
    }
  } catch (error) {
    print('Error: $error');
    // You can findout your exceptions in here.
  }
}

Flutter相关问答推荐

如何将图像从顶部和底部半向外设置为飘动

如何使用底部导航栏修复此导航问题

从底部开始固定,然后使其可拖曳Flutter

摆动如何更改弹出菜单项高亮显示 colored颜色 半径

如何防止onTapCancel由子元素触发?

点击表情符号按钮后,Flutter 文本域文本编辑控制器将文本恢复为原始值

Flutter 块消费者仅对特定的状态属性更改做出react

如何在Date Time类中只显示日期?

如何在 Flutter 中设计像 zomato 应用程序一样的搜索字段?

Flutter中有没有办法区分鼠标左右平移?

Flutter Riverpod 没有捕获 List 的嵌套值变化

即使小部件比Flutter 中的屏幕更宽,也始终显示滚动条

我可以在列表图块下方添加其他小部件吗

Firebase Auth - 有没有办法为新用户预先生成 UID?

Flutter 错误:OutletListModel类型的值不能分配给List类型的变量?

这是使用导航功能处理从一页到另一页的移动的最佳方式

gridview 的所有按钮都应该在Flutter 中适合其父容器

如何在dart中编写多个条件?

Flutter Web Responsiveness 效率不高

Flutter Bloc Todo 示例 - 收听存储库中的单个 todo