使用多个构造函数创建自定义小部件

问题描述 投票:0回答:2

所以我尝试在 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”

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

非常感谢任何帮助。

flutter
2个回答
0
投票

使用这样的东西:

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),
    );
  }
}

0
投票

老问题,但可以这样做:

class RotateButton extends StatelessWidget {
  final Icon icon;
  const RotateButton.left({super.key, required this.icon});
  const RotateButton.right({super.key, required this.icon});
   ...
}

RotateButton 类有 2 个构造函数。 它们可以像下面这样调用:

const RotateButton.left(icon: Icons.arrow_back);

const RotateButton.right(icon: Icons.arrow_forward);
© www.soinside.com 2019 - 2024. All rights reserved.