2026.6.5 二维码扫码提示问题
parent
547325941a
commit
3269868f83
|
|
@ -30,14 +30,20 @@ class ScanPage extends StatefulWidget {
|
|||
class _ScanPageState extends State<ScanPage> {
|
||||
final MobileScannerController _controller = MobileScannerController();
|
||||
bool _torchOn = false;
|
||||
bool _hasPermission = true; // 默认有权限
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
// 监听 controller 的状态变化
|
||||
_controller.addListener(_onControllerStateChange);
|
||||
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_controller.removeListener(_onControllerStateChange); // 移除监听
|
||||
_controller.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 {
|
||||
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),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
|
||||
],
|
||||
),
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in New Issue