Можно ли расширить StatefulWidget, который предоставляет дополнительный параметр в своем методе сборки? - PullRequest
0 голосов
/ 29 апреля 2020

Я хотел бы создать виджет BaseScreen, подобный этому, для повторного использования в моем приложении:

class BaseScreen extends StatelessWidget {
  final Widget child;

  BaseScreen({this.child});

  @override
  Widget build(BuildContext context) {
    var safePadding = MediaQuery.of(context).padding.top +
        MediaQuery.of(context).padding.bottom;

    return Scaffold(
      body: LayoutBuilder(
        builder: (context, constraint) {
          return SingleChildScrollView(
            child: SafeArea(
              child: ConstrainedBox(
                constraints: BoxConstraints(
                    minHeight: constraint.maxHeight - safePadding),
                child: IntrinsicHeight(
                  child: child,
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}

Но проблема, которую я вижу, заключается в том, что я также хотел бы повторно использовать свойство constraint, которое LayoutBuilder предоставляет дочерний элемент этого класса.

В настоящее время мне нужно создать еще один LayoutBuilder в дочернем элементе, и это звучит как дополнительная обработка для движка и дополнительный шаблонный код.

Если бы я мог как-то расширить этот виджет так, чтобы у ребенка я мог получить следующее:

  @override
  Widget build(BuildContext context, BoxConstraints constraints) {
  }

Это было бы здорово. Я знаю, что Флаттер поощряет композицию, а не наследование, поэтому, если я смогу решить ее по-другому, я бы тоже это оценил.

Спасибо!

...