23 lines
1.1 KiB
Dart
23 lines
1.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
/// 약속 (설계 §7-2 AdaptiveRow, 점검 10/22): 앞 묶음 [lead] 과 뒤 묶음 [trail] 을 놓는다.
|
|
/// 폭이 [minWidth] 이상이면 한 줄 (앞 · 빈칸 · 뒤), 모자라면 두 줄 (앞 줄 아래에 뒤 묶음을 줄바꿈하며 오른쪽 정렬).
|
|
/// 넘치지 않는다 (좁은 창 - 폰 세로의 두 창). 넓은 화면의 모양은 한 줄 Row 그대로.
|
|
class AdaptiveRow extends StatelessWidget {
|
|
const AdaptiveRow({super.key, required this.lead, required this.trail, required this.minWidth});
|
|
|
|
final List<Widget> lead;
|
|
final List<Widget> trail;
|
|
final double minWidth;
|
|
|
|
@override
|
|
Widget build(BuildContext context) => LayoutBuilder(
|
|
builder: (context, box) => box.maxWidth >= minWidth
|
|
? Row(children: [...lead, const Spacer(), ...trail])
|
|
: Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [
|
|
Row(children: lead),
|
|
Wrap(alignment: WrapAlignment.end, children: trail),
|
|
]),
|
|
);
|
|
}
|