如何从小部件外部设置属性?

时间:2021-07-24 16:19:29

标签: flutter

我在 Width 中有变量 widget 1,我试图将 widget 1 嵌入到 widget 2 中,并赋予它 width200而不是 default value35。如何从 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)
    
  ];

2 个答案:

答案 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将使用默认宽度