Files
conti-retail-app/packages/native_scan/example/lib/main.dart
T
2026-08-17 15:29:55 +08:00

71 lines
1.9 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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<ExampleApp> createState() => _ExampleAppState();
}
class _ExampleAppState extends State<ExampleApp> {
final NativeScan _scan = NativeScan();
String _result = '未扫码';
Future<void> _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: <Widget>[
Text(_result),
const SizedBox(height: 16),
FilledButton(
onPressed: () {
unawaited(_startScan());
},
child: const Text('扫码'),
),
],
),
),
),
);
}
}