2026.6.5 二维码扫码提示问题

master
xufei 2026-06-05 17:00:48 +08:00
parent 547325941a
commit 3269868f83
1 changed files with 54 additions and 0 deletions

View File

@ -30,14 +30,20 @@ class ScanPage extends StatefulWidget {
class _ScanPageState extends State<ScanPage> { class _ScanPageState extends State<ScanPage> {
final MobileScannerController _controller = MobileScannerController(); final MobileScannerController _controller = MobileScannerController();
bool _torchOn = false; bool _torchOn = false;
bool _hasPermission = true; //
@override @override
void initState() { void initState() {
super.initState(); super.initState();
// controller
_controller.addListener(_onControllerStateChange);
} }
@override @override
void dispose() { void dispose() {
_controller.removeListener(_onControllerStateChange); //
_controller.dispose(); _controller.dispose();
super.dispose(); super.dispose();
} }
@ -72,6 +78,27 @@ class _ScanPageState extends State<ScanPage> {
} }
//
void _onControllerStateChange() {
final error = _controller.value.error;
if (error != null && mounted) {
//
if (error.errorCode == MobileScannerErrorCode.permissionDenied) {
setState(() {
_hasPermission = false;
});
print('相机权限被拒绝');
}
} else if (_controller.value.isRunning && mounted) {
//
setState(() {
_hasPermission = true;
});
}
}
// //
void goToFace(Map<String, dynamic> stuInfo) async { void goToFace(Map<String, dynamic> stuInfo) async {
print('navigate to face with $stuInfo'); print('navigate to face with $stuInfo');
@ -234,6 +261,33 @@ class _ScanPageState extends State<ScanPage> {
}, },
), ),
), ),
// -
if (!_hasPermission)
Container(
color: Colors.black,
child: const Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.camera_alt, color: Colors.white, size: 64),
SizedBox(height: 20),
Text(
'需要相机权限才能使用扫码功能',
style: TextStyle(color: Colors.white, fontSize: 16),
),
SizedBox(height: 10),
Text(
'请在设置中允许相机权限',
style: TextStyle(color: Colors.white70, fontSize: 14),
),
],
),
),
),
], ],
), ),
); );