Flutter:继承自抽象的无状态小部件

Posted

技术标签:

【中文标题】Flutter:继承自抽象的无状态小部件【英文标题】:Flutter: inherit from abstract stateless widget 【发布时间】:2019-07-23 13:39:51 【问题描述】:

我有一个必须采用自定义小部件的类。这个可以有两种不同的实现,所以我想有一个抽象类作为接口,并创建另外两个扩展抽象类的类。所以,我有:

abstract class ICustomWidget extends StatelessWidget

class A extends ICustomWidget

  @override
  Widget build(BuildContext context) =>
     //Implementation


class B extends ICustomWidget 
  @override
  Widget build(BuildContext context) =>
     //Implementation

我想问一下这是否是正确的方法,或者还有另一种方法。谢谢

【问题讨论】:

这没有错。通常,组合优于 Flutter 小部件的继承,但这取决于您的具体用例。 “一个必须采用自定义小部件的类”你能解释为什么会这样吗? 【参考方案1】:

我会使用implements 而不是extends,因为ICustomWidget 是一个接口,而不是一个类,除非您可以提供更多上下文和/或代码示例。

这是接口的示例代码


abstract class ICustomWidget 
// or
// abstract class ICustomWidget extends StatelessWidget 
  void myProtocal();


class A extends StatelessWidget implements ICustomWidget 

  @override
  void myProtocal() 
    // TODO: implement myProtocal
  

  @override
  Widget build(BuildContext context) 
     //Implementation
  


class B extends ICustomWidget 
  // compilation error, `myProtocal` not implemented
  @override
  Widget build(BuildContext context) 
     //Implementation
  

【讨论】:

以上是关于Flutter:继承自抽象的无状态小部件的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:小部件状态:这段代码安全吗?

Flutter:如何从浮动操作按钮调用小部件状态类的方法

从自定义小部件继承

Flutter:何时创建无状态或有状态页面?

为啥当我在其小部件中调用 Flutter 有状态小部件时,它没有改变另一个有状态小部件的状态

如何从有状态小部件类 Flutter 访问小部件状态