得到"y".容器在Flutter上的位置 [英] Get "y" position of container on Flutter
本文介绍了得到"y".容器在Flutter上的位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想获得容器,窗口小部件,堆栈等的"y"位置.当它显示在屏幕中央时,我想从图像(视频预览图像)更改为视频文件.我该怎么办?
I want to get a 'y' position of container, widget, stack etc. When it's displayed on center of screen, I want to change from image (video preview image) to video file. How can I do?
我发现了屏幕的高度.我计算了屏幕中心.我找不到容器的地方.
I found the screen height. I calculated the screen center. I couldn’t find to container place.
我创建了这样的样本,但该项目不在中间.可能我在这里犯了算法错误?
I created such a sample, but the item doesnt stand in the center. Possible I have made an algorithm error here?
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
获取小部件的大小或位置
You can use GlobalKey
for getting size or position of widget
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
这篇关于得到"y".容器在Flutter上的位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文