- ParentData使用过程中伴随的Dart语法现象。 (对比java更好用了,有没有😘)
// 将父类声明为子类,语法是正确的
class Person{
BaseInfo b;
}
class BaseInfo{
}
class FurtherInfo extends BaseInfo {
num age;
}
void main(){
FurtherInfo info = Person().b;
var age = info.age;
print('info:'+age.toString());
}
// 实例flex.dart,其中FlexParentData extends ParentData
int _getFlex(RenderBox child) {
final FlexParentData childParentData = child.parentData;
return childParentData.flex ?? 0;
}
- 设置和传递ParentData案例介绍
Expanded(
flex: 1,
child: Container(
color: Colors.amber,
height: 100,
),
),
Expanded 继承链
Expanded > Flexible > ParentDataWidget
其中Expanded负责接收参数,Flexible通过applyParentData函数,将flex塞到parentData中.
传递数据的调用栈:
Flexible.applyParentData (basic.dart:4333)
RenderObjectElement._updateParentData (framework.dart:4970)
RenderObjectElement.attachRenderObject (framework.dart:4989)
RenderObjectElement.mount (framework.dart:4752)
SingleChildRenderObjectElement.mount (framework.dart:5126)
Element.inflateWidget (framework.dart:3101)
Element.updateChild (framework.dart:2904)
ComponentElement.performRebuild (framework.dart:3961)
...
- 使用ParentData案例介绍(RenderFlex使用flex进行layout)
@override
void performLayout() {
...
final int flex = _getFlex(child);
...
}
FlexFit _getFit(RenderBox child) {
final FlexParentData childParentData = child.parentData;
return childParentData.fit ?? FlexFit.tight;
}
总结:ParentData是框架将数据从Widget传递给RenderObject的容器。