Skip to content

Commit

Permalink
The weapon page now shows the crafting materials for weapons that can…
Browse files Browse the repository at this point in the history
… be crafted
  • Loading branch information
Wolfteam committed Feb 27, 2021
1 parent 7fb83ea commit 79d297d
Show file tree
Hide file tree
Showing 10 changed files with 69 additions and 4 deletions.
1 change: 1 addition & 0 deletions lib/application/weapon/weapon_bloc.dart
Expand Up @@ -65,6 +65,7 @@ class WeaponBloc extends Bloc<WeaponEvent, WeaponState> {
).toList(),
charImages: charImgs,
stats: weapon.stats,
craftingMaterials: weapon.craftingMaterials ?? [],
);
}
}
1 change: 1 addition & 0 deletions lib/application/weapon/weapon_state.dart
Expand Up @@ -17,5 +17,6 @@ abstract class WeaponState with _$WeaponState {
@required List<WeaponFileRefinementModel> refinements,
@required List<String> charImages,
@required List<WeaponFileStatModel> stats,
@required List<WeaponCraftedFileModel> craftingMaterials,
}) = _LoadedState;
}
19 changes: 19 additions & 0 deletions lib/domain/models/db/weapons/weapon_file_model.dart
@@ -1,4 +1,5 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:genshindb/domain/enums/enums.dart';

import '../../../assets.dart';
import '../../../enums/item_location_type.dart';
Expand All @@ -7,6 +8,7 @@ import '../../../enums/weapon_type.dart';
import '../../models.dart';

part 'weapon_file_model.freezed.dart';

part 'weapon_file_model.g.dart';

@freezed
Expand All @@ -27,6 +29,7 @@ abstract class WeaponFileModel implements _$WeaponFileModel {
@required List<WeaponFileAscensionMaterial> ascensionMaterials,
@required List<WeaponFileRefinement> refinements,
@required List<WeaponFileStatModel> stats,
List<WeaponCraftedFileModel> craftingMaterials,
}) = _WeaponFileModel;

WeaponFileModel._();
Expand Down Expand Up @@ -71,3 +74,19 @@ abstract class WeaponFileStatModel implements _$WeaponFileStatModel {

factory WeaponFileStatModel.fromJson(Map<String, dynamic> json) => _$WeaponFileStatModelFromJson(json);
}

