// native_scan 的最小演示壳。 // // 只用来手工验证原生实现接没接上:Kotlin / Swift 侧还没写(见 07), // 所以现在点「扫码」必然走到 UNSUPPORTED_PLATFORM 分支——这是预期结果, // 也正好演示了 07 §「OHOS 后续演进」要求的**不静默返回假数据**。 import 'dart:async'; import 'package:flutter/material.dart'; import 'package:native_scan/native_scan.dart'; void main() { runApp(const ExampleApp()); } /// 演示用的根 Widget。 class ExampleApp extends StatefulWidget { /// 构造。 const ExampleApp({super.key}); @override State createState() => _ExampleAppState(); } class _ExampleAppState extends State { final NativeScan _scan = NativeScan(); String _result = '未扫码'; Future _startScan() async { try { final ScanResult result = await _scan.startScan( ScanOptions(mode: ScanMode.barcode, title: '扫描商品条码'), ); if (!mounted) return; setState(() { _result = '${result.value}(${result.durationMs}ms)'; }); } on NativeScanException catch (e) { if (!mounted) return; // 取消不是错误,静默回到原状态即可(07 §使用规则)。 setState(() { _result = e.isCancelled ? '已取消' : '${e.code}: ${e.message}'; }); } } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text('native_scan example')), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text(_result), const SizedBox(height: 16), FilledButton( onPressed: () { unawaited(_startScan()); }, child: const Text('扫码'), ), ], ), ), ), ); } }