Skip to content

Commit

Permalink
The char img is now shown in the artifact / weapon page
Browse files Browse the repository at this point in the history
if the item is being used in a character's build
  • Loading branch information
Wolfteam committed Jan 5, 2021
1 parent 89b9c41 commit 3d3e6a1
Show file tree
Hide file tree
Showing 12 changed files with 111 additions and 33 deletions.
3 changes: 3 additions & 0 deletions lib/bloc/artifact_details/artifact_details_bloc.dart
Expand Up @@ -29,6 +29,8 @@ class ArtifactDetailsBloc extends Bloc<ArtifactDetailsEvent, ArtifactDetailsStat
await trackArtifactLoaded(e.key);
final artifact = _genshinService.getArtifact(e.key);
final translation = _genshinService.getArtifactTranslation(e.key);
final charImgs = _genshinService.getCharactersImgUsingArtifact(e.key);

var image = artifact.image.split('.png').first;
image = image.substring(0, image.length - 1);

Expand All @@ -44,6 +46,7 @@ class ArtifactDetailsBloc extends Bloc<ArtifactDetailsEvent, ArtifactDetailsStat
images: translation.bonus.length == 1
? [artifact.fullImagePath]
: artifactOrder.map((e) => Assets.getArtifactPath('$image$e.png')).toList(),
charImages: charImgs,
);
},
);
Expand Down
1 change: 1 addition & 0 deletions lib/bloc/artifact_details/artifact_details_state.dart
Expand Up @@ -11,5 +11,6 @@ abstract class ArtifactDetailsState with _$ArtifactDetailsState {
@required int rarityMax,
@required List<ArtifactCardBonusModel> bonus,
@required List<String> images,
@required List<String> charImages,
}) = _LoadedState;
}
2 changes: 2 additions & 0 deletions lib/bloc/weapon/weapon_bloc.dart
Expand Up @@ -42,6 +42,7 @@ class WeaponBloc extends Bloc<WeaponEvent, WeaponState> {
}

WeaponState _buildInitialState(WeaponFileModel weapon, TranslationWeaponFile translation) {
final charImgs = _genshinService.getCharactersImgUsingWeapon(weapon.key);
return WeaponState.loaded(
name: translation.name,
weaponType: weapon.type,
Expand All @@ -63,6 +64,7 @@ class WeaponBloc extends Bloc<WeaponEvent, WeaponState> {
return WeaponFileRefinementModel(level: e.level, description: description);
},
).toList(),
charImages: charImgs,
);
}
}
1 change: 1 addition & 0 deletions lib/bloc/weapon/weapon_state.dart
Expand Up @@ -15,5 +15,6 @@ abstract class WeaponState with _$WeaponState {
@required ItemLocationType locationType,
@required List<WeaponFileAscentionMaterial> ascentionMaterials,
@required List<WeaponFileRefinementModel> refinements,
@required List<String> charImages,
}) = _LoadedState;
}
3 changes: 0 additions & 3 deletions lib/common/extensions/scroll_controller_extensions.dart
Expand Up @@ -3,9 +3,6 @@ import 'package:flutter/rendering.dart';

