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

Flutter扫码器未扫码退出时触发Class 'int'无[]方法运行时错误

解决Flutter扫码取消时的运行时错误

错误原因

当用户未扫码就点击Stop按钮或按下返回键时,flutter_barcode_scanner的scanBarcode()方法会返回字符串"-1"。你的代码直接对这个字符串执行jsonDecode(),得到的是int类型的-1,之后尝试调用info["regNo"](对int类型使用字典访问符),就会触发Class 'int' has no instance method '[]'的错误。

解决方案

需要在代码中增加两个关键判断:

  • 先检查返回结果是否为取消标识"-1",如果是则直接结束流程
  • 对JSON解析过程增加异常捕获,避免扫码到非JSON内容时崩溃

修改后的完整代码:

class homePage extends StatelessWidget {
  const homePage({super.key});

  Future scanQRCode(BuildContext context) async {
    var res = await FlutterBarcodeScanner.scanBarcode(
        '#ff6666', "Stop", true, ScanMode.QR);
    
    // 判断是否为取消扫码的情况
    if (res == "-1") {
      return; // 直接终止,不执行后续逻辑
    }

    try {
      // 捕获JSON解析异常
      var info = jsonDecode(res);
      // 额外判断info是否为Map类型,确保可以通过key访问
      if (info is Map) {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => Details(
              regNo: info["regNo"].toString(),
              event: info["slug"].toString(),
            ),
          ),
        );
      } else {
        // 处理非Map类型的JSON(不符合预期的情况)
        ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text("扫码内容格式不正确")),
        );
      }
    } catch (e) {
      // 解析失败时提示用户
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text("无法解析扫码内容")),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    var vertical = MediaQuery.of(context).size.height;
    return Center(
      child: ElevatedButton(
        onPressed: () {
          scanQRCode(context);
        },
        style: ElevatedButton.styleFrom(backgroundColor: Colors.redAccent[700]),
        child: Text(
          "Scan",
          style: TextStyle(fontSize: vertical * 0.03),
        ),
      ),
    );
  }
}

关键说明

  • 取消扫码判断:直接对比返回值是否为"-1",这是flutter_barcode_scanner约定的取消标识
  • 异常捕获:用try-catch包裹jsonDecode,避免非法JSON导致崩溃
  • 类型检查:增加info is Map判断,确保后续可以安全使用key访问属性,同时给用户友好的错误提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:15:15