[英]How to pass a function as a parameter in widget?
我創建了一個小部件,我想將 function 傳遞給這個小部件,但是當我嘗試這樣做時,我得到了這個錯誤。
此外,當將此 function 傳遞給小部件時,它會自動使用,因為它調試打印“MONEY CHANGED”。
這是 function 代碼:
class Functions {
changeMoney(int money) {
Boxes.getCharacter().get(0)!.money =
Boxes.getCharacter().get(0)!.money + money;
debugPrint("MONEY CHANGED");
}
}
這是小部件的代碼:
class DialogButton extends StatefulWidget {
const DialogButton(
{Key? key,
required this.answer,
required this.function,
required this.possible})
: super(key: key);
final String answer;
final Function function;
final bool possible;
@override
State<DialogButton> createState() => _DialogButtonState();
}
class _DialogButtonState extends State<DialogButton> {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 6),
child: ElevatedButton(
onPressed: () => {
Navigator.of(context, rootNavigator: true).pop(),
widget.function
},
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 18.0),
child: Row(children: [
Expanded(child: Container()),
Text(
widget.answer,
style: rajdhaniStyle(weight: FontWeight.w600, size: 18),
),
Expanded(child: Container()),
]),
)),
);
}
}
所以問題是我應該如何在小部件內部正確傳遞 function 而不會自動打開 function 並且不會出錯?
如果 function 有參數,那么接收到的小部件(這里是DialogButton
)也需要聲明參數類型。 例如,function 是: void doSomething(String hehe, int yolo) {}
。 然后你的DialogButton
應該被聲明為Function(String, int) onTap
。
更多詳細信息,在第一個屏幕中,您可以像這樣調用DialogButton
:
class Screen1 extends StatelessWidget {
@override
build(...) {
// do something
DialogButton(
answer: "your answer",
function: (double money) {},
possible: true,
)
}
}
否則,如果您想拆分/分離 function(不是像上面那樣直接寫入),您可以執行以下操作:
class Screen1 extends StatelessWidget {
@override
build(...) {
// do something
DialogButton(
answer: "your answer",
function: myFunction,
possible: true,
)
}
myFunction(double money) {}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.