Skip to content

Commit bbb078b

Browse files
committed
split up into separate widgets
1 parent cc02aa8 commit bbb078b

4 files changed

Lines changed: 122 additions & 76 deletions

File tree

lib/presentation/base_dirs.dart

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import 'dart:io';
2+
3+
import 'package:fdupes_gui/domain/fdupes_bloc.dart';
4+
import 'package:fdupes_gui/presentation/select_folder_dialog.dart';
5+
import 'package:flutter/material.dart';
6+
import 'package:flutter_bloc/flutter_bloc.dart';
7+
8+
class BaseDirs extends StatelessWidget {
9+
final List<Directory> baseDirs;
10+
11+
const BaseDirs({
12+
super.key,
13+
required this.baseDirs,
14+
});
15+
16+
@override
17+
Widget build(BuildContext context) {
18+
return Column(
19+
children: baseDirs
20+
.map((dir) => [
21+
Row(children: [
22+
ElevatedButton(
23+
child: Text('Change folder'),
24+
onPressed: () => showSelectFolderDialog(
25+
context,
26+
initialDir: dir,
27+
currentDirs: baseDirs,
28+
),
29+
),
30+
SizedBox(width: 8),
31+
Text(dir.path),
32+
IconButton(
33+
icon: Icon(Icons.remove_circle),
34+
visualDensity: VisualDensity.compact,
35+
iconSize: 14,
36+
onPressed: () =>
37+
BlocProvider.of<FdupesBloc>(context).add(FdupesEventDirsSelected(baseDirs..remove(dir))),
38+
),
39+
]),
40+
SizedBox(height: 8),
41+
])
42+
.expand((e) => e)
43+
.toList(),
44+
);
45+
}
46+
}

lib/presentation/dupe_screen.dart

