1
1
import 'package:butterfly/api/file_system.dart' ;
2
2
import 'package:butterfly/bloc/document_bloc.dart' ;
3
3
import 'package:butterfly/dialogs/import/confirmation.dart' ;
4
+ import 'package:butterfly/models/defaults.dart' ;
4
5
import 'package:butterfly/src/generated/i18n/app_localizations.dart' ;
5
6
import 'package:butterfly_api/butterfly_api.dart' ;
6
7
import 'package:collection/collection.dart' ;
@@ -27,9 +28,10 @@ class _BundledPacksDialogState extends State<BundledPacksDialog> {
27
28
onPressed: () => Navigator .of (context).pop (),
28
29
icon: const PhosphorIcon (PhosphorIconsLight .x),
29
30
),
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 ,
33
35
children: [
34
36
Card (
35
37
child: Padding (
@@ -62,62 +64,79 @@ class _BundledPacksDialogState extends State<BundledPacksDialog> {
62
64
),
63
65
),
64
66
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
+ ),
100
103
),
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));
109
134
},
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
+ }),
121
140
],
122
141
),
123
142
);
0 commit comments