【发布时间】:2021-08-08 21:14:27
【问题描述】:
我有两节课。
- CustomParentWidget
- CustomChildWidget(在加载时显示 CircularProgressIndicator 和 CentralisedAssetLoader id 加载)
现在我需要在渲染 CustomChildWidget 后更改我的 CustomParentWidget 高度。 它是通过添加实现的
WidgetsBinding.instance
.addPostFrameCallback((_) => calculateMaxOptionHeight());
在 CustomParentWidget 的 initState..
这里的问题是 CustomParentWidget 仅获得 CircularProgressIndicator 的高度.. 由于 CustomChildWidget 首先返回 CircularProgressIndicator, CustomParentWidget 的 addPostFrameCallBack 认为 ChildWidget 已被渲染并将高度设置为父级..
但是当 CentralisedAssetLoader 也被渲染时,我需要再次调用 addPostFrameCallBack。
有没有办法在渲染子窗口小部件时调用函数?
class CustomParentWidget extends StatefulWidget {
CustomParentWidget();
@override
_CustomParentWidgetState createState() =>
_CustomParentWidgetState();
}
class _CustomParentWidgetState
extends State<CustomParentWidget> {
double widgetHeight;
@override
initState() {
//calling the calculate Function after the Layout is Rendered
WidgetsBinding.instance
.addPostFrameCallback((_) => calculateMaxOptionHeight());
super.initState();
}
void calculateWidgetHeight() {
setState(){
widgetHeight = getWidgetHeight();
}
}
@override
Widget build(BuildContext context) {
return Container(
child: CustomChildWidget(height: widgetHeight),
);
}
}
class CustomChildWidget extends StatefulWidget {
CustomChildWidget({this.height});
@override
_CustomChildWidgetState createState() => _CustomChildWidgetState();
}
class _CustomChildWidgetState extends State<CustomChildWidget> {
double height;
double width;
bool isLoaded;
@override
void initState() {
isLoaded = false;
prepareData();
super.initState();
}
void prepareData() async {
try {
height = getheight();
width = getwidth();
} catch (error) {}
setState(() {
height = height;
width = width;
isLoaded = true;
});
}
@override
Widget build(BuildContext context) {
final screenMaxWidth = MediaQuery.of(context).size.width;
if (!isLoaded) {
return CircularProgressIndicator();
}
return Container(
width: min(screenMaxWidth, width),
height: height,
child: CentralisedAssetLoader(
fit: BoxFit.contain,
assetIdentifier: assetIdentifier,
),
);
}
}
【问题讨论】:
标签: flutter dynamic build widget height