fix(zipcode): cap table width in dialog to half screen via optional maxWidthCap; pass 0.5 fraction when used in Company/Warehouse dialogs
Some checks failed
Flutter Test & Quality Check / Test on macos-latest (push) Has been cancelled
Flutter Test & Quality Check / Test on ubuntu-latest (push) Has been cancelled
Flutter Test & Quality Check / Build APK (push) Has been cancelled

- ZipcodeTable: add maxWidthCap and use min(viewport, cap) to compute width
- ZipcodeSearchScreen: allow tableMaxWidthFraction and forward to table
- Apply 0.5 in CompanyForm and WarehouseLocationForm dialogs

flutter analyze: 0 errors, warnings unaffected
This commit is contained in:
JiWoong Sul
2025-09-09 22:47:29 +09:00
parent 49b203d366
commit 2bbef9defa
4 changed files with 22 additions and 4 deletions

View File

@@ -109,6 +109,7 @@ _controller = CompanyFormController(
GetIt.instance<ZipcodeUseCase>(),
),
child: ZipcodeSearchScreen(
tableMaxWidthFraction: 0.5,
onSelect: (zipcode) {
Navigator.of(dialogContext).pop(zipcode);
},
@@ -518,4 +519,4 @@ _controller = CompanyFormController(
),
);
}
}
}

View File

@@ -80,6 +80,7 @@ class _WarehouseLocationFormScreenState
GetIt.instance<ZipcodeUseCase>(),
),
child: ZipcodeSearchScreen(
tableMaxWidthFraction: 0.5,
onSelect: (zipcode) {
Navigator.of(dialogContext).pop(zipcode);
},

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'dart:math' as math;
import 'package:flutter/services.dart';
import 'package:shadcn_ui/shadcn_ui.dart';
import 'package:superport/data/models/zipcode_dto.dart';
@@ -9,6 +10,8 @@ class ZipcodeTable extends StatelessWidget {
final int totalPages;
final Function(int) onPageChanged;
final Function(ZipcodeDto) onSelect;
// Optional: cap the effective viewport width used by the table
final double? maxWidthCap;
const ZipcodeTable({
super.key,
@@ -17,6 +20,7 @@ class ZipcodeTable extends StatelessWidget {
required this.totalPages,
required this.onPageChanged,
required this.onSelect,
this.maxWidthCap,
});
void _copyToClipboard(BuildContext context, String text, String label) {
@@ -43,7 +47,13 @@ class ZipcodeTable extends StatelessWidget {
builder: (context, constraints) {
// 고정폭 + 마지막 filler
const double minW = 160 + 180 + 180 + 320 + 140 + 24;
final double tableW = constraints.maxWidth >= minW ? constraints.maxWidth : minW;
final double viewportW = constraints.maxWidth.isFinite
? constraints.maxWidth
: MediaQuery.sizeOf(context).width;
final double cappedW = maxWidthCap != null
? math.min(viewportW, maxWidthCap!)
: viewportW;
final double tableW = cappedW >= minW ? cappedW : minW;
const double etcW = 320.0;
return SingleChildScrollView(

View File

@@ -8,7 +8,10 @@ import 'package:superport/screens/zipcode/components/zipcode_table.dart';
class ZipcodeSearchScreen extends StatefulWidget {
final Function(ZipcodeDto)? onSelect;
const ZipcodeSearchScreen({super.key, this.onSelect});
// When used in a dialog/popup, you can cap the table width
// by setting this fraction (0.01.0) of the screen width.
final double? tableMaxWidthFraction;
const ZipcodeSearchScreen({super.key, this.onSelect, this.tableMaxWidthFraction});
@override
State<ZipcodeSearchScreen> createState() => _ZipcodeSearchScreenState();
@@ -236,6 +239,9 @@ class _ZipcodeSearchScreenState extends State<ZipcodeSearchScreen> {
_showSuccessToast('우편번호 ${zipcode.zipcode}를 선택했습니다');
}
},
maxWidthCap: widget.tableMaxWidthFraction != null
? MediaQuery.sizeOf(context).width * widget.tableMaxWidthFraction!
: null,
),
),
],
@@ -248,4 +254,4 @@ class _ZipcodeSearchScreenState extends State<ZipcodeSearchScreen> {
},
);
}
}
}