Skip to content

Commit

Permalink
With this the monsters are shown in the artifact and material pages
Browse files Browse the repository at this point in the history
  • Loading branch information
Wolfteam committed Mar 28, 2021
1 parent 2062fd1 commit e9fd452
Show file tree
Hide file tree
Showing 18 changed files with 150 additions and 36 deletions.
11 changes: 9 additions & 2 deletions lib/application/artifact/artifact_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class ArtifactBloc extends PopBloc<ArtifactEvent, ArtifactState> {
final artifact = _genshinService.getArtifact(e.key);
final translation = _genshinService.getArtifactTranslation(e.key);
final charImgs = _genshinService.getCharacterImgsUsingArtifact(e.key);
final droppedBy = _genshinService.getRelatedMonsterImgsToArtifact(e.key);

var image = artifact.image.split('.png').first;
image = image.substring(0, image.length - 1);
Expand All @@ -50,9 +51,15 @@ class ArtifactBloc extends PopBloc<ArtifactEvent, ArtifactState> {
final pieces = artifact.bonus.firstWhere((b) => b.key == t.key).pieces;
return ArtifactCardBonusModel(pieces: pieces, bonus: t.bonus);
}).toList(),
images:
translation.bonus.length == 1 ? [artifact.fullImagePath] : artifactOrder.map((e) => Assets.getArtifactPath('$image$e.png')).toList(),
images: translation.bonus.length == 1
? [artifact.fullImagePath]
: artifactOrder
.map(
(e) => Assets.getArtifactPath('$image$e.png'),
)
.toList(),
charImages: charImgs,
droppedBy: droppedBy,
);
},
);
Expand Down
1 change: 1 addition & 0 deletions lib/application/artifact/artifact_state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@ abstract class ArtifactState with _$ArtifactState {
@required List<ArtifactCardBonusModel> bonus,
@required List<String> images,
@required List<String> charImages,
@required List<String> droppedBy,
}) = _LoadedState;
}
2 changes: 2 additions & 0 deletions lib/application/material/material_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ class MaterialBloc extends PopBloc<MaterialEvent, MaterialState> {
final charImgs = _genshinService.getCharacterImgsUsingMaterial(material.key);
final weaponImgs = _genshinService.getWeaponImgsUsingMaterial(material.key);
final relatedMaterials = _genshinService.getRelatedMaterialImgsToMaterial(material.key);
final droppedBy = _genshinService.getRelatedMonsterImgsToMaterial(material.key);
return MaterialState.loaded(
name: translation.name,
fullImage: material.fullImagePath,
Expand All @@ -62,6 +63,7 @@ class MaterialBloc extends PopBloc<MaterialEvent, MaterialState> {
days: material.days,
obtainedFrom: material.obtainedFrom,
relatedMaterials: relatedMaterials,
droppedBy: droppedBy,
);
}
}
1 change: 1 addition & 0 deletions lib/application/material/material_state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ abstract class MaterialState implements _$MaterialState {
@required List<int> days,
@required List<ObtainedFromFileModel> obtainedFrom,
@required List<String> relatedMaterials,
@required List<String> droppedBy,
}) = _LoadedState;
}
2 changes: 2 additions & 0 deletions lib/domain/services/genshin_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ abstract class GenshinService {
List<String> getCharacterImgsUsingMaterial(String key);
List<String> getWeaponImgsUsingMaterial(String key);
List<String> getRelatedMaterialImgsToMaterial(String key);
List<String> getRelatedMonsterImgsToMaterial(String key);
List<String> getRelatedMonsterImgsToArtifact(String key);

TranslationArtifactFile getArtifactTranslation(String key);
TranslationCharacterFile getCharacterTranslation(String key);
Expand Down
26 changes: 26 additions & 0 deletions lib/infrastructure/genshin_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -542,6 +542,32 @@ class GenshinServiceImpl implements GenshinService {
return mp.values.toList();
}

@override
List<String> getRelatedMonsterImgsToMaterial(String key) {
final material = getMaterial(key);
final images = <String>[];
for (final monster in _monstersFile.monsters) {
if (!monster.drops.any((el) => material.image.contains(el))) {
continue;
}
images.add(monster.fullImagePath);
}
return images;
}

@override
List<String> getRelatedMonsterImgsToArtifact(String key) {
final artifact = getArtifact(key);
final images = <String>[];
for (final monster in _monstersFile.monsters) {
if (!monster.drops.any((el) => artifact.image.contains(el.replaceAll('.png', '')))) {
continue;
}
images.add(monster.fullImagePath);
}
return images;
}

CharacterCardModel _toCharacterForCard(CharacterFileModel character) {
final translation = getCharacterTranslation(character.key);

Expand Down
13 changes: 12 additions & 1 deletion lib/presentation/artifact/artifact_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:genshindb/domain/models/models.dart';
import 'package:genshindb/generated/l10n.dart';
import 'package:genshindb/presentation/artifacts/widgets/artifact_stats.dart';
import 'package:genshindb/presentation/shared/circle_character.dart';
import 'package:genshindb/presentation/shared/circle_monster.dart';
import 'package:genshindb/presentation/shared/extensions/rarity_extensions.dart';
import 'package:genshindb/presentation/shared/item_description_detail.dart';
import 'package:genshindb/presentation/shared/loading.dart';
Expand All @@ -28,7 +29,7 @@ class ArtifactPage extends StatelessWidget {
clipBehavior: Clip.none,
children: [
_buildTop(s.name, s.rarityMax, s.image, context),
_buildBottom(s.rarityMax, s.images, s.bonus, s.charImages, context),
_buildBottom(s.rarityMax, s.images, s.bonus, s.charImages, s.droppedBy, context),
],
),
);
Expand Down Expand Up @@ -100,6 +101,7 @@ class ArtifactPage extends StatelessWidget {
List<String> images,
List<ArtifactCardBonusModel> bonus,
List<String> charImgs,
List<String> droppedBy,
BuildContext context,
) {
final s = S.of(context);
Expand Down Expand Up @@ -140,6 +142,15 @@ class ArtifactPage extends StatelessWidget {
),
textColor: rarity.getRarityColors().last,
),
if (droppedBy.isNotEmpty)
ItemDescriptionDetail(
title: s.droppedBy,
body: Wrap(
alignment: WrapAlignment.center,
children: droppedBy.map((e) => CircleMonster(image: e)).toList(),
),
textColor: rarity.getRarityColors().last,
),
],
),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,5 @@ class CalculatorAscensionMaterialsPage extends StatelessWidget {
Future<void> _showReorderDialog(List<ItemAscensionMaterials> items, BuildContext context) async {
context.read<CalculatorAscMaterialsOrderBloc>().add(CalculatorAscMaterialsOrderEvent.init(sessionKey: sessionKey, items: items));
await showDialog(context: context, builder: (_) => ReorderItemsDialog());
context.read<CalculatorAscMaterialsOrderBloc>().add(const CalculatorAscMaterialsOrderEvent.discardChanges());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,6 @@ class _CalculatorSessionsPageState extends State<CalculatorSessionsPage> with Si
Future<void> _showReorderDialog(List<CalculatorSessionModel> sessions, BuildContext context) async {
context.read<CalculatorAscMaterialsSessionsOrderBloc>().add(CalculatorAscMaterialsSessionsOrderEvent.init(sessions: sessions));
await showDialog(context: context, builder: (_) => ReorderSessionsDialog());
context.read<CalculatorAscMaterialsSessionsOrderBloc>().add(const CalculatorAscMaterialsSessionsOrderEvent.discardChanges());
}

Future<void> _showInfoDialog(BuildContext context) async {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,5 +91,6 @@ class SessionListItem extends StatelessWidget {
await Navigator.push(context, route);
await route.completed;
context.read<CalculatorAscMaterialsBloc>().add(const CalculatorAscMaterialsEvent.close());
context.read<CalculatorAscMaterialsOrderBloc>().add(const CalculatorAscMaterialsOrderEvent.discardChanges());
}
}
1 change: 1 addition & 0 deletions lib/presentation/home/widgets/sliver_calculators_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,6 @@ class SliverCalculatorsCard extends StatelessWidget {
await Navigator.push(context, route);
await route.completed;
context.read<CalculatorAscMaterialsSessionsBloc>().add(const CalculatorAscMaterialsSessionsEvent.close());
context.read<CalculatorAscMaterialsSessionsOrderBloc>().add(const CalculatorAscMaterialsSessionsOrderEvent.discardChanges());
}
}
2 changes: 1 addition & 1 deletion lib/presentation/material/material_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import 'package:genshindb/presentation/shared/scaffold_with_fab.dart';
import 'widgets/material_detail_bottom.dart';
import 'widgets/material_detail_top.dart';

//TODO: BOSSES
class MaterialPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
Expand All @@ -32,6 +31,7 @@ class MaterialPage extends StatelessWidget {
weaponImgs: s.weaponImages,
obtainedFrom: s.obtainedFrom,
relatedTo: s.relatedMaterials,
droppedBy: s.droppedBy,
),
],
),
Expand Down
12 changes: 12 additions & 0 deletions lib/presentation/material/widgets/material_detail_bottom.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:genshindb/domain/extensions/string_extensions.dart';
import 'package:genshindb/domain/models/models.dart';
import 'package:genshindb/generated/l10n.dart';
import 'package:genshindb/presentation/shared/circle_character.dart';
import 'package:genshindb/presentation/shared/circle_monster.dart';
import 'package:genshindb/presentation/shared/circle_weapon.dart';
import 'package:genshindb/presentation/shared/extensions/rarity_extensions.dart';
import 'package:genshindb/presentation/shared/item_description_detail.dart';
Expand All @@ -18,6 +19,7 @@ class MaterialDetailBottom extends StatelessWidget {
final List<String> weaponImgs;
final List<ObtainedFromFileModel> obtainedFrom;
final List<String> relatedTo;
final List<String> droppedBy;

const MaterialDetailBottom({
Key key,
Expand All @@ -27,6 +29,7 @@ class MaterialDetailBottom extends StatelessWidget {
@required this.weaponImgs,
@required this.obtainedFrom,
@required this.relatedTo,
@required this.droppedBy,
}) : super(key: key);

@override
Expand Down Expand Up @@ -77,6 +80,15 @@ class MaterialDetailBottom extends StatelessWidget {
),
textColor: rarityColor,
),
if (droppedBy.isNotEmpty)
ItemDescriptionDetail(
title: s.droppedBy,
body: Wrap(
alignment: WrapAlignment.center,
children: droppedBy.map((e) => CircleMonster(image: e)).toList(),
),
textColor: rarityColor,
),
],
),
),
Expand Down
6 changes: 5 additions & 1 deletion lib/presentation/monsters/widgets/monster_card.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import 'package:flutter/material.dart';
import 'package:genshindb/domain/enums/enums.dart';
import 'package:genshindb/domain/models/models.dart';
import 'package:genshindb/generated/l10n.dart';
import 'package:genshindb/presentation/shared/comingsoon_new_avatar.dart';
import 'package:genshindb/presentation/shared/styles.dart';
import 'package:genshindb/presentation/shared/utils/toast_utils.dart';
import 'package:transparent_image/transparent_image.dart';

