Flutter中如何向回调函数传递int类型参数?
Flutter 回调函数传参解决方案
核心实现逻辑:先明确定义回调的参数类型,再在触发回调时传入目标参数,最后在接收方的函数中声明对应参数接收即可。
1. 修改 block.dart 文件
- 将
myCallback的类型从无参Function改为接收1个int参数的Function(int) - 触发
onTap事件时调用回调并传入目标参数(示例为12)
修改后完整代码:
import 'package:flutter/material.dart'; class Block extends StatelessWidget { // 声明回调接收int类型参数,非空安全版本无需加required final Function(int) myCallback; Block({required this.myCallback}); @override Widget build(BuildContext context) { return Container( margin: EdgeInsets.all(10.0), color: Color(0xFF722662), child: Center( child: GestureDetector( // 触发回调时传入int参数12 onTap: () => myCallback(12), child: Text( 'Button', style: TextStyle( color: Color(0xFFFFFFFF), fontSize: 22.0, ), ), ), ), ); } }
可选兼容空回调的写法
如果允许myCallback为空不传,可以调整为以下写法:
// 声明可空的带参回调 final Function(int)? myCallback; // 构造函数去掉required Block({this.myCallback}); // 调用时判空后再执行 onTap: () => myCallback?.call(12),
2. 修改 main.dart 文件
- 给
whatToDo函数添加int类型参数,用来接收回调传递过来的值
修改后完整代码:
import 'package:flutter/material.dart'; import 'block.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: MainBlock(), ); } } class MainBlock extends StatefulWidget { @override _MainBlockState createState() => _MainBlockState(); } class _MainBlockState extends State<MainBlock> { // 添加int参数接收回调传递的值 void whatToDo(int value) { print(value); // 点击按钮后控制台输出结果为12 } @override Widget build(BuildContext context) { return Scaffold( body: Container( margin: EdgeInsets.all(30.0), color: Color(0xFF122C39), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Expanded( child: Block( myCallback: whatToDo, ), ), ], ), ), ); } }
内容的提问来源于stack exchange,提问作者Penumbra
相关产品推荐
相关产品推荐

