异常:Dart 使用异常来处理运行时错误和程序异常情况。异常可以通过 throw 关键字明确地抛出,也可以通过内置函数和方法暗地里抛出。
try { // 可能会抛出异常的代码 throw Exception('An error occurred'); } catch (e) { print('Caught exception: $e'); }on 子句
try { // 可能会抛出异常的代码 } on Exception catch (e) { print('Exception caught: $e'); } catch (e) { print('Unknown error: $e'); }finally 最终块
try { // 可能会抛出异常的代码 } catch (e) { print('Exception caught: $e'); } finally { print('Cleanup tasks'); }throw 抛出关键字
void depositMoney(double amount) { if (amount <= 0) { throw ArgumentError('Amount must be greater than zero'); } // 存款逻辑 }
fetchUserData().then((data) { // 处理成功的结果 }).catchError((error) { // 处理错误 print('Error fetching user data: $error'); });async 异步 / await 等待
Future<void> fetchData() async { try { // 可能会抛出异常的异步代码 var data = await fetchDataFromServer(); // 处理数据 } catch (e) { // 处理错误 print('Error fetching data: $e'); } }stream 流错误处理
stream.listen( (data) { // 处理数据 }, onError: (error) { // 处理错误 print('Error in stream: $error'); }, onDone: () { // 流关闭 }, );全局错误处理
import 'package:flutter/material.dart'; void main() { FlutterError.onError = (FlutterErrorDetails details) { // 在此处处理错误,例如将错误日志发送到远程服务器或显示错误信息给用户 print('Flutter Error: ${details.exception}'); print('Stack trace:\n${details.stack}'); }; // 堆代码 duidaima.com // FlutterError.onError 方法应在应用程序的入口点调用(例如 main 函数),以确保它在应用程序运行之前被设置。 runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Error Handling', home: MyHomePage(), ); } } class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Flutter Error Handling'), ), body: Center( child: RaisedButton( child: Text('Trigger Error'), onPressed: () { // 模拟触发错误的场景 throw Exception('This is a sample error.'); }, ), ), ); } }
测试错误情况:编写针对可能出现错误情况的测试用例,以确保你的错误处理机制能够按预期工作。