DART:如何将参数传递给需要是 const 的方法
DART: How to pass an argument to a method that needs to be a const
我正在重构 Flutter 应用程序以提高可读性,并决定通过移动重复调用来减少重复,以通过提取方法来使用 Padding 包装小部件。该方法如下所示:
Padding _wrapWithPadding(Widget widget, {double horizontal = 8.0, double vertical = 0.0}) {
return const Padding(padding:
EdgeInsets.symmetric(horizontal: horizontal, vertical: vertical),
child: widget);
}
Dart 编译器抱怨水平、垂直和小部件参数在调用 Padding 构造函数时不是常量。我理解这个问题,但肯定有一种方法可以消除一遍又一遍地创建 Padding 元素的重复?
是否有某种方法可以让编译器将这些值视为常量,或者是否有其他方法可以实现我的目标?
这对于函数是不可行的。
另一方面,您可以使用 StatelessWidget
。
class MyPadding extends StatelessWidget {
const MyPadding(
this.widget, {
Key key,
this.horizontal,
this.vertical,
}) : super(key: key);
final Widget widget;
final double horizontal;
final double vertical;
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: horizontal ?? 8, vertical: vertical ?? .0),
child: widget,
);
}
}
如果你希望padding是常量,你应该确保它的child是由const构造创建的。我不建议这样做。
但是,您也可以使用扩展方法
extension WidgetExtension on Widget {
Padding addPadding({double horizontal = 8.0, double vertical = 0.0}) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: horizontal, vertical: vertical),
child: this);
}
}
Container().addPadding();
我正在重构 Flutter 应用程序以提高可读性,并决定通过移动重复调用来减少重复,以通过提取方法来使用 Padding 包装小部件。该方法如下所示:
Padding _wrapWithPadding(Widget widget, {double horizontal = 8.0, double vertical = 0.0}) {
return const Padding(padding:
EdgeInsets.symmetric(horizontal: horizontal, vertical: vertical),
child: widget);
}
Dart 编译器抱怨水平、垂直和小部件参数在调用 Padding 构造函数时不是常量。我理解这个问题,但肯定有一种方法可以消除一遍又一遍地创建 Padding 元素的重复?
是否有某种方法可以让编译器将这些值视为常量,或者是否有其他方法可以实现我的目标?
这对于函数是不可行的。
另一方面,您可以使用 StatelessWidget
。
class MyPadding extends StatelessWidget {
const MyPadding(
this.widget, {
Key key,
this.horizontal,
this.vertical,
}) : super(key: key);
final Widget widget;
final double horizontal;
final double vertical;
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: horizontal ?? 8, vertical: vertical ?? .0),
child: widget,
);
}
}
如果你希望padding是常量,你应该确保它的child是由const构造创建的。我不建议这样做。
但是,您也可以使用扩展方法
extension WidgetExtension on Widget {
Padding addPadding({double horizontal = 8.0, double vertical = 0.0}) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: horizontal, vertical: vertical),
child: this);
}
}
Container().addPadding();