Flutter 颤振如何将附加参数传递给函数(BuildContext)回调
我有一个带有回调函数的类Flutter 颤振如何将附加参数传递给函数(BuildContext)回调,flutter,Flutter,我有一个带有回调函数的类 class MyText { final String text; final List<String> variants; final int id; final TextStyle style; final void Function(BuildContext) callback; final bool isWidgetSpan; final String Answer; MyText({ this.text
class MyText {
final String text;
final List<String> variants;
final int id;
final TextStyle style;
final void Function(BuildContext) callback;
final bool isWidgetSpan;
final String Answer;
MyText({
this.text,
this.variants,
this.style,
this.callback,
this.isWidgetSpan,
this.id,
this.Answer
});
}
编译器同意,但是
无法将参数类型“Null Function(BuildContext)”分配给参数类型“void Function(BuildContext,int,String)”
var t=new MyText(
isWidgetSpan:false,
//错误传递回调
回调:(上下文){
_showMyDialog(上下文,100,“示例”);
},
文本:“${element.Name}”,
样式:TextStyle(
颜色:颜色。灰色,
尺寸:20,
));
Future\u showMyDialog(BuildContext上下文、int id、字符串文本)异步{
返回显示对话框(
上下文:上下文,
禁止:错误,
生成器:(BuildContext上下文){
返回警报对话框(
//标题:文本(“”),
内容:SingleChildScrollView(
子:列表体(
儿童:[
升起的按钮(
颜色:颜色。绿色,
按下:()=>{},
子:文本(
“A”,
样式:TextStyle(颜色:Colors.white),
)),
升起的按钮(
颜色:颜色,靛蓝,
按下:()=>{},
子:文本(
“B”,
样式:TextStyle(颜色:Colors.white),
)),
],
),
),
行动:[
文本按钮(
子项:文本('Cancel'),
已按下:(){
Navigator.of(context.pop();
},
),
],
);
},
);
}
您的回调
不接受整数和字符串
callback: (context, anInt, aString) {
_showMyDialog(context, 100, "EXAMPLE" );
},
定义自己的typedef以创建自己的回调函数,并将其用作文本中参数的类型,如我在步骤2中所述 步骤1:
typedef MyDialogueCallback = void Function(
BuildContext context, int index, String data);
步骤2:
class MyText {
final String text;
final List<String> variants;
final int id;
final TextStyle style;
final MyDialogueCallback callback;
final bool isWidgetSpan;
final String Answer;
MyText({
this.text,
this.variants,
this.style,
this.callback,
this.isWidgetSpan,
this.id,
this.Answer
});
}
您需要
(上下文,i,s){…
,而不是(上下文){…
@pskink谢谢!当然,欢迎您
typedef MyDialogueCallback = void Function(
BuildContext context, int index, String data);
class MyText {
final String text;
final List<String> variants;
final int id;
final TextStyle style;
final MyDialogueCallback callback;
final bool isWidgetSpan;
final String Answer;
MyText({
this.text,
this.variants,
this.style,
this.callback,
this.isWidgetSpan,
this.id,
this.Answer
});
}
var t = new MyText(
isWidgetSpan: false,
callback: (context, index, data) {
_showMyDialog(context, 100, "EXAMPLE" );
},
text: "${element.Name} ",
style: TextStyle(
color: Colors.grey,
fontSize: 20,
));