Skip to content

Commit c024ab0

Browse files
committed
Fix bundled packs bloc builder
1 parent 893649f commit c024ab0

File tree

3 files changed

+79
-60
lines changed

3 files changed

+79
-60
lines changed

app/lib/dialogs/packs/bundled.dart

Lines changed: 76 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:butterfly/api/file_system.dart';
22
import 'package:butterfly/bloc/document_bloc.dart';
33
import 'package:butterfly/dialogs/import/confirmation.dart';
4+
import 'package:butterfly/models/defaults.dart';
45
import 'package:butterfly/src/generated/i18n/app_localizations.dart';
56
import 'package:butterfly_api/butterfly_api.dart';
67
import 'package:collection/collection.dart';
@@ -27,9 +28,10 @@ class _BundledPacksDialogState extends State<BundledPacksDialog> {
2728
onPressed: () => Navigator.of(context).pop(),
2829
icon: const PhosphorIcon(PhosphorIconsLight.x),
2930
),
30-
constraints: const BoxConstraints(maxWidth: LeapBreakpoints.compact),
31-
content: Column(
32-
mainAxisSize: MainAxisSize.min,
31+
constraints: const BoxConstraints(
32+
maxWidth: LeapBreakpoints.compact, maxHeight: 700),
33+
content: ListView(
34+
shrinkWrap: true,
3335
children: [
3436
Card(
3537
child: Padding(
@@ -62,62 +64,79 @@ class _BundledPacksDialogState extends State<BundledPacksDialog> {
6264
),
6365
),
6466
const SizedBox(height: 8),
65-
Flexible(
66-
child: BlocBuilder<DocumentBloc, DocumentState>(
67-
buildWhen: (previous, current) => ListEquality().equals(
68-
previous.data?.getBundledPacks().toList() ?? [],
69-
current.data?.getBundledPacks().toList() ?? []),
70-
builder: (context, state) {
71-
final packs = state.data?.getBundledPacks().toList() ?? [];
72-
if (packs.isEmpty) {
73-
return Padding(
74-
padding: const EdgeInsets.all(8),
75-
child: Text(
76-
AppLocalizations.of(context).noPacks,
77-
style: TextTheme.of(context).bodyMedium,
78-
),
79-
);
80-
}
81-
return ListView.builder(
82-
shrinkWrap: true,
83-
itemCount: packs.length,
84-
itemBuilder: (context, index) {
85-
final name = packs[index];
86-
final pack = state.data?.getBundledPack(name);
87-
return ListTile(
88-
title: Text(name),
89-
subtitle: Text(pack?.getMetadata()?.description ?? ''),
90-
onTap: () async {
91-
final packSystem = context
92-
.read<ButterflyFileSystem>()
93-
.buildDefaultPackSystem();
94-
final metadata = pack?.getMetadata();
95-
if (pack == null || metadata == null) return;
96-
final result = await showDialog(
97-
context: context,
98-
builder: (context) => PackImportConfirmationDialog(
99-
pack: metadata,
67+
BlocBuilder<DocumentBloc, DocumentState>(
68+
buildWhen: (previous, current) => !ListEquality().equals(
69+
previous.data?.getBundledPacks().toList() ?? [],
70+
current.data?.getBundledPacks().toList() ?? []),
71+
builder: (context, state) {
72+
final packs = state.data?.getBundledPacks().toList() ?? [];
73+
if (packs.isEmpty) {
74+
return Padding(
75+
padding: const EdgeInsets.all(8),
76+
child: Text(
77+
AppLocalizations.of(context).noPacks,
78+
style: TextTheme.of(context).bodyMedium,
79+
),
80+
);
81+
}
82+
return ListView.builder(
83+
shrinkWrap: true,
84+
itemCount: packs.length,
85+
physics: const NeverScrollableScrollPhysics(),
86+
itemBuilder: (context, index) {
87+
final name = packs[index];
88+
final pack = state.data?.getBundledPack(name);
89+
final metadata = pack?.getMetadata() ??
90+
DocumentDefaults.createMetadata();
91+
return ListTile(
92+
title: Text(name),
93+
subtitle: Column(
94+
crossAxisAlignment: CrossAxisAlignment.start,
95+
children: [
96+
if (metadata.author.isNotEmpty)
97+
Text(
98+
AppLocalizations.of(
99+
context,
100+
).byAuthor(
101+
metadata.author,
102+
),
100103
),
101-
);
102-
if (result != true) return;
103-
await packSystem.createFileWithName(
104-
pack,
105-
name: name,
106-
suffix: '.bfly',
107-
);
108-
widget.onRefresh?.call();
104+
if (metadata.description.isNotEmpty)
105+
Text(
106+
metadata.description,
107+
),
108+
],
109+
),
110+
onTap: () async {
111+
final packSystem = context
112+
.read<ButterflyFileSystem>()
113+
.buildDefaultPackSystem();
114+
final metadata = pack?.getMetadata();
115+
if (pack == null || metadata == null) return;
116+
final result = await showDialog(
117+
context: context,
118+
builder: (context) => PackImportConfirmationDialog(
119+
pack: metadata,
120+
),
121+
);
122+
if (result != true) return;
123+
await packSystem.createFileWithName(
124+
pack,
125+
name: name,
126+
suffix: '.bfly',
127+
);
128+
widget.onRefresh?.call();
129+
},
130+
trailing: IconButton(
131+
icon: const Icon(PhosphorIconsLight.trash),
132+
onPressed: () {
133+
context.read<DocumentBloc>().add(PackRemoved(name));
109134
},
110-
trailing: IconButton(
111-
icon: const Icon(PhosphorIconsLight.trash),
112-
onPressed: () {
113-
context.read<DocumentBloc>().add(PackRemoved(name));
114-
},
115-
),
116-
);
117-
},
118-
);
119-
}),
120-
),
135+
),
136+
);
137+
},
138+
);
139+
}),
121140
],
122141
),
123142
);

app/lib/dialogs/packs/dialog.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@ class _PacksDialogState extends State<PacksDialog>
119119
itemBuilder: (context, index) {
120120
final file = globalPacks[index];
121121
final pack = file.data!;
122-
final metadata = pack.getMetadata();
123-
if (metadata == null) return Container();
122+
final metadata = pack.getMetadata() ??
123+
DocumentDefaults.createMetadata();
124124
return Dismissible(
125125
key: ValueKey((
126126
'globalpack',

app/lib/selections/properties/pen.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class PenPropertySelection extends PropertySelection<PenProperty>
3636
),
3737
ExactSlider(
3838
value: property.fill.a.toDouble(),
39-
header: Text(AppLocalizations.of(context).alpha),
39+
header: Text(AppLocalizations.of(context).fillAlpha),
4040
fractionDigits: 0,
4141
max: 255,
4242
min: 0,

0 commit comments

Comments
 (0)