JJ_MKVMaker/lib/ui/adaptive_row.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),
]),
);
}