无法在颤振中将 MAP 值发布到 https 发布

时间:2021-07-10 15:30:47

标签: json flutter http dart

我创建了一个单独的类,它是我的模型类,并且有一个发布到 DISCORD WEB HOOK 的功能。我正在从 FORM UI 屏幕将地图值设置为 true。 textformfield 值被发布,而 MAP 给出如下错误,只是 textfield 值被发布并且工作正常,但 MAP 不起作用。我写的 JSON 不好吗?

P.S 这是一个不和谐的钩子,所以“内容”是必要的

I/flutter (26346): {"content": ["Could not interpret \"['testing options', {'Spot': True, 'Red': True, 'Thich': False, 'Dry': True, 'Strech': False}]\" as string."]}

这是类的代码

import 'dart:convert';

import 'package:http/http.dart';

class DataPush {
  static const String Spot = 'Spot';
  static const String Red = 'Red';
  static const String Thick = 'Thich';
  static const String Dry = 'Dry';
  static const String Strech = 'Strech';

  String firstName = '';
  Map<String, bool> passions = {
    Spot: false,
    Red: false,
    Thick: false,
    Dry: false,
    Strech: false,
  };
  save() {
    print("Saved");
  }

  makePostRequest() async {
    final uri = Uri.parse(
        'MY DISCORD WEBHOOK URL');
    final header = {'Content-Type': 'application/json'};
    Map<String, dynamic> body = {
      "content": [firstName, passions]
    };
    String jsonBody = json.encode(body);

    Response response = await post(
      uri,
      headers: header,
      body: jsonBody,
    );

    int statusCode = response.statusCode;
    String responseBody = response.body;

    print(statusCode);
    print(responseBody);
  }
}

2 个答案:

答案 0 :(得分:0)

去掉这一行,直接把Map传给post函数。

String jsonBody = json.encode(body);

答案 1 :(得分:0)

Discord webhook 文档将 content 字段指定为字符串,但您发送的是一个数组作为该字段的值 - 如果您真的想在 content 字段中发送一个数组,您'需要先将其编码为 json 字符串本身。

makePostRequest() async {
  final uri = Uri.parse(
      'MY DISCORD WEBHOOK URL');
  final header = {'Content-Type': 'application/json'};
  Map<String, dynamic> body = {
    "content": json.encode([firstName, passions]) // Change this line
  };
  String jsonBody = json.encode(body);

  Response response = await post(
    uri,
    headers: header,
    body: jsonBody,
  );

  int statusCode = response.statusCode;
  String responseBody = response.body;

  print(statusCode);
  print(responseBody);
}