我怎么能通过变量id到第二个屏幕Flutter

5w9g7ksd  于 2023-03-31  发布在  Flutter
关注(0)|答案(2)|浏览(125)

我有两个页面,我想在第二个屏幕中使用“id”变量从API获取数据。
我该怎么办?
屏幕1:这是一个包含卡列表的屏幕,每张卡上都有一个进入详细信息页面的按钮(第二个屏幕)
屏幕二:我按id显示这个用户的数据
注意:当我发送它时,我总是得到一个500内部服务器错误,因为ID没有发送,但是如果我直接在Future中的代码中写入ID,数据就会出现。
屏幕一

TextButton(
                            onPressed: () {
                              Navigator.push(
                                context,
                                MaterialPageRoute(
                                    builder: (context) => DetailAbsensi(
                                id: " ${data[index].idKelasKuliah}",
                              ),
                                ),
                              );
                            },
                            style: TextButton.styleFrom(
                              backgroundColor: const Color(0xffC9F7F5),
                              shape: RoundedRectangleBorder(
                                borderRadius: BorderRadius.circular(8),
                              ),
                            ),
                            child: Text(
                              "Absensi",
                              style: bold5.copyWith(
                                color: const Color(
                                  0xff1BC5BD,
                                ),
                              ),
                            ),
                          ),

屏幕二

const DetailAbsensi({
    super.key,
    this.id = '',
  });
  final String id;

500内部服务器错误

Widget headerDetail() {
    return FutureBuilder<ModelAbsensi>(
      future: AbsensiProvider().getAbsensi(id), // not work error 500 internal server error
      builder: (context, snapshot) {
        print('ini adalah $id');
        if (snapshot.hasData) {

工作

Widget headerDetail() {
    return FutureBuilder<ModelAbsensi>(
      future:
          AbsensiProvider().getAbsensi('e4d783cd-80a7-4419-9a81-e31e607afba8'), // work
      builder: (context, snapshot) {
        print('ini adalah $id');

提取ID

Future<ModelAbsensi> getAbsensi(String id) async {
    String url = Constant.baseURL;
    String token = await UtilSharedPreferences.getToken();
    final response = await http.get(
      Uri.parse(
        '$url/auth/mhs_siakad/absensi_perkuliahan?id_kelas_kuliah=$id',
      ),
      headers: {
        'Authorization': 'Bearer $token',
      },
    );

    print(response.statusCode);
    print(response.body);
    if (response.statusCode == 200) {
      return ModelAbsensi.fromJson(jsonDecode(response.body));
    } else {
      throw Exception();
    }
  }

ID已发送,但当您希望基于ID获取API时,发生错误

wtlkbnrh

wtlkbnrh1#

请注意“和$之间的空格,尝试将其删除

Navigator.push(
    context,
    MaterialPageRoute(
        builder: (context) => DetailAbsensi(
            id: " ${data[index].idKelasKuliah}", // Note the space between the " and the $
        ),
    ),
);
rt4zxlrg

rt4zxlrg2#

你有一个额外的空间之前,你正在传递的id ...尝试一次删除。

相关问题