我看了一下,关于 Flutter 的回调和 Android 中的有点区别。所以记录一下,
下面是定义了一个有两个参数的回调:
//定义回调
typedef MyCallBack = Function(String val1, String val2);
//回调监听
class MyCallBackListener {
final MyCallBack myCallBack;
MyCallBackListener({this.myCallBack});
}
设置我收到的回调:
MyCallBackListener(myCallBack: (String val1, String val2) {
print('收到回调:' + 'val1:' + val1 + 'val2:' + val2);
}
没参数的回调可以将上面的 MyCallBack 替换为系统提供的 VoidCallback;也可以直接把上面两个参数去掉;
定义回调并设置回调的完整代码:
import 'package:data_plugin/bmob/response/bmob_error.dart';
import 'package:data_plugin/bmob/response/bmob_saved.dart';
import 'package:data_plugin/bmob/table/bmob_object.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_blbl/utils/toast.dart';
import 'home_page_bean.dart';
class DataBaseUtil {
///保存一条数据
static saveSingle(BmobObject bmobObject,
{bool isShowToast, MyCallBackListener callBackListener}) {
bmobObject.save().then((BmobSaved bmobSaved) {
if (isShowToast) {
showToast('数据保存成功');
//设置回调
callBackListener.myCallBack("参数1", "参数2");
}
}).catchError((e) {
if (isShowToast) {
showToast('数据保存失败:' + BmobError.convert(e).error);
//设置回调
callBackListener.myCallBack("参数1", "参数2");
}
});
}
}
//定义回调
typedef MyCallBack = Function(String val1, String val2);
//回调监听
class MyCallBackListener {
final MyCallBack myCallBack;
MyCallBackListener({this.myCallBack});
}
设置回调并收到回调:
_saveHomeDb() {
HomePageBean homePage = HomePageBean();
homePage.title = "电影剪辑";
homePage.classname = "影视";
homePage.videourl = "https://v-cdn.zjol.com.cn/280443.mp4";
homePage.videoLength = "00:36";
homePage.playnum = '1.4万';
homePage.content = '精彩剪辑内容';
homePage.type = 1;
DataBaseUtil.saveSingle(homePage, isShowToast: true, callBackListener:
MyCallBackListener(myCallBack: (String val1, String val2) {
print('收到回调:' + 'val1:' + val1 + 'val2:' + val2);
}));
}
上面的 saveSingle 方法中参数有 {} 修饰表示参数可以传也可以不传。