Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 创建自己的颤振小部件最佳实践_Dart_Flutter - Fatal编程技术网

Dart 创建自己的颤振小部件最佳实践

Dart 创建自己的颤振小部件最佳实践,dart,flutter,Dart,Flutter,我试图理解在flutter中创建自己的小部件的最佳风格,这里有两个非常简单的示例 在底部有代码的情况下,我可以使用1) 或2) 或者我不知道的其他方式 方法1)感觉更正确(如果我没有犯一些错误的话),但是方法2)实际上代码更少(因为我不需要提前声明对象变量,假设我不需要访问上下文),但我对静态方法很谨慎 是首选,为什么 class SomeWidget extends StatelesssWidget { String title; Function callback; Some

我试图理解在flutter中创建自己的小部件的最佳风格,这里有两个非常简单的示例

在底部有代码的情况下,我可以使用1)

或2)

或者我不知道的其他方式

方法1)感觉更正确(如果我没有犯一些错误的话),但是方法2)实际上代码更少(因为我不需要提前声明对象变量,假设我不需要访问上下文),但我对静态方法很谨慎

是首选,为什么

class SomeWidget extends StatelesssWidget {

  String title;
  Function callback;

  SomeWidget( this.title, this.callback );

  //method 1
  Widget build(context) {
    return GestureDetector(
      onTap: callback,
      child: ....some widget
    )
  }

  //method 2
  static Widget widget(String title, Function callback) {
    return GestureDetector(
      onTap: callback,
      child: ....some widget
    )
  }

}

我不知道实际的Guillideline,但我更喜欢

class SomeWidget extends StatelesssWidget {

  SomeWidget({this.title, this.callback});

  final String title;
  final VoidCallback callback;

  Widget build(context) {
    return GestureDetector(
      onTap: callback,
      child: ....some widget
    );
  }
}
或者你可以这样做

SomeWidget({this.title = '', @required this.callback})
对于默认值或如果需要某些值


另外,所有这些都不是指导原则——它只是一个IMHO)

您的第二个版本甚至不需要或使用任何小部件。它可能是一个顶级函数,使一些小部件变得多余。忽略无意义的编辑。经过一些思考之后,应该在另一个问题中提出,我在这里提出:。这个问题也应该回答你的问题,去看看吧!:)安德烈说得对。无论如何,如果您有一个
无状态小部件
小部件的所有字段都应该是不可变的,例如final。如果小部件的状态应该可以更改,请使用
StatefulWidget
。你说得对,我错过了这一刻。实际上,
StatefulWidget
中的字段也必须是不可变的)哦,我指的是
StatefulWidget
State
中的字段。
class SomeWidget extends StatelesssWidget {

  SomeWidget({this.title, this.callback});

  final String title;
  final VoidCallback callback;

  Widget build(context) {
    return GestureDetector(
      onTap: callback,
      child: ....some widget
    );
  }
}
SomeWidget({this.title = '', @required this.callback})