OOM*_*OOM 5 size build widget flutter
我目前正在尝试在颤振中制作一个自定义小部件。元素列表右侧的一个简单的“A 到 Z 滚动条”,用于跳转到索引。我的问题是实际上我需要使用列表小部件的大小来确定字母的字体大小。
我将列表添加为自定义类的子级,以从上下文中获取它的高度。我尝试在“构建”方法中使用context.size.heigth获取大小,但由于未构建小部件而出现错误。然后我尝试执行一个异步方法,就像我在这里读到的那样:堆栈溢出帖子
我可以在没有错误的情况下获得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;
}
});
},
)
]);
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以根据“列表大小高度”来初始化我的“小部件文本字体大小”?
非常感谢您提供的任何帮助。
一个小部件不能依赖于另一个小部件的大小。另一方面,它可能取决于约束条件。
为此,您可以使用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();
},
),
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1924 次 |
| 最近记录: |