Я хотел бы создать виджет 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) {
}
Это было бы здорово. Я знаю, что Флаттер поощряет композицию, а не наследование, поэтому, если я смогу решить ее по-другому, я бы тоже это оценил.
Спасибо!