【问题标题】:How to create new widget with extending custom widget in flutter?如何在颤振中通过扩展自定义小部件来创建新小部件?
【发布时间】:2020-09-11 00:45:18
【问题描述】:

在颤振中,我有一个非常复杂的小部件并且它工作正常。 但是对于应用程序的不同部分,我想稍微修改一下小部件,

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

我们可以在flutter中创建一个继承widget并覆盖widget的新widget而不是复制吗?

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

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

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

    );
  }
}

我想创建子小部件前:-

class ChildWidget extends ParentWidget {

}

我们应该在哪里修改父小部件的所有方面。

【问题讨论】:

  • 你可以创建静态小部件方法而不是继承,然后可以使用它
  • 我需要稍微改变一下widget的功能,又不想复制,因为它的widget比较复杂,静态widget是如何实现的呢?
  • 您可以使用参数构造函数使 parentWidget 动态化。构造函数将具有您想要根据不同屏幕更改的属性参数。
  • 您是否发现 jitsm 的解决方案是正确的,或者您是否找到了将继承应用到小部件的方法

标签: class flutter inheritance dart widget


【解决方案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. 
    );

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这应该是评论而不是答案
    • 我们该怎么办??
    【解决方案3】:

    您可以将参数传递给 ChildWidget 构造方法,然后将值传递给 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),
              ],
        );
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-09-07
      • 2019-12-20
      • 2021-10-23
      • 1970-01-01
      • 2021-10-03
      • 2021-11-25
      • 2021-08-19
      • 2018-09-13
      • 1970-01-01
      相关资源
      最近更新 更多