繁体   English   中英

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

如果您希望填充保持不变,则应确保其子项是通过 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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM