精选文章

Flutter 二维码

2024-11-22 · 组件

二维码通常包含两部分:扫描展示。下面分别用 qr_code_scannerpretty_qr_code 给出完整范式。

0. 依赖

dependencies:
  qr_code_scanner: ^1.0.1
  pretty_qr_code: ^3.0.0

1. 扫码组件

class QRScanPage extends StatefulWidget {
  const QRScanPage({super.key});

  @override
  State<QRScanPage> createState() => _QRScanPageState();
}

class _QRScanPageState extends State<QRScanPage> {
  final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
  QRViewController? controller;

  @override
  void dispose() {
    controller?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: QRView(
        key: qrKey,
        onQRViewCreated: (c) {
          controller = c;
          controller!.scannedDataStream.listen((scanData) {
            // 处理结果
+            controller?.pauseCamera();
+            Navigator.pop(context, scanData.code);
          });
        },
      ),
    );
  }
}

2. 展示二维码

PrettyQrView.data(
  data: 'https://example.com',
  decoration: const PrettyQrDecoration(
    shape: PrettyQrSmoothSymbol(color: Colors.black),
  ),
)

3. 常见坑点

  • 未释放控制器:必须 dispose
  • 相机权限未配置:iOS/Android 会崩溃
  • 扫码多次触发:记得暂停相机

4. 实践清单

  • 扫码后暂停相机
  • 关闭页面前释放控制器
  • 统一结果处理

JJ

作者简介

专注于内容创作、产品策略与设计实践。欢迎交流合作。

上一篇 下一篇