Lines changed: 4 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import 'dart:io';
2-
31
import 'package:fdupes_gui/core/util.dart' as util;
42
import 'package:fdupes_gui/domain/fdupes_bloc.dart';
53
import 'package:fdupes_gui/presentation/dupes_body.dart';
4+
import 'package:fdupes_gui/presentation/dupes_top_bar.dart';
5+
import 'package:fdupes_gui/presentation/select_folder_dialog.dart';
66
import 'package:file_selector_platform_interface/file_selector_platform_interface.dart';
77
import 'package:flutter/material.dart';
88
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -16,7 +16,7 @@ class DupeScreen extends StatelessWidget {
1616
return Center(
1717
child: ElevatedButton(
1818
child: Text('Select folder'),
19-
onPressed: () => _showSelectFolderDialog(context, initialDir: null, currentDirs: []),
19+
onPressed: () => showSelectFolderDialog(context, initialDir: null, currentDirs: []),
2020
),
2121
);
2222
}
@@ -63,63 +63,7 @@ class DupeScreen extends StatelessWidget {
6363
padding: EdgeInsets.all(8),
6464
child: Column(
6565
children: <Widget>[
66-
Row(
67-
mainAxisSize: MainAxisSize.max,
68-
crossAxisAlignment: CrossAxisAlignment.start,
69-
children: [
70-
Expanded(
71-
child: Column(
72-
children: state.dirs
73-
.map((dir) => [
74-
Row(children: [
75-
ElevatedButton(
76-
child: Text('Change folder'),
77-
onPressed: () => _showSelectFolderDialog(
78-
context,
79-
initialDir: dir,
80-
currentDirs: state.dirs,
81-
),
82-
),
83-
SizedBox(width: 8),
84-
Text(dir.path),
85-
IconButton(
86-
icon: Icon(Icons.remove_circle),
87-
visualDensity: VisualDensity.compact,
88-
iconSize: 14,
89-
onPressed: () => BlocProvider.of<FdupesBloc>(context)
90-
.add(FdupesEventDirsSelected(state.dirs..remove(dir))),
91-
),
92-
]),
93-
SizedBox(height: 8),
94-
])
95-
.expand((e) => e)
96-
.toList(),
97-
),
98-
),
99-
SizedBox(width: 8),
100-
Column(
101-
children: [
102-
Tooltip(
103-
message: 'Find duplicates',
104-
child: ElevatedButton(
105-
child: Icon(Icons.refresh),
106-
onPressed: () =>
107-
BlocProvider.of<FdupesBloc>(context).add(FdupesEventDirsSelected(state.dirs)),
108-
),
109-
),
110-
SizedBox(height: 8),
111-
Tooltip(
112-
message: 'Add input folder',
113-
child: ElevatedButton(
114-
child: Icon(Icons.add),
115-
onPressed: () =>
116-
_showSelectFolderDialog(context, initialDir: null, currentDirs: state.dirs),
117-
),
118-
),
119-
],
120-
),
121-
],
122-
),
66+
DupesTopBar(baseDirs: state.dirs),
12367
SizedBox(height: 8),
12468
if (state.dupeGroups.isEmpty)
12569
Text('no dupes found')
@@ -138,22 +82,6 @@ class DupeScreen extends StatelessWidget {
13882
);
13983
}
14084

141-
Future<void> _showSelectFolderDialog(
142-
BuildContext context, {
143-
Directory? initialDir,
144-
required List<Directory> currentDirs,
145-
}) async {
146-
final dir = await FileSelectorPlatform.instance
147-
.getDirectoryPath(initialDirectory: initialDir?.path ?? util.userHome, confirmButtonText: 'Select');
148-
if (dir != null) {
149-
if (initialDir != null) {
150-
currentDirs.remove(initialDir);
151-
}
152-
currentDirs.add(Directory(dir));
153-
BlocProvider.of<FdupesBloc>(context).add(FdupesEventDirsSelected(currentDirs));
154-
}
155-
}
156-
15785
Future<void> _locateBinary(BuildContext context) async {
15886
final fdupesBloc = context.read<FdupesBloc>();
15987
final fdupesLocation = await FileSelectorPlatform.instance.openFile(
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import 'dart:io';
2+
3+
import 'package:fdupes_gui/domain/fdupes_bloc.dart';
4+
import 'package:fdupes_gui/presentation/base_dirs.dart';
5+
import 'package:fdupes_gui/presentation/select_folder_dialog.dart';
6+
import 'package:flutter/material.dart';
7+
import 'package:flutter_bloc/flutter_bloc.dart';
8+
9+
class DupesTopBar extends StatelessWidget {
10+
final List<Directory> baseDirs;
11+
12+
DupesTopBar({
13+
super.key,
14+
required this.baseDirs,
15+
});
16+
17+
@override
18+
Widget build(BuildContext context) {
19+
return Row(
20+
mainAxisSize: MainAxisSize.max,
21+
crossAxisAlignment: CrossAxisAlignment.start,
22+
children: [
23+
Expanded(
24+
child: BaseDirs(baseDirs: baseDirs),
25+
),
26+
SizedBox(width: 8),
27+
Column(
28+
children: [
29+
Tooltip(
30+
message: 'Find duplicates',
31+
child: ElevatedButton(
32+
child: Icon(Icons.refresh),
33+
onPressed: () => BlocProvider.of<FdupesBloc>(context).add(FdupesEventDirsSelected(baseDirs)),
34+
),
35+
),
36+
SizedBox(height: 8),
37+
Tooltip(
38+
message: 'Add input folder',
39+
child: ElevatedButton(
40+
child: Icon(Icons.add),
41+
onPressed: () => showSelectFolderDialog(context, initialDir: null, currentDirs: baseDirs),
42+
),
43+
),
44+
],
45+
),
46+
],
47+
);
48+
}
49+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import 'dart:io';
2+
3+
import 'package:fdupes_gui/core/util.dart' as util;
4+
import 'package:fdupes_gui/domain/fdupes_bloc.dart';
5+
import 'package:file_selector_platform_interface/file_selector_platform_interface.dart';
6+
import 'package:flutter/material.dart';
7+
import 'package:flutter_bloc/flutter_bloc.dart';
8+
9+
Future<void> showSelectFolderDialog(
10+
BuildContext context, {
11+
Directory? initialDir,
12+
required List<Directory> currentDirs,
13+
}) async {
14+
final dir = await FileSelectorPlatform.instance
15+
.getDirectoryPath(initialDirectory: initialDir?.path ?? util.userHome, confirmButtonText: 'Select');
16+
if (dir != null) {
17+
if (initialDir != null) {
18+
currentDirs.remove(initialDir);
19+
}
20+
currentDirs.add(Directory(dir));
21+
BlocProvider.of<FdupesBloc>(context).add(FdupesEventDirsSelected(currentDirs));
22+
}
23+
}

0 commit comments

Comments
 (0)