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

Flutter 使用多个构造函数创建自定义小部件,flutter,Flutter,因此,我试图在flatter中创建一个具有多个构造函数的自定义小部件。 本质上,我正在创建一个箭头按钮,但希望能够创建箭头图标朝向不同方向的按钮 当前我的代码如下所示: class RotateButton extends StatefulWidget { RotateButton.left() { _RotateButtonState createState() => _RotateButtonState.left(); } RotateButton.right()

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

当前我的代码如下所示:

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,
        ),
      ),
    );
  }
}
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),
    );
  }
}
class RotateButton扩展StatefulWidget{
RotateButton.left(){
_RotateButtonState createState()=>_RotateButtonState.left();
}
RotateButton.right(){
_RotateButtonState createState()=>\u RotateButtonState.right();
}
@凌驾
_RotateButtonState createState()=>_RotateButtonState();
}
类旋转按钮状态扩展状态{
Iconda图标;
_旋转按钮状态();
_RotateButtonState.left(){
icon=Icons.arrow\u back;
}
_RotateButtonState.right(){
icon=Icons.arrow\u向前;
}
@凌驾
小部件构建(构建上下文){
返回容器(
装饰:盒子装饰(
颜色:kPrimaryColor,
边界半径:边界半径。圆形(20),
),
孩子:填充(
填充:常数边集全部(15.0),
子:图标(
偶像
尺码:70,
),
),
);
}
}
每次我使用我的小部件时,它只是默认为默认构造函数,不显示任何图标子项

有没有一种方法可以在不创建默认构造函数的情况下构建类

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

我收到一条信息说:

未引用声明“createState”

此消息出现在rotatebutton类中的命名构造函数旁边


非常感谢您的帮助。

请使用以下内容:

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

添加
iconda图标RotateButton
类中使用code>,例如使用
RotateButton.left():icon=Icons.arrow\u back然后在
内旋转按钮状态
只需使用
小部件。图标
太棒了!这是可行的,但唯一的问题是我现在收到一条消息:这个类(或这个类继承的类)被标记为“@immutable”,但它的一个或多个实例字段不是最终的:RotateButton.icon“[…]但它的一个或多个实例字段不是最终的:RotateButton.icon”-进来,消息是自我解释的。。。