在Flutter上获取容器的“ y”位置

我想获得容器,小部件,堆栈等的“ y”位置。当它显示在屏幕中央时,我想从图像(视频预览图像)更改为视频文件。我能怎么做?

我发现屏幕高度。我计算了屏幕中心。我找不到容器的地方。

我创建了这样的样本,但该项目不在中间。可能我在这里犯了算法错误?

class _DedectCenterState extends State<DedectCenter> {

Size _wSize;

int listSize = 4;

List<GlobalKey> _key = [];

ScrollController _sController;

_scrollListener() {

print("scrolling : " + _sController.offset.toString());

setState(() {

getPosition();

});}

@override

void initState() {

for(int i=0; i < listSize; i++) {

_key[i] = new GlobalKey();

}

_sController = ScrollController();

_sController.addListener(_scrollListener);

super.initState();

}

void getPosition(){

double _wCenterTop = (_wSize.height / 2) - 150.0;

double _wCenterBottom = (_wSize.height / 2) + 150.0;

print("center bottom: " + _wCenterBottom.toString());

print("center top: " + _wCenterTop.toString());

for(int i=0; i < listSize; i++) {

//add key to your widget, which position you need to find

RenderBox box = _key[i].currentContext.findRenderObject();

Offset position = box.localToGlobal(Offset.zero); //this is global position

double y = position.dy; //this is y - I think it's what you want

print("key $i y position: " + y.toString());

if(y < _wCenterTop && y > _wCenterBottom) print("key $i center: " + y.toString());

}}

Widget build(BuildContext context) {

_wSize = MediaQuery.of(context).size;

return new Scaffold(

appBar: null,

body: new ListView(

controller: _sController,

children: <Widget>[

Row(

children: <Widget>[

Column(

children: <Widget>[

Container(

key: _key[0],

margin: EdgeInsets.only(top:100.0),

height: 140.0,

width: _wSize.width,

child: new Image.asset('assets/images/physical/a1.png'),

)],)],

),

Row(

children: <Widget>[

Column(

children: <Widget>[

Container(

key: _key[1],

margin: EdgeInsets.only(top:100.0),

height: 140.0,

width: _wSize.width,

child: new Image.asset('assets/images/physical/a2.png'),

),],)],

),

Row(

children: <Widget>[

Column(

children: <Widget>[

Container(

margin: EdgeInsets.only(top:100.0),

key: _key[2],

height: 140.0,

width: _wSize.width,

child: new Image.asset('assets/images/physical/a3.png'),

),],)],),

Row(

children: <Widget>[

Column(

children: <Widget>[

Container(

margin: EdgeInsets.only(top:100.0),

key: _key[3],

width: _wSize.width,

height: 140.0,

child: new Image.asset('assets/images/physical/a4.png'),

),

],

)

],),]));}}

回答:

您可以GlobalKey用来获取小部件的大小或位置

GlobalKey key = GlobalKey();

Container(key: key,...); //add key to your widget, which position you need to find

RenderBox box = key.currentContext.findRenderObject();

Offset position = box.localToGlobal(Offset.zero); //this is global position

double y = position.dy; //this is y - I think it's what you want

以上是 在Flutter上获取容器的“ y”位置 的全部内容, 来源链接: utcz.com/qa/415629.html

回到顶部