如何通过在Flutter中扩展自定义窗口小部件来创建新窗口小部件?

时间:2020-05-24 10:13:43

标签: class flutter inheritance dart widget

在扑朔迷离中,我有一个非常复杂的小部件,并且工作正常。 但对于应用程序的不同部分,我想稍作修改

要实现这一点,我必须使用不同的名称复制整个小部件并添加修改,

代替复制,我们是否可以继承继承窗口小部件并在Flutter中覆盖窗口小部件来创建新窗口小部件?

例如:-考虑到我有这个小部件:

class ParentWidget extends StatefulWidget {
  @override
  _ParentWidgetState createState() => _ParentWidgetState();
}

class _ParentWidgetState extends State<ParentWidget> {
  @override
  Widget build(BuildContext context) {
    return Container(

    );
  }
}

,我想创建子小部件,例如:-

class ChildWidget extends ParentWidget {

}

我应该能够在其中修改父小部件的所有方面。

3 个答案:

答案 0 :(得分:1)

假设您有一个容器,该容器会根据屏幕更改其大小,因此我们可以在方法参数中为其分配值,例如:

1。通用窗口小部件类

class CommonWidget {
  static Widget getContainer(double width, double height, Widget body) {
    return Container(
      width: width,
      height: height,
      child: body,
    );
  }

2。用法

Widget body = Center(
      child: Text('Welcome to Home Screen'),
    );
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: CommonWidget.getContainer(100, 100, body), // These params you can change at your preference. 
    );

答案 1 :(得分:0)

您不应该在Flutter中扩展小部件

答案 2 :(得分:0)

您可以将参数传递给 ChildWidget 构造函数方法,然后将值传递给 ParentWidget。 例如你可以修改父容器的高度:

ParentWidget:

class ParentWidget  extends StatefulWidget {
double height;
ParentWidget ({this.height});

@override
State<StatefulWidget> createState() {
  return _ParentWidgetState();
  }
 }
 
 class _ParentWidgetState extends State<ParentWidget> {
 @override
 Widget build(BuildContext context) {
  return Container(
    height: widget.height == null ? 40 : widget.height,
    );
    }
  }

子控件:

class ChildWidget  extends ParentWidget {
  ChildWidget (double height) : super(height: height);
}

在ui中你可以修改高度:

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Column(
          children: <Widget>[
            ParentWidget(),
            ChildWidget(220),
          ],
    );
  }
}