You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"));
  }
)
执行效果说明

点击按钮后会按要求顺序输出:

  1. 立即打印first line
  2. 等待5秒后捕获异步回调抛出的异常,打印Exception: second line
  3. 最后打印third line

内容的提问来源于stack exchange,提问作者Arman Zahmatkesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:27:02