Skip to content

Commit 3672665

Browse files
committed
Add automatic first template selection on desktop
1 parent c8b160a commit 3672665

2 files changed

Lines changed: 73 additions & 68 deletions

File tree

app/lib/dialogs/template.dart

Lines changed: 72 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ class _TemplateDialogState extends State<TemplateDialog> {
102102
Widget build(BuildContext context) {
103103
final width = MediaQuery.widthOf(context);
104104
final isMobile = width < LeapBreakpoints.medium;
105-
final detailsTemplate = _clickedTemplate;
106105
final bloc = widget.bloc;
107106
return ResponsiveAlertDialog(
108107
constraints: const BoxConstraints(
@@ -155,62 +154,81 @@ class _TemplateDialogState extends State<TemplateDialog> {
155154
tooltip: LeapLocalizations.of(context).create,
156155
),
157156
],
158-
content: Row(
159-
children: [
160-
Expanded(
161-
flex: 2,
162-
child: FutureBuilder<List<dynamic>>(
163-
future: _combinedFuture,
164-
builder: (context, snapshot) {
165-
if (snapshot.hasError) {
166-
return Text(snapshot.error.toString());
167-
}
168-
if (!snapshot.hasData) {
169-
return const Center(child: CircularProgressIndicator());
170-
}
171-
final userTemplates =
172-
snapshot.data![0] as List<FileSystemFile<NoteData>>;
173-
final coreTemplates = snapshot.data![1] as List<NoteData>;
174-
return BlocBuilder<SettingsCubit, ButterflySettings>(
157+
content: FutureBuilder<List<dynamic>>(
158+
future: _combinedFuture,
159+
builder: (context, snapshot) {
160+
if (snapshot.hasError) {
161+
return Text(snapshot.error.toString());
162+
}
163+
if (!snapshot.hasData) {
164+
return const Center(child: CircularProgressIndicator());
165+
}
166+
final userTemplates =
167+
snapshot.data![0] as List<FileSystemFile<NoteData>>;
168+
final coreTemplates = snapshot.data![1] as List<NoteData>;
169+
final search = _searchController.text.toLowerCase();
170+
final filteredUserTemplates = userTemplates
171+
.where(
172+
(element) =>
173+
element.data!.name?.toLowerCase().contains(search) ?? true,
174+
)
175+
.toList();
176+
final filteredCoreTemplates = coreTemplates
177+
.where(
178+
(element) =>
179+
element.name?.toLowerCase().contains(search) ?? true,
180+
)
181+
.toList();
182+
final detailsTemplate = isMobile
183+
? _clickedTemplate
184+
: _clickedTemplate ??
185+
filteredUserTemplates.firstOrNull?.data ??
186+
filteredCoreTemplates.firstOrNull;
187+
return Row(
188+
children: [
189+
Expanded(
190+
flex: 2,
191+
child: BlocBuilder<SettingsCubit, ButterflySettings>(
175192
buildWhen: (previous, current) =>
176193
previous.favoriteTemplates != current.favoriteTemplates,
177194
builder: (context, state) {
178195
return _buildBody(
179196
context,
180-
userTemplates,
181-
coreTemplates,
197+
filteredUserTemplates,
198+
filteredCoreTemplates,
182199
isMobile,
183200
state.favoriteTemplates,
201+
detailsTemplate,
184202
);
185203
},
186-
);
187-
},
188-
),
189-
),
190-
if (!isMobile)
191-
Expanded(
192-
child: detailsTemplate == null
193-
? Card(
194-
child: Center(
195-
child: Text(
196-
AppLocalizations.of(context).noItemSelected,
204+
),
205+
),
206+
if (!isMobile)
207+
Expanded(
208+
child: detailsTemplate == null
209+
? Card(
210+
child: Center(
211+
child: Text(
212+
AppLocalizations.of(context).noItemSelected,
213+
),
214+
),
215+
)
216+
: _TemplateDetailsView(
217+
template: detailsTemplate,
218+
onOpen: (area) {
219+
openNewDocument(
220+
context,
221+
widget.bloc != null,
222+
detailsTemplate,
223+
_templateSystem.storage?.identifier,
224+
area,
225+
);
226+
},
197227
),
198-
),
199-
)
200-
: _TemplateDetailsView(
201-
template: detailsTemplate,
202-
onOpen: (area) {
203-
openNewDocument(
204-
context,
205-
widget.bloc != null,
206-
detailsTemplate,
207-
_templateSystem.storage?.identifier,
208-
area,
209-
);
210-
},
211-
),
212-
),
213-
],
228+
),
229+
],
230+
);
231+
},
214232
),
215233
);
216234
}
@@ -221,6 +239,7 @@ class _TemplateDialogState extends State<TemplateDialog> {
221239
int index,
222240
bool isMobile,
223241
List<FavoriteLocation> favoriteTemplates,
242+
NoteData? activeTemplate,
224243
) {
225244
final template = entry.value[index];
226245
final isCore = entry.key == null;
@@ -314,7 +333,7 @@ class _TemplateDialogState extends State<TemplateDialog> {
314333
key: ValueKey(template.path),
315334
selectionMode: _selectedTemplates.isNotEmpty,
316335
selected: _selectedTemplates.contains(template.path),
317-
isActive: _clickedTemplate == template.data,
336+
isActive: activeTemplate == template.data,
318337
isCore: isCore,
319338
starred: starred,
320339
location: location,
@@ -342,29 +361,12 @@ class _TemplateDialogState extends State<TemplateDialog> {
342361

343362
Widget _buildBody(
344363
BuildContext context,
345-
List<FileSystemFile<NoteData>> userTemplates,
346-
List<NoteData> coreTemplates,
364+
List<FileSystemFile<NoteData>> filteredUserTemplates,
365+
List<NoteData> filteredCoreTemplates,
347366
bool isMobile,
348367
List<FavoriteLocation> favoriteTemplates,
368+
NoteData? activeTemplate,
349369
) {
350-
final filteredUserTemplates = userTemplates
351-
.where(
352-
(element) =>
353-
element.data!.name?.toLowerCase().contains(
354-
_searchController.text.toLowerCase(),
355-
) ??
356-
true,
357-
)
358-
.toList();
359-
final filteredCoreTemplates = coreTemplates
360-
.where(
361-
(element) =>
362-
element.name?.toLowerCase().contains(
363-
_searchController.text.toLowerCase(),
364-
) ??
365-
true,
366-
)
367-
.toList();
368370
final everythingSelected =
369371
_selectedTemplates.length == filteredUserTemplates.length;
370372
final groupedTemplates = filteredUserTemplates
@@ -416,6 +418,7 @@ class _TemplateDialogState extends State<TemplateDialog> {
416418
index,
417419
isMobile,
418420
favoriteTemplates,
421+
activeTemplate,
419422
),
420423
itemCount: entry.value.length,
421424
)
@@ -435,6 +438,7 @@ class _TemplateDialogState extends State<TemplateDialog> {
435438
index,
436439
isMobile,
437440
favoriteTemplates,
441+
activeTemplate,
438442
),
439443
itemCount: entry.value.length,
440444
),

metadata/en-US/changelogs/183.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Upgrade to flutter 3.44 (Add stylus support for windows)
33
* Use nearest corner hit for selection transforms
44
* Add duplicate layer to multi select options in layers navigator
5+
* Add automatic first template selection on desktop
56
* Fix jagged rendering after changing orientation ([#1094](https://github.com/LinwoodDev/Butterfly/issues/1094))
67
* Fix texture tool configuration scrolling getting stuck ([#1092](https://github.com/LinwoodDev/Butterfly/issues/1092))
78
* Fix temporary tools being cleared after canvas gestures ([#1093](https://github.com/LinwoodDev/Butterfly/issues/1093))

0 commit comments

Comments
 (0)