0%

flutter按钮点击事件传给delegate

在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和外部的方法,参数类型要保持一致
总结:外部函数传给按钮,让按钮内部可以调用,通过无参数函数调用有参数也可以