Skip to content

Commit

Permalink
[Presentation] Added an option to set the axis size on the loading an…
Browse files Browse the repository at this point in the history
…d nothing found columns
  • Loading branch information
Wolfteam committed May 23, 2022
1 parent 0c47420 commit ec36cb3
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 31 deletions.
39 changes: 21 additions & 18 deletions lib/presentation/shared/dialogs/birthdays_per_month_dialog.dart
Expand Up @@ -9,6 +9,7 @@ import 'package:shiori/injection.dart';
import 'package:shiori/presentation/shared/dialogs/dialog_list_item_row.dart';
import 'package:shiori/presentation/shared/extensions/media_query_extensions.dart';
import 'package:shiori/presentation/shared/loading.dart';
import 'package:shiori/presentation/shared/nothing_found_column.dart';

class BirthdaysPerMonthDialog extends StatelessWidget {
final int month;
Expand Down Expand Up @@ -48,24 +49,26 @@ class BirthdaysPerMonthDialog extends StatelessWidget {
],
content: BlocBuilder<BirthdaysPerMonthBloc, BirthdaysPerMonthState>(
builder: (context, state) => state.maybeMap(
loaded: (state) => SizedBox(
height: mq.getHeightForDialogs(state.characters.length + state.characters.length ~/ 2),
width: mq.getWidthForDialogs(),
child: ListView.builder(
itemCount: state.characters.length,
itemBuilder: (context, index) {
final char = state.characters[index];
return DialogListItemRow(
itemType: ItemType.character,
itemKey: char.key,
image: char.image,
name: char.name,
getRowEndWidget: (_) => _RowEndColumn(character: char),
);
},
),
),
orElse: () => const Loading(useScaffold: false),
loaded: (state) => state.characters.isEmpty
? const NothingFoundColumn(mainAxisSize: MainAxisSize.min)
: SizedBox(
height: mq.getHeightForDialogs(state.characters.length + state.characters.length ~/ 2),
width: mq.getWidthForDialogs(),
child: ListView.builder(
itemCount: state.characters.length,
itemBuilder: (context, index) {
final char = state.characters[index];
return DialogListItemRow(
itemType: ItemType.character,
itemKey: char.key,
image: char.image,
name: char.name,
getRowEndWidget: (_) => _RowEndColumn(character: char),
);
},
),
),
orElse: () => const Loading(useScaffold: false, mainAxisSize: MainAxisSize.min),
),
),
),
Expand Down
2 changes: 1 addition & 1 deletion lib/presentation/shared/dialogs/changelog_dialog.dart
Expand Up @@ -22,7 +22,7 @@ class ChangelogDialog extends StatelessWidget {
child: SingleChildScrollView(
child: BlocBuilder<ChangelogBloc, ChangelogState>(
builder: (ctx, state) => state.map(
loading: (_) => const Loading(useScaffold: false),
loading: (_) => const Loading(useScaffold: false, mainAxisSize: MainAxisSize.min),
loadedState: (state) => MarkdownBody(data: state.changelog),
),
),
Expand Down
Expand Up @@ -49,7 +49,7 @@ class CharactersPerRegionDialog extends StatelessWidget {
content: BlocBuilder<CharactersPerRegionBloc, CharactersPerRegionState>(
builder: (context, state) => state.maybeMap(
loaded: (state) => state.items.isEmpty
? const NothingFoundColumn()
? const NothingFoundColumn(mainAxisSize: MainAxisSize.min)
: SizedBox(
height: mq.getHeightForDialogs(state.items.length + 1),
width: mq.getWidthForDialogs(),
Expand All @@ -58,7 +58,7 @@ class CharactersPerRegionDialog extends StatelessWidget {
itemBuilder: (context, index) => DialogListItemRow.fromItem(itemType: ItemType.character, item: state.items[index]),
),
),
orElse: () => const Loading(useScaffold: false),
orElse: () => const Loading(useScaffold: false, mainAxisSize: MainAxisSize.min),
),
),
),
Expand Down
21 changes: 12 additions & 9 deletions lib/presentation/shared/dialogs/items_ascension_stats_dialog.dart
Expand Up @@ -8,6 +8,7 @@ import 'package:shiori/presentation/shared/dialogs/dialog_list_item_row.dart';
import 'package:shiori/presentation/shared/extensions/i18n_extensions.dart';
import 'package:shiori/presentation/shared/extensions/media_query_extensions.dart';
import 'package:shiori/presentation/shared/loading.dart';
import 'package:shiori/presentation/shared/nothing_found_column.dart';

class ItemsAscensionStatsDialog extends StatelessWidget {
final ItemType itemType;
Expand Down Expand Up @@ -50,15 +51,17 @@ class ItemsAscensionStatsDialog extends StatelessWidget {
],
content: BlocBuilder<ItemsAscensionStatsBloc, ItemsAscensionStatsState>(
builder: (context, state) => state.maybeMap(
loaded: (state) => SizedBox(
height: mq.getHeightForDialogs(state.items.length + 1),
width: mq.getWidthForDialogs(),
child: ListView.builder(
itemCount: state.items.length,
itemBuilder: (context, index) => DialogListItemRow.fromItem(itemType: itemType, item: state.items[index]),
),
),
orElse: () => const Loading(useScaffold: false),
loaded: (state) => state.items.isEmpty
? const NothingFoundColumn(mainAxisSize: MainAxisSize.min)
: SizedBox(
height: mq.getHeightForDialogs(state.items.length + 1),
width: mq.getWidthForDialogs(),
child: ListView.builder(
itemCount: state.items.length,
itemBuilder: (context, index) => DialogListItemRow.fromItem(itemType: itemType, item: state.items[index]),
),
),
orElse: () => const Loading(useScaffold: false, mainAxisSize: MainAxisSize.min),
),
),
),
Expand Down
8 changes: 7 additions & 1 deletion lib/presentation/shared/loading.dart
Expand Up @@ -3,13 +3,19 @@ import 'package:shiori/generated/l10n.dart';

class Loading extends StatelessWidget {
final bool useScaffold;
const Loading({this.useScaffold = true});
final MainAxisSize mainAxisSize;

const Loading({
this.useScaffold = true,
this.mainAxisSize = MainAxisSize.max,
});

@override
Widget build(BuildContext context) {
final s = S.of(context);
final body = Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: mainAxisSize,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
const Center(
Expand Down
3 changes: 3 additions & 0 deletions lib/presentation/shared/nothing_found_column.dart
Expand Up @@ -6,17 +6,20 @@ class NothingFoundColumn extends StatelessWidget {
final String? msg;
final IconData icon;
final EdgeInsets padding;
final MainAxisSize mainAxisSize;

const NothingFoundColumn({
this.msg,
this.icon = Icons.info,
this.padding = const EdgeInsets.only(bottom: 30, right: 20, left: 20),
this.mainAxisSize = MainAxisSize.max,
});

@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: mainAxisSize,
children: [NothingFound(msg: msg, icon: icon, padding: padding)],
);
}
Expand Down

0 comments on commit ec36cb3

Please sign in to comment.