Flutter在listview项上调用localToGlobal总是返回dx=0.0



大家好,我在获取listview中某个项目的全局位置时遇到问题。我不知道为什么localToGlobal方法总是返回dx=0.0的偏移量。我的目标是将小部件动画化为listview中的特定项目,所以我需要知道该目标项的全局位置。


... 
ListView.builder(

itemCount: categoryState.list.length,
itemBuilder: (ctx, i) {
return CategoryItem(index:i);
},
shrinkWrap: true,
),
...
class CategoryItem extends StatefulWidget{
const CategoryItem ({
Key? key,
required this.index});
@override
State<CategoryItem> createState() => CategoryItemState();
}
CategoryItemState  extends State<CategoryItem >{
GlobalKey _globalKey = GlobalKey();
@override
Widget build(BuildContext context) {
return InkWell(
key:_globalKey,
onTap:()=>getPosition(),
child:Text(widget.index.toString())
)
}
Offset? getPosition() {
RenderBox? object =
_globalKey.currentContext?.findRenderObject() as RenderBox;

return object.localToGlobal(Offset.zero);//===Always return dx==zero

}
}

dx始终为零,因为这是小部件与屏幕左侧之间的距离。在Flutter中,偏移零点位于屏幕的左上角,x轴向右增加,y轴向下增加。

最新更新