DART: Как передать аргумент методу, который должен быть константным - PullRequest
0 голосов
/ 05 марта 2020

Я реорганизую приложение 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. Я понимаю проблему, но наверняка есть способ выполнить sh удаление дублирования создания элемента Padding снова и снова?

Есть ли способ заставить компилятор обрабатывать эти значения как const, или Есть ли другой способ достичь sh моей цели?

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

Это невозможно с функцией.

С другой стороны, вы можете использовать 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,
    );
  }
}
0 голосов
/ 05 марта 2020

Если вы хотите, чтобы отступ был постоянным, вы должны убедиться, что его дочерний элемент создан с помощью 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();
...