class MonsterCard extends StatelessWidget {
Expand Down Expand Up @@ -34,8 +36,10 @@ class MonsterCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
final s = S.of(context);
return InkWell(
borderRadius: Styles.mainCardBorderRadius,
onTap: () => ToastUtils.showWarningToast(s.comingSoon),
child: Card(
clipBehavior: Clip.hardEdge,
shape: Styles.mainCardShape,
Expand Down Expand Up @@ -66,7 +70,7 @@ class MonsterCard extends StatelessWidget {
child: Text(
name,
textAlign: TextAlign.center,
style: theme.textTheme.subtitle1.copyWith(fontWeight: FontWeight.bold, color: Colors.white),
style: theme.textTheme.subtitle1.copyWith(fontWeight: FontWeight.bold),
),
),
),
Expand Down
23 changes: 7 additions & 16 deletions lib/presentation/shared/circle_character.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:genshindb/application/bloc.dart';
import 'package:genshindb/presentation/character/character_page.dart';

import 'circle_item.dart';

class CircleCharacter extends StatelessWidget {
final String image;
final double radius;
Expand All @@ -19,26 +21,15 @@ class CircleCharacter extends StatelessWidget {

@override
Widget build(BuildContext context) {
final avatar = CircleAvatar(
return CircleItem(
image: image,
forDrag: forDrag,
onTap: (_) => _gotoCharacterPage(context),
radius: radius,
backgroundColor: Colors.transparent,
backgroundImage: AssetImage(image),
);
if (forDrag) {
return avatar;
}

return Container(
margin: const EdgeInsets.all(3),
child: InkWell(
borderRadius: BorderRadius.circular(radius),
onTap: () => onTap != null ? onTap(image) : _gotoCharacterPage(image, context),
child: avatar,
),
);
}

Future<void> _gotoCharacterPage(String image, BuildContext context) async {
Future<void> _gotoCharacterPage(BuildContext context) async {
final bloc = context.read<CharacterBloc>();
bloc.add(CharacterEvent.loadFromImg(image: image));
final route = MaterialPageRoute(builder: (c) => const CharacterPage());
Expand Down
37 changes: 37 additions & 0 deletions lib/presentation/shared/circle_item.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import 'package:flutter/material.dart';

class CircleItem extends StatelessWidget {
final String image;
final double radius;
final bool forDrag;
final Function(String) onTap;

const CircleItem({
Key key,
@required this.image,
this.radius = 35,
this.forDrag = false,
this.onTap,
}) : super(key: key);

@override
Widget build(BuildContext context) {
final avatar = CircleAvatar(
radius: radius,
backgroundColor: Colors.transparent,
backgroundImage: AssetImage(image),
);
if (forDrag) {
return avatar;
}

return Container(
margin: const EdgeInsets.all(3),
child: InkWell(
borderRadius: BorderRadius.circular(radius),
onTap: () => onTap != null ? onTap(image) : {},
child: avatar,
),
);
}
}
26 changes: 26 additions & 0 deletions lib/presentation/shared/circle_monster.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import 'package:flutter/material.dart';
import 'package:genshindb/generated/l10n.dart';
import 'package:genshindb/presentation/shared/utils/toast_utils.dart';

import 'circle_item.dart';

class CircleMonster extends StatelessWidget {
final String image;
final double radius;

const CircleMonster({
Key key,
@required this.image,
this.radius = 35,
}) : super(key: key);

@override
Widget build(BuildContext context) {
final s = S.of(context);
return CircleItem(
image: image,
radius: radius,
onTap: (_) => ToastUtils.showWarningToast(s.comingSoon),
);
}
}
20 changes: 7 additions & 13 deletions lib/presentation/shared/circle_weapon.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:genshindb/application/bloc.dart';
import 'package:genshindb/presentation/weapon/weapon_page.dart';

import 'circle_item.dart';

class CircleWeapon extends StatelessWidget {
final String image;
final double radius;
Expand All @@ -19,23 +21,15 @@ class CircleWeapon extends StatelessWidget {

@override
Widget build(BuildContext context) {
final avatar = CircleAvatar(
return CircleItem(
image: image,
radius: radius,
backgroundColor: Colors.transparent,
backgroundImage: AssetImage(image),
);

return Container(
margin: const EdgeInsets.all(3),
child: InkWell(
borderRadius: BorderRadius.circular(radius),
onTap: () => onTap != null ? onTap(image) : _gotoWeaponPage(image, context),
child: avatar,
),
forDrag: forDrag,
onTap: (_) => _gotoWeaponPage(context),
);
}

Future<void> _gotoWeaponPage(String image, BuildContext context) async {
Future<void> _gotoWeaponPage(BuildContext context) async {
final bloc = context.read<WeaponBloc>();
bloc.add(WeaponEvent.loadFromImg(image: image));
final route = MaterialPageRoute(builder: (c) => WeaponPage());
Expand Down

0 comments on commit e9fd452

Please sign in to comment.