Flutter自定义FormHeader组件如何调整实现按顺序打印指定日志?
问题根因
- 回调类型定义错误:原代码中
onPressed使用VoidCallback类型,该类型是无返回值的同步函数定义,外层的await无法等待异步执行完成,同时函数内抛出的异常也无法被外层try/catch捕获。 - 语法错误:
catch代码块中打印方法写为大写Print,Dart标准控制台打印方法为小写print。 - 执行逻辑不匹配:原代码抛出异常后如果没有正确捕获,会中断后续代码执行,无法打印
third line。
修正后完整代码
自定义FormHeader组件代码
import 'package:flutter/material.dart'; class FormHeader extends StatelessWidget { // 改用支持异步的回调类型,接收返回Future的函数 final Future<void> Function() onPressed; const FormHeader({required this.onPressed, Key? key }) : super(key: key); @override Widget build(BuildContext context) { return ElevatedButton( child: const Text('click me'), onPressed: () async { try{ print('first line'); await this.onPressed(); } catch(e){ // 捕获异常打印异常内容,对应second line输出 print(e); } // 放在try/catch外保证无论是否抛出异常都会执行 print('third line'); } ); } }
主页面调用代码
// 主表单中使用FormHeader FormHeader( onPressed: () async{ await Future.delayed(const Duration(seconds: 5), () => throw Exception("second line")); } )
执行效果说明
点击按钮后会按要求顺序输出:
- 立即打印
first line - 等待5秒后捕获异步回调抛出的异常,打印
Exception: second line - 最后打印
third line
内容的提问来源于stack exchange,提问作者Arman Zahmatkesh
相关产品推荐
相关产品推荐

