如何使用SizeChangedLayoutNotifier?
我Wrap
在我的flexibleSpace内部有一个SliverAppBar
。现在,当Wrap的大小(动态更改)时,我需要获取通知,因此可以在SliverAppBar中相应地更改我的flexibleSpace的高度。
我将文档阅读到SizeChangedLayoutNotifier上,但是我不太了解如何使用它。我Wrap
小时候把我包裹在一个盒子里,SizeChangedLayoutNotifier
但是对于我来说,现在还不清楚如何用邮件接收通知NotificationListener<SizeChangedLayoutNotification>
。我找不到任何代码示例。
非常感谢您的帮助:)谢谢!
回答:
我终于弄清楚了,并会在这里将解决方案发布给其他有相同问题的人。
我把我的Wrap
内心像这样:
new NotificationListener<SizeChangedLayoutNotification>( onNotification: gotNotification,
child: SizeChangedLayoutNotifier(
key: _filterBarChangeKey,
child: Wrap( // my WRAP stuff)
)
);
并让我这样的回调:
bool gotNotification(SizeChangedLayoutNotification notification) { // change height here
_filterBarChangeKey = GlobalKey();
}
我还从这里找到了另一种根本不使用SizeChangedLayoutNotification来解决我的问题的解决方案。对我来说,这甚至更好。我只是将我的小部件包装在MeaserSize
提供onSizeChanged
回调的小部件内。
typedef void OnWidgetSizeChange(Size size);class MeasureSize extends StatefulWidget {
final Widget child;
final OnWidgetSizeChange onChange;
const MeasureSize({
Key key,
@required this.onChange,
@required this.child,
}) : super(key: key);
@override
_MeasureSizeState createState() => _MeasureSizeState();
}
class _MeasureSizeState extends State<MeasureSize> {
var widgetKey = GlobalKey();
@override
Widget build(BuildContext context) {
WidgetsBinding.instance
.addPostFrameCallback((_) => widget.onChange(widgetKey.currentContext.size));
return Container(
key: widgetKey,
child: widget.child,
);
}
}
以上是 如何使用SizeChangedLayoutNotifier? 的全部内容, 来源链接: utcz.com/qa/425491.html