Стандартизация размеров по всему приложению, но все еще использование `const` - PullRequest
0 голосов
/ 23 апреля 2020

Я хотел бы использовать стандартные размеры для флаттера, чтобы обеспечить комфортность сетки 4 пт. Вот один пример того, как это можно сделать:

class Spacing {
  const Spacing(double val) : points = val * 4;
  final double points;
}

class PtPadding extends Padding {
  PtPadding({Spacing padding, Widget child}) : super(padding: padding.points, child: child);
}

PtPadding(padding: Spacing(4), child: Text('Hello'));
// or just with regular old Padding
Padding(padding: Spacing(4).points, child: Text('Hello'));

Это здорово, но мне кажется, что для go способность const моего специализированного PtPadding заставляет разработчиков использовать Spacing. С другой стороны, простое использование Spacing в конструкторе и доступ к points не позволяет любому виджету быть «константным». Таким образом, мне кажется, что я должен понизить производительность, если я хочу реализовать этот интервал в моей системе.

У меня мог бы быть класс с stati c const членами, которые указывают на удвоения, но тогда я ограничен доступными размерами (ie У меня может быть только столько stati c членов) и Я также не получаю преимущества от ограничений типа.

Мне интересно, есть ли у кого-нибудь еще мысли о том, как я могу подойти к этому.

Для чего это стоит, я понимаю, почему Spacing(4).points не является const (методы по своей сути не являются консистентами), но не уверен, как обойти это.

1 Ответ

1 голос
/ 23 апреля 2020

Проблема в том, что вы расширяете Padding. Виджеты не предназначены для продления. Вместо этого вы должны использовать состав.

class Spacing {
  const Spacing(double val) : points = val * 4;
  final double points;
}

class PtPadding extends StatelessWidget {
  const PtPadding({
    Key key,
    @required this.padding,
    this.child,
  }) : super(key: key);

  final Spacing padding;
  final Widget child;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: EdgeInsets.all(padding.points),
      child: child,
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...