我在 Width
中有变量 widget 1
,我试图将 widget 1
嵌入到 widget 2
中,并赋予它 width
的 200
而不是 default value
的 35
。如何从 200
设置 widget 2
?我尝试使用构造函数 ToolSetRight({widthProperty}
从外部设置它,但它似乎不是正确的方式。
Widget1
double Width = 35;
class ToolSetRight extends StatelessWidget {
ToolSetRight({widthProperty}
Width = widthProperty
);
Widget2
class _LandingState extends State<Landing> with SingleTickerProviderStateMixin {
final pages = [
ToolSetRight(widthProperty: 200)
];
答案 0 :(得分:0)
在 FirstWidget
中创建一个从外部接收值的本地属性来存储从 SecondWidget
接收到的值,例如在 FirstWidget
中定义一个名为 final double width;
的变量,并为接受值的小部件创建一个构造函数,并将其设置为您定义的本地属性,例如const FirstWidget({this.width = 35});
(我使用的 35 只是一个默认值,以防你没有从第二个小部件传递值,所以如果你总是传递一个值,你可以删除它),现在你可以使用本地根据需要,您的小部件树中的属性。在 SecondWidget
内部,当您使用 FirstWidget
时,您可以按照 Flutter 的工作方式将值从外部传递给小部件。
以下是两个小部件的完整代码片段:
// First Widget:
class FirstWidget extends StatelessWidget {
final double width;
const FirstWidget({this.width = 35});
@override
Widget build(BuildContext context) {
return Container(
width: width,
);
}
}
// Second Widget:
class SecondWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FirstWidget(
width: 200,
);
}
}
答案 1 :(得分:0)
如果传入的宽度为null,可以设置默认宽度,如果传入的值不为null,则设置传入的宽度
例如
class WidgetWithWidth extends StatelessWidget{
final double width;
final double defaultWidth = 35;
const WidgetWithWidth({Key key, this.width}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
width: width ?? defaultWidth,
);
}
}
所以如果父widget传递了宽度,它会使用它,如果父widget没有传递宽度,子widget将使用默认宽度