Skip to content

Commit 281a830

Browse files
lukischclaude
andcommitted
fix(flutter_port): Mobile-Bugsweep 2026-06-23 (Re-Sweep) — .single StateError
home_screen._pickFile: result.files.single warf StateError bei leerer files-Liste (result != null). Fix: isEmpty-Guard + result.files.first. Verhaltensgleich fuer den 1-Datei-Fall, sicher bei leerer Liste. (Muster wie StreamingGuide A4; der 06-20-Sweep kannte es noch nicht.) Sonst sauber (Markdown-Editor, keine DB -> rejected-Future N/A; mounted-Guards/ catch/Smart-Punctuation bereits 06-20 gefixt; l10n vollstaendig). Regressionstest: bugsweep_loop_20260623_test.dart. Scope: nur flutter_port. Statische Verifikation. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent bf894fd commit 281a830

2 files changed

Lines changed: 25 additions & 4 deletions

File tree

flutter_port/lib/screens/home_screen.dart

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,18 @@ class _HomeScreenState extends State<HomeScreen> {
6969
if (!mounted) {
7070
return;
7171
}
72-
if (result == null || result.files.single.path == null) {
72+
// .first statt .single: leere files-Liste (result != null) wirft sonst StateError.
73+
if (result == null ||
74+
result.files.isEmpty ||
75+
result.files.first.path == null) {
7376
setState(() {
7477
_isBusy = false;
7578
});
7679
return;
7780
}
7881

7982
try {
80-
final text = await File(result.files.single.path!).readAsString();
83+
final text = await File(result.files.first.path!).readAsString();
8184
if (!mounted) {
8285
return;
8386
}
@@ -86,8 +89,8 @@ class _HomeScreenState extends State<HomeScreen> {
8689
setState(() {
8790
_hasError = false;
8891
_hasUnsavedChanges = false;
89-
_currentFilePath = result.files.single.path;
90-
_currentFileName = result.files.single.name;
92+
_currentFilePath = result.files.first.path;
93+
_currentFileName = result.files.first.name;
9194
_isBusy = false;
9295
});
9396
} catch (e, stackTrace) {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Regressionstest fuer den Mobile-Bugsweep 2026-06-23 (CleanMarkdown/flutter_port, RE-SWEEP).
2+
//
3+
// Statische Quelltext-Assertion, da `flutter`/`dart` auf der Workstation nicht im
4+
// PATH ist (kein Laufzeit-Harness). Laut /bugsweep-Skill valide. Red-on-revert.
5+
import 'dart:io';
6+
import 'package:flutter_test/flutter_test.dart';
7+
8+
void main() {
9+
final homeSrc = File('lib/screens/home_screen.dart').readAsStringSync();
10+
11+
test('_pickFile nutzt nicht mehr .single (StateError-Schutz bei leerer Liste)',
12+
() {
13+
expect(homeSrc.contains('result.files.single'), isFalse,
14+
reason: '.single wirft StateError bei leerer files-Liste (result != null)');
15+
expect(homeSrc.contains('result.files.isEmpty'), isTrue,
16+
reason: 'isEmpty-Guard + .first ersetzen das unsichere .single');
17+
});
18+
}

0 commit comments

Comments
 (0)