【问题标题】:Creating custom widgets with multiple constructors使用多个构造函数创建自定义小部件
【发布时间】:2021-02-27 19:51:48
【问题描述】:

所以我试图在 Flutter 中创建一个具有多个构造函数的自定义小部件。 本质上,我正在创建一个箭头按钮,但希望能够创建带有朝向不同方向的箭头图标的按钮。

目前我的代码如下所示:

class RotateButton extends StatefulWidget {
  RotateButton.left() {
    _RotateButtonState createState() => _RotateButtonState.left();
  }

  RotateButton.right() {
    _RotateButtonState createState() => _RotateButtonState.right();
  }

  @override
  _RotateButtonState createState() => _RotateButtonState();
}

class _RotateButtonState extends State<RotateButton> {
  IconData icon;

  _RotateButtonState();

  _RotateButtonState.left() {
    icon = Icons.arrow_back;
  }

  _RotateButtonState.right() {
    icon = Icons.arrow_forward;
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        color: kPrimaryColor,
        borderRadius: BorderRadius.circular(20),
      ),
      child: Padding(
        padding: const EdgeInsets.all(15.0),
        child: Icon(
          icon,
          size: 70,
        ),
      ),
    );
  }
}

每次我使用我的小部件时,它只是默认为默认构造函数并且不显示图标子。

有没有办法在不创建默认构造函数的情况下构建类。

还有一种方法可以在不使用有状态小部件的情况下构建这个小部件,因为它有点过于复杂了。

我收到一条消息:

未引用声明“createState”

此消息将出现在旋转按钮类中的命名构造函数旁边。

非常感谢任何帮助。

【问题讨论】:

  • RotateButton 类中添加IconData icon;,例如使用RotateButton.left() : icon = Icons.arrow_back;,然后在_RotateButtonState 中使用widget.icon
  • 太棒了!这可行,但唯一的问题是我现在收到一条消息,上面写着:此类(或此类继承自的类)被标记为“@immutable”,但它的一个或多个实例字段不是最终的:RotateButton。图标
  • "[...] 但它的一个或多个实例字段不是最终的:RotateButton.icon" - 进来,消息是自我解释...

标签: flutter


【解决方案1】:

使用这样的东西:

class SomeWidget extends StatelessWidget {
  final bool isRight;

  const SomeWidget({Key key, this.isRight}) : super(key: key);
  
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Icon(isRight?Icons.arrow_forward:Icons.arrow_back),
    );
  }
}

【讨论】:

    猜你喜欢
    • 2023-01-22
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    相关资源
    最近更新 更多