我有一个名为ApiWidget
的类,它接受一个child
,这个子类将包含onPressed
,例如,一个ElevatedButton
。
我想在这个类中显示这个onPressed
类型的子小部件,但是我想在按下该按钮时执行一些操作。我怎么能这么做?我认为provider
在这里不合适。
换句话说,我只想使用子按钮(用于外观),但我只想在这个类中执行操作。
class ApiWidget extends StatelessWidget {
final Widget child;
ApiWidget(this.child);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {}, // I want to perform some operation here when this child is pressed.
child: child,
);
}
}
发布于 2022-05-24 06:33:29
您可以获得onPressed
与dataType Function
。示例:
import 'package:flutter/material.dart';
class GradientButtonWidget extends StatelessWidget {
final String title;
final VoidCallback onPress;
GradientButtonWidget({
required this.title,
required this.onPress,
});
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: onTap,
child: FittedBox(
child: Text(title),
),
);
}
}
您编写的代码如下所示:
class ApiWidget extends StatelessWidget {
final Widget child;
final VoidCallback onPress;
ApiWidget({
required this.child,
required this.onPress,
});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: onPress, //This is how it is called
child: child,
);
}
}
发布于 2022-05-24 07:53:27
最简单的解决方案是将child
封装在AbsorbPointer
或IgnorePointer
小部件中。这样做将忽略按钮的onPressed
,您可以在该类中自由地执行逻辑。
如果还希望确保按钮接收到onPressed
事件,则可以在onTap
回调中执行(child as ElevatedButton).onPressed?.call()
。
GestureDetector(
onTap: () {
// Perform your operation...
},
child: AbsorbPointer(
child: child, // Your passed button
),
)
https://stackoverflow.com/questions/72358036
复制相似问题