在ios中,通常用block或者代理去实现,在flutter中,外部实现一个方法,把这个方法传给按钮,按钮内部用callback接受,ontap方法调用即可,实现如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart';
//定义函数类型 typedef StringValue = void Function(String);
class ImageBtn extends StatelessWidget { //作为属性 StringValue callback;
ImageBtn({Key key,this.callback}) : super(key: key);
@override Widget build(BuildContext context) { return new GestureDetector( onTap: () { print('MyButton was tappedq!'); //调用 this.callback("testString"); }, child: ... ), ); } }
|
外部使用方法
1 2 3 4 5 6 7 8 9 10 11
| //顶部按钮点击事件 void _ontap(String name){ print(name); } //实例对象时传进去 ImageBtn(callback:_ontap)
//另外一种写法,不传参数也可以,仅仅是invoke外部函数, ImageBtn(callback:(){ //do sth... })
|
注意:callback和外部的方法,参数类型要保持一致
总结:外部函数传给按钮,让按钮内部可以调用,通过无参数函数调用有参数也可以