@freezed
abstract class WeaponCraftedFileModel implements _$WeaponCraftedFileModel {
@late
String get fullImagePath => Assets.getMaterialPath(image, materialType);

factory WeaponCraftedFileModel({
@required int quantity,
@required MaterialType materialType,
@required String image,
}) = _WeaponCraftedFileModel;

WeaponCraftedFileModel._();

factory WeaponCraftedFileModel.fromJson(Map<String, dynamic> json) => _$WeaponCraftedFileModelFromJson(json);
}
3 changes: 2 additions & 1 deletion lib/l10n/intl_en.arb
Expand Up @@ -213,5 +213,6 @@
"electro": "Electro",
"geo": "Geo",
"pyro": "Pyro",
"hydro": "Hydro"
"hydro": "Hydro",
"craftingMaterials": "Crafting materials"
}
3 changes: 2 additions & 1 deletion lib/l10n/intl_es_ES.arb
Expand Up @@ -212,5 +212,6 @@
"electro": "Electro",
"geo": "Geo",
"pyro": "Pyro",
"hydro": "Hydro"
"hydro": "Hydro",
"craftingMaterials": "Materiales de elaboración"
}
3 changes: 2 additions & 1 deletion lib/l10n/intl_fr.arb
Expand Up @@ -213,5 +213,6 @@
"electro": "Electro",
"geo": "Geo",
"pyro": "Pyro",
"hydro": "Hydro"
"hydro": "Hydro",
"craftingMaterials": "Crafting materials"
}
4 changes: 3 additions & 1 deletion lib/presentation/shared/wrapped_ascension_material.dart
Expand Up @@ -3,10 +3,12 @@ import 'package:flutter/material.dart';
class WrappedAscensionMaterial extends StatelessWidget {
final String image;
final int quantity;
final double size;
const WrappedAscensionMaterial({
Key key,
@required this.image,
@required this.quantity,
this.size = 30,
}) : super(key: key);

@override
Expand All @@ -15,7 +17,7 @@ class WrappedAscensionMaterial extends StatelessWidget {
crossAxisAlignment: WrapCrossAlignment.center,
alignment: WrapAlignment.center,
children: [
Image.asset(image, width: 30, height: 30),
Image.asset(image, width: size, height: size),
Container(
margin: const EdgeInsets.only(left: 5, right: 10),
child: Text('x $quantity'),
Expand Down
1 change: 1 addition & 0 deletions lib/presentation/weapon/weapon_page.dart
Expand Up @@ -59,6 +59,7 @@ class _WeaponPageState extends State<WeaponPage> with SingleTickerProviderStateM
ascensionMaterials: s.ascensionMaterials,
refinements: s.refinements,
charImgs: s.charImages,
craftingMaterials: s.craftingMaterials,
),
],
),
Expand Down
8 changes: 8 additions & 0 deletions lib/presentation/weapon/widgets/weapon_detail_bottom.dart
Expand Up @@ -9,12 +9,14 @@ import 'package:genshindb/presentation/shared/styles.dart';
import 'package:genshindb/presentation/weapon/widgets/weapon_detail_stats_card.dart';

import 'weapon_detail_ascension_materials_card.dart';
import 'weapon_detail_crafting_materials.dart';
import 'weapon_detail_refinements_card.dart';

class WeaponDetailBottom extends StatelessWidget {
final String description;
final int rarity;
final StatType secondaryStatType;
final List<WeaponCraftedFileModel> craftingMaterials;
final List<WeaponFileAscensionMaterial> ascensionMaterials;
final List<WeaponFileRefinementModel> refinements;
final List<WeaponFileStatModel> stats;
Expand All @@ -25,6 +27,7 @@ class WeaponDetailBottom extends StatelessWidget {
@required this.description,
@required this.rarity,
@required this.secondaryStatType,
@required this.craftingMaterials,
@required this.ascensionMaterials,
@required this.refinements,
@required this.stats,
Expand Down Expand Up @@ -52,6 +55,11 @@ class WeaponDetailBottom extends StatelessWidget {
),
textColor: rarityColor,
),
if (craftingMaterials.isNotEmpty)
WeaponCraftingMaterials(
materials: craftingMaterials,
rarityColor: rarityColor,
),
if (ascensionMaterials.isNotEmpty)
WeaponDetailAscensionMaterialsCard(
ascensionMaterials: ascensionMaterials,
Expand Down
@@ -0,0 +1,30 @@
import 'package:flutter/material.dart';
import 'package:genshindb/domain/models/models.dart';
import 'package:genshindb/generated/l10n.dart';
import 'package:genshindb/presentation/shared/item_description_detail.dart';
import 'package:genshindb/presentation/shared/wrapped_ascension_material.dart';

class WeaponCraftingMaterials extends StatelessWidget {
final List<WeaponCraftedFileModel> materials;
final Color rarityColor;

const WeaponCraftingMaterials({
Key key,
@required this.materials,
@required this.rarityColor,
}) : super(key: key);

@override
Widget build(BuildContext context) {
final s = S.of(context);
final rows = materials.map((m) => WrappedAscensionMaterial(image: m.fullImagePath, quantity: m.quantity, size: 50)).toList();

final body = Wrap(
alignment: WrapAlignment.center,
crossAxisAlignment: WrapCrossAlignment.center,
children: rows,
);

return ItemDescriptionDetail(title: s.craftingMaterials, body: body, textColor: rarityColor);
}
}

0 comments on commit 79d297d

Please sign in to comment.