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,
));