首页 > 解决方案 > Flutter:如何存储或保存用户点击的按钮的值?

问题描述

我做了一个带有 4 个按钮选项的测验问题。

我在一页上显示了几个问题。测验页面示例

现在如何存储或保存用户在传递 POST 请求 API 的值之前单击的每个按钮的值。

目前我知道要做的就是保存用户点击的最新值。

顺便说一句,我是编码和颤振的新手。希望你们能帮助我。

这是我做的代码

                List<dynamic> sent;

                                        CustomCheckBoxGroup(
                                          buttonValuesList: [
                                            [
                                              snapshot.data.result[index].id,
                                              snapshot.data.result[index]
                                                  .options[0].id
                                            ],
                                            [
                                              snapshot.data.result[index].id,
                                              snapshot.data.result[index]
                                                  .options[1].id
                                            ],
                                            [
                                              snapshot.data.result[index].id,
                                              snapshot.data.result[index]
                                                  .options[2].id
                                            ],
                                            [
                                              snapshot.data.result[index].id,
                                              snapshot.data.result[index]
                                                  .options[3].id
                                            ],
                                          ],
                                          buttonLables: [
                                            snapshot.data.result[index]
                                                .options[0].option,
                                            snapshot.data.result[index]
                                                .options[1].option,
                                            snapshot.data.result[index]
                                                .options[2].option,
                                            snapshot.data.result[index]
                                                .options[3].option,
                                          ],
                                          checkBoxButtonValues: (values) {
                                            sent=values;
                                            print(values);
                                          },
                                          selectedColor: Colors.orange,
                                          unSelectedColor: Colors.white70,
                                          horizontal: true,
                                        ),

我想为 POST API 发送数组中的值

像这样

{
    "data":[{"question_id":1,"option_id":2},{"question_id":2,"option_id":6}]
}

虽然这是我为 post API 所做的

  Future<Sent> saveAnswer() async {
    setState(() {
      _isloading = true;
    });

    // var data = {"question_id": sent[0][0], "option_id": sent[0][1]};
    Map<String, List<Map<String, int>>> data = {
      "data": [
        {"question_id": sent[0][0], "option_id": sent[0][1]},
        {"question_id": sent[0][0], "option_id": sent[0][1]},
      ]
    };

    var url = await Network().link("/exercise/1/saveAnswer");
    SharedPreferences localStorage = await SharedPreferences.getInstance();
    final token = jsonDecode(localStorage.getString('token'));
    http.Response response =
        await http.post(Uri.parse(url), body: json.encode(data), headers: {
      'Content-type': 'application/json',
      'Accept': 'application/json',
      'Authorization': 'Bearer $token'
    });
    if (response.statusCode == 200) {
      print(response.body);
      print("Save success");
    } else {
      print(response.body);
      print("Save failed");
    }
  }

如果我单击按钮,这是颤振的响应

我/颤振(4884):[[1, 2]]

我/颤振(4884):[[2, 7]]

[question_id,option_id]

标签: arraysflutterhttp-postcustom-button

解决方案


我认为使用RadioListTile多项选择比手动为每个问题使用 4 个按钮更好。您可以创造性地制作List变量来动态存储问题和答案。


推荐阅读