这时候就需要给Widget对象设置一个Key,然后根据这个Key来拿到BuildContext对象,从而获取RenderBox对象,代码如下。 class MyHomePageState extends State<MyHomePage> { //定义一个key GlobalKey _key = GlobalKey(); _getRenderBox() { //获取`RenderBox`对象 RenderBox renderBox = _key.currentContext.findRenderObject...
从原因上面看通过_NestedScrollPosition的context得到的RenderBox只是这个List的RenderBox的区域,它跟PageView/TabBarView的RenderBox的相对位置不一定总会存在offset.x为0的状况,就像上面加了padding和margin一样 解决方式如下: position 是List跟PageView/TabBarView的相对位置 size 是List跟PageView/TabBarView 大小的差距 ...
getPositionWithPostFrameCallback(_) => getSizeWithRenderBox; 前两种方式,无非是通过GlobalKey来获取BuildContext和RenderBox,其本质是一样的。但是这些方法都只限制于获取Box模型中的尺寸,如果在Sliver结构中国,则只能通过其内部的容器Widget来间接获取其尺寸。 Size Notifications 在Flutter中,Notifications是向上冒泡的,...
final rect = MatrixUtils.transformRect(matrix, renderObject!.paintBounds); return rect; } else { return null; } } } 使用方法 final containerKey = GlobalKey(); Container( key: containerKey, width: 100, height: 50, ) void printWidgetPosition() { print('absolute coordinates on screen: ${co...
同时,各个页面的生命周期也很重要,每个页面消失时要做一些内存清理、计时器清除、通知清除等操作。所以...
snackPositionSnackPosition弹出时的位置,有两个选项【TOP,BOTTOM】默认TOP titleTextWidget弹出标题的组件,设置该属性会导致title属性失效 messageTextWidget弹出消息的组件,设置该属性会导致messageText属性失效 iconWidget弹出时图标,显示在title和message的左侧
();// offset.dx , offset.dy 就是控件的左上角坐标varoffset=renderBox.localToGlobal(Offset.zero);setState((){dx=offset.dx+(renderBox.size.width/2);dy=offset.dy+(renderBox.size.height/2);});}WidgetwidgetContainer(){returnContainer(// key 要绑定在该控件上key:_anchorKey,width:100,height:...
widget.onSized.call(size); } else if (!_hasMeasured) { // Need to build twice in order to get size scheduleMicrotask(() => setState(() => _hasMeasured = true)); } return widget.child; } } 我们创建一个MeasurableWidget,用来测量Child的尺寸,并传入回调来获取尺寸,使用代码如下。
returntopLeftPosition.dy; 2. 可以通过context.size获取当前控件的尺寸和位置offset信息 下面是示例,通过contex.size.height可以拿到child控件的高度 1 2 3 4 5 6 7 8 9 10 11 12 13 14 classHeightReporter extends StatelessWidget { final Widget child; ...
单子元素布局--SingleChildRenderObjectWidget Container Container是继承StatelessWidget,那么build是构建布局关键函数,在Container中build中,掺杂了很多其他的部件,Align、Padding、ColoredBox、DecorateBox、Transform...等等,每个关于布局或者样式的属性,最后都被转化成其他的box来呈现。看下官方源码: ...