Rename MetAPI to ArtifactAPI etc

This commit is contained in:
Shawn 2023-10-03 14:15:36 -06:00
parent fdaabec9f3
commit 8f2625bc23
4 changed files with 23 additions and 16 deletions

View File

@ -3,17 +3,18 @@ import 'dart:collection';
import 'package:wonders/common_libs.dart';
import 'package:wonders/logic/common/http_client.dart';
import 'package:wonders/logic/data/artifact_data.dart';
import 'package:wonders/logic/met_api_service.dart';
import 'package:wonders/logic/artifact_api_service.dart';
class MetAPILogic {
class ArtifactAPILogic {
final HashMap<String, ArtifactData?> _artifactCache = HashMap();
MetAPIService get service => GetIt.I.get<MetAPIService>();
ArtifactAPIService get service => GetIt.I.get<ArtifactAPIService>();
/// Returns artifact data by ID. Returns null if artifact cannot be found. */
Future<ArtifactData?> getArtifactByID(String id) async {
Future<ArtifactData?> getArtifactByID(String id, {bool selfHosted = false}) async {
if (_artifactCache.containsKey(id)) return _artifactCache[id];
ServiceResult<ArtifactData?> result = (await service.getObjectByID(id));
ServiceResult<ArtifactData?> result =
(await (selfHosted ? service.getSelfHostedObjectByID(id) : service.getMetObjectByID(id)));
if (!result.success) throw $strings.artifactDetailsErrorNotFound(id);
ArtifactData? artifact = result.content;
return _artifactCache[id] = artifact;

View File

@ -1,14 +1,20 @@
import 'package:wonders/logic/common/http_client.dart';
import 'package:wonders/logic/data/artifact_data.dart';
class MetAPIService {
class ArtifactAPIService {
final String _baseMETUrl = 'https://collectionapi.metmuseum.org/public/collection/v1';
final String _baseSelfHostedUrl = 'https://www.wonderous.info/met';
Future<ServiceResult<ArtifactData?>> getObjectByID(String id) async {
Future<ServiceResult<ArtifactData?>> getMetObjectByID(String id) async {
HttpResponse? response = await HttpClient.send('$_baseMETUrl/objects/$id');
return ServiceResult<ArtifactData?>(response, _parseArtifactData);
}
Future<ServiceResult<ArtifactData?>> getSelfHostedObjectByID(String id) async {
HttpResponse? response = await HttpClient.send('$_baseSelfHostedUrl/$id.json');
return ServiceResult<ArtifactData?>(response, _parseArtifactData);
}
ArtifactData? _parseArtifactData(Map<String, dynamic> content) {
// Source: https://metmuseum.github.io/
return ArtifactData(

View File

@ -7,7 +7,7 @@ import 'package:wonders/ui/common/gradient_container.dart';
import 'package:wonders/ui/common/modals/fullscreen_url_img_viewer.dart';
part 'widgets/_info_column.dart';
part 'widgets/_image_btn.dart';
part 'widgets/_artifact_image_btn.dart';
class ArtifactDetailsScreen extends StatefulWidget {
const ArtifactDetailsScreen({Key? key, required this.artifactId}) : super(key: key);
@ -18,7 +18,7 @@ class ArtifactDetailsScreen extends StatefulWidget {
}
class _ArtifactDetailsScreenState extends State<ArtifactDetailsScreen> {
late final _future = metAPILogic.getArtifactByID(widget.artifactId);
late final _future = metAPILogic.getArtifactByID(widget.artifactId, selfHosted: true);
@override
Widget build(BuildContext context) {
@ -37,7 +37,7 @@ class _ArtifactDetailsScreenState extends State<ArtifactDetailsScreen> {
} else {
content = hzMode
? Row(children: [
Expanded(child: _ImageBtn(data: data!)),
Expanded(child: _ArtifactImageBtn(data: data!)),
Expanded(child: Center(child: SizedBox(width: 600, child: _InfoColumn(data: data)))),
])
: CustomScrollView(
@ -48,7 +48,7 @@ class _ArtifactDetailsScreenState extends State<ArtifactDetailsScreen> {
leading: SizedBox.shrink(),
expandedHeight: context.heightPx * .5,
collapsedHeight: context.heightPx * .35,
flexibleSpace: _ImageBtn(data: data!),
flexibleSpace: _ArtifactImageBtn(data: data!),
),
SliverToBoxAdapter(child: _InfoColumn(data: data)),
],

View File

@ -1,7 +1,7 @@
part of '../artifact_details_screen.dart';
class _ImageBtn extends StatelessWidget {
const _ImageBtn({Key? key, required this.data}) : super(key: key);
class _ArtifactImageBtn extends StatelessWidget {
const _ArtifactImageBtn({Key? key, required this.data}) : super(key: key);
final ArtifactData data;
@override
@ -28,9 +28,9 @@ class _ImageBtn extends StatelessWidget {
bottom: false,
minimum: EdgeInsets.symmetric(vertical: $styles.insets.sm),
child: Hero(
tag: data.image,
tag: data.selfHostedImageUrl,
child: AppImage(
image: NetworkImage(data.image),
image: NetworkImage(data.selfHostedImageUrl),
fit: BoxFit.contain,
distractor: true,
scale: FullscreenUrlImgViewer.imageScale, // so the image isn't reloaded
@ -44,6 +44,6 @@ class _ImageBtn extends StatelessWidget {
}
void _handleImagePressed(BuildContext context) {
appLogic.showFullscreenDialogRoute(context, FullscreenUrlImgViewer(urls: [data.image]));
appLogic.showFullscreenDialogRoute(context, FullscreenUrlImgViewer(urls: [data.selfHostedImageUrl]));
}
}