Flutter中Try-Catch块无法捕获local_auth插件的错误求助
问题解决:LocalAuth NotAvailable 异常未被捕获
原因分析
当前代码仅捕获PlatformException,但可能存在以下导致异常未被捕获的情况:
- 未正确导入
flutter/services.dart,导致PlatformException类型不匹配,catch块无法识别 - 第三方库对底层异常做了额外包装,导致异常类型偏离预期
修复方案
1. 确保导入正确依赖
在文件顶部添加:
import 'package:flutter/services.dart';
2. 修改异常捕获逻辑
扩大捕获范围,同时针对性处理NotAvailable错误:
TextButton( child: Text('YES'), onPressed: () async { try { final authenticated = await LocalAuth.authenticate(); print(authenticated); if (authenticated) { DatabaseHelper.instance.deleteModel(id as int); Navigator.pop(context); } } on PlatformException catch (e) { print('捕获到平台异常: ${e.code} - ${e.message}'); // 处理NotAvailable场景 if (e.code == 'NotAvailable') { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('请先设置设备密码或PIN码')), ); } } catch (e) { // 兜底捕获所有未匹配的异常 print('捕获到未知异常: $e'); } }, )
关键说明
- 增加兜底
catch (e)可以捕获所有未被PlatformException覆盖的异常类型 - 通过
e.code判断具体错误类型,能实现更精准的业务处理
内容的提问来源于stack exchange,提问作者Laxman Prasad
相关产品推荐
相关产品推荐

