gpt4 book ai didi

build - Flutter 小部件的大小取决于另一个

转载 作者:IT王子 更新时间:2023-10-29 06:53:40 24 4
gpt4 key购买 nike

我目前正在尝试在 flutter 中制作自定义小部件。元素列表右侧的一个简单的“A 到 Z 滚动条”,用于在索引上跳转。我的问题是实际上我需要使用列表小部件的大小来确定字母字体的大小。

举例说明: enter image description here

我将列表添加为自定义类的子级,以从上下文中获取它的高度。我尝试在“构建”方法中使用 context.size.heigth 获取大小,但我收到错误消息,因为小部件未构建。然后我尝试执行一个异步方法,就像我在这里读到的那样:Stack overflow post

我可以无误地获得 context.size.height 的唯一位置是在我的手势检测器的 onVerticalDragUpdate 中。

这是我的实际代码:

class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: new AtoZSlider(child: _builList()),
);
}
}

Widget _builList() { //test list
return ListView.builder(
padding: EdgeInsets.all(8.0),
itemExtent: 20.0,
itemCount: 1000,
itemBuilder: (BuildContext context, int index) {
return Text('entry $index');
},
);
}

class AtoZSlider extends StatefulWidget {
final Widget child;

AtoZSlider({this.child});

@override
_AtoZSlider createState() => new _AtoZSlider();
}

class _AtoZSlider extends State<AtoZSlider> {
double _offsetContainer;
double _heightscroller;
bool _isHeightSetup;
var _text;
var _alphabet;

@override
void initState() {
super.initState();
_offsetContainer = 0.0;
_isHeightSetup = false;
_heightscroller = 14.0; //default value that i want to calculate with context size
_alphabet = [
'#',
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z'
];
_text = _alphabet[0];
}

@override
Widget build(BuildContext context) {
return Stack(alignment: Alignment.topRight, children: [
widget.child,
GestureDetector(
child: Container(
child: Text(_text, style: new TextStyle(fontSize: _heightscroller),),
height: _heightscroller,
margin: EdgeInsets.only(top: _offsetContainer)),
onVerticalDragUpdate: (DragUpdateDetails details) {
setState(() {

if ((_offsetContainer + details.delta.dy) >= 0 &&
(_offsetContainer + details.delta.dy) <=
(context.size.height - _heightscroller)) { // to move my scroller on the vertical axis and not out of band using context.size.height
_offsetContainer += details.delta.dy;

}

});
},
)
]);
}

}

有没有什么方法可以根据“列表大小高度”来初始化我的“小部件文本字体大小”?

非常感谢您的帮助。

最佳答案

一个小部件不能依赖于另一个小部件的大小。另一方面,它可以取决于约束

为此,您可以使用 LayoutBuilder 获取约束并相应地构建小部件:

Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Hello World")),
body: LayoutBuilder(
builder: (context, constraints) {
if (constraints.biggest.width > 100) {
return Text('Hello');
}
return Container();
},
),
);
}

关于build - Flutter 小部件的大小取决于另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55066129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com