From 2bbef9defa999dfaf45f4c00181a1be8a8b7bd04 Mon Sep 17 00:00:00 2001 From: JiWoong Sul Date: Tue, 9 Sep 2025 22:47:29 +0900 Subject: [PATCH] fix(zipcode): cap table width in dialog to half screen via optional maxWidthCap; pass 0.5 fraction when used in Company/Warehouse dialogs - 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 --- lib/screens/company/company_form.dart | 3 ++- .../warehouse_location/warehouse_location_form.dart | 1 + lib/screens/zipcode/components/zipcode_table.dart | 12 +++++++++++- lib/screens/zipcode/zipcode_search_screen.dart | 10 ++++++++-- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/screens/company/company_form.dart b/lib/screens/company/company_form.dart index 2fd7e6f..7eaea1d 100644 --- a/lib/screens/company/company_form.dart +++ b/lib/screens/company/company_form.dart @@ -109,6 +109,7 @@ _controller = CompanyFormController( GetIt.instance(), ), child: ZipcodeSearchScreen( + tableMaxWidthFraction: 0.5, onSelect: (zipcode) { Navigator.of(dialogContext).pop(zipcode); }, @@ -518,4 +519,4 @@ _controller = CompanyFormController( ), ); } -} \ No newline at end of file +} diff --git a/lib/screens/warehouse_location/warehouse_location_form.dart b/lib/screens/warehouse_location/warehouse_location_form.dart index 1e45eef..eca1e40 100644 --- a/lib/screens/warehouse_location/warehouse_location_form.dart +++ b/lib/screens/warehouse_location/warehouse_location_form.dart @@ -80,6 +80,7 @@ class _WarehouseLocationFormScreenState GetIt.instance(), ), child: ZipcodeSearchScreen( + tableMaxWidthFraction: 0.5, onSelect: (zipcode) { Navigator.of(dialogContext).pop(zipcode); }, diff --git a/lib/screens/zipcode/components/zipcode_table.dart b/lib/screens/zipcode/components/zipcode_table.dart index 3e5e2bd..1eb69aa 100644 --- a/lib/screens/zipcode/components/zipcode_table.dart +++ b/lib/screens/zipcode/components/zipcode_table.dart @@ -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( diff --git a/lib/screens/zipcode/zipcode_search_screen.dart b/lib/screens/zipcode/zipcode_search_screen.dart index 0ce0fd4..a8a30d1 100644 --- a/lib/screens/zipcode/zipcode_search_screen.dart +++ b/lib/screens/zipcode/zipcode_search_screen.dart @@ -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.0–1.0) of the screen width. + final double? tableMaxWidthFraction; + const ZipcodeSearchScreen({super.key, this.onSelect, this.tableMaxWidthFraction}); @override State createState() => _ZipcodeSearchScreenState(); @@ -236,6 +239,9 @@ class _ZipcodeSearchScreenState extends State { _showSuccessToast('우편번호 ${zipcode.zipcode}를 선택했습니다'); } }, + maxWidthCap: widget.tableMaxWidthFraction != null + ? MediaQuery.sizeOf(context).width * widget.tableMaxWidthFraction! + : null, ), ), ], @@ -248,4 +254,4 @@ class _ZipcodeSearchScreenState extends State { }, ); } -} \ No newline at end of file +}