타일 UI 편집 기능 임시 보류 + 로그인 유지 체크박스 추가

- 폰처럼 작은 화면에서 6칸 고정 격자 때문에 레이아웃이 깨지는 문제로,
  타일 드래그 이동/크기조절 기능을 kTileEditingEnabled 플래그로 임시 비활성화
  (관련 코드는 그대로 유지 - 작은 화면 대응 방안 마련 후 플래그만 켜면 재사용 가능)
- 비활성화 상태에서는 화면 폭에 따라 열이 자동으로 줄어드는 기본 그리드 사용
- 설정 화면의 "UI 편집" 항목은 비활성화 표시로 안내
- 로그인 화면에 "로그인 상태 유지" 체크박스 추가 (기본 체크됨, 해제 시 세션 저장 안 함)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-07 22:47:07 +09:00
co-authored by Claude Sonnet 5
parent 7495ece0c8
commit c94f51a033
4 changed files with 106 additions and 28 deletions
+35 -8
View File
@@ -60,7 +60,10 @@ class _MainDashboardState extends State<MainDashboard> {
void initState() {
super.initState();
_layout = DashboardLayoutController(_displayId);
_layout.load(_tileSpecs().map((t) => t.id).toList());
// 📱 [기능 보류] kTileEditingEnabled가 false인 동안은 서버에서 배치를 불러올 필요가 없다.
if (kTileEditingEnabled) {
_layout.load(_tileSpecs().map((t) => t.id).toList());
}
}
@override
@@ -193,7 +196,7 @@ class _MainDashboardState extends State<MainDashboard> {
context,
MaterialPageRoute(builder: (context) => const DashboardSettingsPage()),
);
if (result == 'edit_ui') {
if (result == 'edit_ui' && kTileEditingEnabled) {
_layout.enterEditMode();
}
}
@@ -577,12 +580,16 @@ class _MainDashboardState extends State<MainDashboard> {
),
),
const SizedBox(height: 16),
_layout.isLoading
? const Padding(
padding: EdgeInsets.symmetric(vertical: 40),
child: Center(child: CircularProgressIndicator()),
)
: _buildGridCanvas(tiles, isEditing),
// 📱 [기능 보류] kTileEditingEnabled가 꺼져 있는 동안은 화면 크기에 맞춰
// 알아서 줄서는 기본 그리드를 쓰고, 드래그 편집용 캔버스는 쓰지 않는다.
kTileEditingEnabled
? (_layout.isLoading
? const Padding(
padding: EdgeInsets.symmetric(vertical: 40),
child: Center(child: CircularProgressIndicator()),
)
: _buildGridCanvas(tiles, isEditing))
: _buildSimpleGrid(tiles),
const SizedBox(height: 32),
],
),
@@ -592,6 +599,26 @@ class _MainDashboardState extends State<MainDashboard> {
);
}
// 📱 [기능 보류] kTileEditingEnabled가 꺼져 있을 때 쓰는 기본 그리드.
// 화면 폭에 맞춰 열 개수가 자동으로 줄어들기 때문에 폰에서도 안 깨진다.
Widget _buildSimpleGrid(List<({String id, Widget child})> tiles) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 24.0),
child: GridView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 160,
mainAxisSpacing: 12,
crossAxisSpacing: 12,
childAspectRatio: 1,
),
itemCount: tiles.length,
itemBuilder: (context, index) => tiles[index].child,
),
);
}
Widget _buildGridCanvas(
List<({String id, Widget child})> tiles,
bool isEditing,