extension ScrollControllerExtensions on ScrollController {
void handleScrollForFab(AnimationController hideFabController) {
print(position.userScrollDirection);
print(position.pixels);
print(position.atEdge);
switch (position.userScrollDirection) {
case ScrollDirection.idle:
break;
Expand Down
2 changes: 1 addition & 1 deletion lib/models/db/characters/character_file_model.dart
Expand Up @@ -103,7 +103,7 @@ abstract class CharacterFileArtifactBuild implements _$CharacterFileArtifactBuil

factory CharacterFileArtifactBuild({
String one,
List<CharacterFileArtifactMultipleBuild> multiples,
@required List<CharacterFileArtifactMultipleBuild> multiples,
}) = _CharacterFileArtifactBuild;

CharacterFileArtifactBuild._();
Expand Down
38 changes: 38 additions & 0 deletions lib/services/genshing_service.dart
Expand Up @@ -24,10 +24,12 @@ abstract class GenshinService {
WeaponCardModel getWeaponForCardByImg(String image);
WeaponFileModel getWeapon(String key);
WeaponFileModel getWeaponByImg(String img);
List<String> getCharactersImgUsingWeapon(String key);

List<ArtifactCardModel> getArtifactsForCard();
ArtifactCardModel getArtifactForCardByImg(String image);
ArtifactFileModel getArtifact(String key);
List<String> getCharactersImgUsingArtifact(String key);

TranslationArtifactFile getArtifactTranslation(String key);
TranslationCharacterFile getCharacterTranslation(String key);
Expand Down Expand Up @@ -203,6 +205,23 @@ class GenshinServiceImpl implements GenshinService {
return _weaponsFile.weapons.firstWhere((element) => Assets.getWeaponPath(element.image, element.type) == img);
}

@override
List<String> getCharactersImgUsingWeapon(String key) {
final weapon = getWeapon(key);
final imgs = <String>[];
for (final char in _charactersFile.characters) {
for (final build in char.builds) {
final isBeingUsed = build.weaponImages.contains(weapon.image);
final img = Assets.getCharacterPath(char.image);
if (isBeingUsed && !imgs.contains(img)) {
imgs.add(img);
}
}
}

return imgs;
}

@override
List<ArtifactCardModel> getArtifactsForCard() {
return _artifactsFile.artifacts.map(
Expand Down Expand Up @@ -243,6 +262,25 @@ class GenshinServiceImpl implements GenshinService {
return _artifactsFile.artifacts.firstWhere((a) => a.key == key);
}

@override
List<String> getCharactersImgUsingArtifact(String key) {
final artifact = getArtifact(key);
final imgs = <String>[];
for (final char in _charactersFile.characters) {
for (final build in char.builds) {
final isBeingUsed =
build.artifacts.any((a) => a.one == artifact.image || a.multiples.any((m) => m.image == artifact.image));

final img = Assets.getCharacterPath(char.image);
if (isBeingUsed && !imgs.contains(img)) {
imgs.add(img);
}
}
}

return imgs;
}

@override
TranslationCharacterFile getCharacterTranslation(String key) {
return _translationFile.characters.firstWhere((element) => element.key == key);
Expand Down
15 changes: 13 additions & 2 deletions lib/ui/pages/artifact_details_page.dart
Expand Up @@ -7,6 +7,7 @@ import '../../common/styles.dart';
import '../../generated/l10n.dart';
import '../../models/models.dart';
import '../widgets/artifacts/artifact_stats.dart';
import '../widgets/common/circle_character.dart';
import '../widgets/common/item_description_detail.dart';
import '../widgets/common/loading.dart';
import '../widgets/common/rarity.dart';
Expand All @@ -28,7 +29,7 @@ class ArtifactDetailsPage extends StatelessWidget {
clipBehavior: Clip.none,
children: [
_buildTop(s.name, s.rarityMax, s.image, context),
_buildBottom(s.rarityMax, s.images, s.bonus, context),
_buildBottom(s.rarityMax, s.images, s.bonus, s.charImages, context),
],
),
);
Expand Down Expand Up @@ -99,6 +100,7 @@ class ArtifactDetailsPage extends StatelessWidget {
int rarity,
List<String> images,
List<ArtifactCardBonusModel> bonus,
List<String> charImgs,
BuildContext context,
) {
final s = S.of(context);
Expand All @@ -109,7 +111,7 @@ class ArtifactDetailsPage extends StatelessWidget {
margin: const EdgeInsets.only(top: 300, right: 10, left: 10),
shape: Styles.cardItemDetailShape,
child: Padding(
padding: const EdgeInsets.only(top: 10, right: 10, left: 10),
padding: Styles.edgeInsetAll10,
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Expand All @@ -132,6 +134,15 @@ class ArtifactDetailsPage extends StatelessWidget {
),
textColor: rarity.getRarityColors().last,
),
if (charImgs.isNotEmpty)
ItemDescriptionDetail(
title: s.builds,
body: Wrap(
alignment: WrapAlignment.center,
children: charImgs.map((e) => CircleCharacter(image: e)).toList(),
),
textColor: rarity.getRarityColors().last,
),
],
),
),
Expand Down
16 changes: 14 additions & 2 deletions lib/ui/pages/weapon_page.dart
Expand Up @@ -10,6 +10,7 @@ import '../../common/extensions/rarity_extensions.dart';
import '../../common/styles.dart';
import '../../generated/l10n.dart';
import '../../models/models.dart';
import '../widgets/common/circle_character.dart';
import '../widgets/common/item_description.dart';
import '../widgets/common/item_description_detail.dart';
import '../widgets/common/loading.dart';
Expand Down Expand Up @@ -43,7 +44,7 @@ class WeaponPage extends StatelessWidget {
s.fullImage,
context,
),
_buildBottom(s.description, s.rarity, s.ascentionMaterials, s.refinements, context),
_buildBottom(s.description, s.rarity, s.ascentionMaterials, s.refinements, s.charImages, context),
],
),
);
Expand Down Expand Up @@ -133,16 +134,27 @@ class WeaponPage extends StatelessWidget {
int rarity,
List<WeaponFileAscentionMaterial> ascentionMaterials,
List<WeaponFileRefinementModel> refinements,
List<String> charImgs,
BuildContext context,
) {
final s = S.of(context);
return Card(
margin: const EdgeInsets.only(top: 280, right: 10, left: 10),
shape: Styles.cardItemDetailShape,
child: Padding(
padding: const EdgeInsets.only(top: 10, right: 10, left: 10),
padding: Styles.edgeInsetAll10,
child: Column(
children: [
_buildDescription(description, rarity, context),
if (charImgs.isNotEmpty)
ItemDescriptionDetail(
title: s.builds,
body: Wrap(
alignment: WrapAlignment.center,
children: charImgs.map((e) => CircleCharacter(image: e)).toList(),
),
textColor: rarity.getRarityColors().last,
),
if (ascentionMaterials.isNotEmpty)
WeaponDetailAscentionMaterialsCard(
ascentionMaterials: ascentionMaterials,
Expand Down
2 changes: 1 addition & 1 deletion lib/ui/widgets/characters/character_detail_bottom.dart
Expand Up @@ -24,7 +24,7 @@ class CharacterDetailBottom extends StatelessWidget {
margin: const EdgeInsets.only(top: 380, right: 10, left: 10),
shape: Styles.cardItemDetailShape,
child: Padding(
padding: const EdgeInsets.only(top: 10, right: 10, left: 10),
padding: Styles.edgeInsetAll10,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Expand Down
35 changes: 35 additions & 0 deletions lib/ui/widgets/common/circle_character.dart
@@ -0,0 +1,35 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

import '../../../bloc/bloc.dart';
import '../../pages/character_page.dart';

class CircleCharacter extends StatelessWidget {
final String image;

const CircleCharacter({
Key key,
@required this.image,
}) : super(key: key);

@override
Widget build(BuildContext context) {
return Container(
margin: const EdgeInsets.all(3),
child: InkWell(
onTap: () => _gotoCharacterPage(image, context),
child: CircleAvatar(
radius: 35,
backgroundColor: Colors.transparent,
backgroundImage: AssetImage(image),
),
),
);
}

Future<void> _gotoCharacterPage(String image, BuildContext context) async {
context.read<CharacterBloc>().add(CharacterEvent.loadFromImg(image: image));
final route = MaterialPageRoute(builder: (c) => const CharacterPage());
await Navigator.push(context, route);
}
}
26 changes: 2 additions & 24 deletions lib/ui/widgets/home/char_card_ascention_material.dart
@@ -1,11 +1,9 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

import '../../../bloc/bloc.dart';
import '../../../common/extensions/i18n_extensions.dart';
import '../../../common/styles.dart';
import '../../../generated/l10n.dart';
import '../../pages/character_page.dart';
import '../common/circle_character.dart';

class CharCardAscentionMaterial extends StatelessWidget {
final String name;
Expand Down Expand Up @@ -36,21 +34,7 @@ class CharCardAscentionMaterial extends StatelessWidget {
Widget build(BuildContext context) {
final s = S.of(context);
final theme = Theme.of(context);
final chars = charImgs
.map(
(e) => Container(
margin: const EdgeInsets.all(3),
child: InkWell(
onTap: () => _gotoCharacterPage(e, context),
child: CircleAvatar(
radius: 35,
backgroundColor: Colors.transparent,
backgroundImage: AssetImage(e),
),
),
),
)
.toList();
final chars = charImgs.map((e) => CircleCharacter(image: e)).toList();
final obtainOn = days.isNotEmpty ? s.translateDays(days) : bossName;

return Card(
Expand Down Expand Up @@ -102,10 +86,4 @@ class CharCardAscentionMaterial extends StatelessWidget {
),
);
}

Future<void> _gotoCharacterPage(String image, BuildContext context) async {
context.read<CharacterBloc>().add(CharacterEvent.loadFromImg(image: image));
final route = MaterialPageRoute(builder: (c) => const CharacterPage());
await Navigator.push(context, route);
}
}

0 comments on commit 3d3e6a1

Please sign in to comment.