71 lines
1.9 KiB
Dart
71 lines
1.9 KiB
Dart
// 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('扫码'),
|
|||
|
|
),
|
|||
|
|
],
|
|||
|
|
),
|
|||
|
|
),
|
|||
|
|
),
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|