Rename MetAPI to ArtifactAPI etc
This commit is contained in:
parent
fdaabec9f3
commit
8f2625bc23
@ -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;
|
@ -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(
|
@ -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)),
|
||||
],
|
||||
|
@ -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]));
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user