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/common_libs.dart';
|
||||||
import 'package:wonders/logic/common/http_client.dart';
|
import 'package:wonders/logic/common/http_client.dart';
|
||||||
import 'package:wonders/logic/data/artifact_data.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();
|
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. */
|
/// 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];
|
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);
|
if (!result.success) throw $strings.artifactDetailsErrorNotFound(id);
|
||||||
ArtifactData? artifact = result.content;
|
ArtifactData? artifact = result.content;
|
||||||
return _artifactCache[id] = artifact;
|
return _artifactCache[id] = artifact;
|
@ -1,14 +1,20 @@
|
|||||||
import 'package:wonders/logic/common/http_client.dart';
|
import 'package:wonders/logic/common/http_client.dart';
|
||||||
import 'package:wonders/logic/data/artifact_data.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 _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');
|
HttpResponse? response = await HttpClient.send('$_baseMETUrl/objects/$id');
|
||||||
return ServiceResult<ArtifactData?>(response, _parseArtifactData);
|
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) {
|
ArtifactData? _parseArtifactData(Map<String, dynamic> content) {
|
||||||
// Source: https://metmuseum.github.io/
|
// Source: https://metmuseum.github.io/
|
||||||
return ArtifactData(
|
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';
|
import 'package:wonders/ui/common/modals/fullscreen_url_img_viewer.dart';
|
||||||
|
|
||||||
part 'widgets/_info_column.dart';
|
part 'widgets/_info_column.dart';
|
||||||
part 'widgets/_image_btn.dart';
|
part 'widgets/_artifact_image_btn.dart';
|
||||||
|
|
||||||
class ArtifactDetailsScreen extends StatefulWidget {
|
class ArtifactDetailsScreen extends StatefulWidget {
|
||||||
const ArtifactDetailsScreen({Key? key, required this.artifactId}) : super(key: key);
|
const ArtifactDetailsScreen({Key? key, required this.artifactId}) : super(key: key);
|
||||||
@ -18,7 +18,7 @@ class ArtifactDetailsScreen extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _ArtifactDetailsScreenState extends State<ArtifactDetailsScreen> {
|
class _ArtifactDetailsScreenState extends State<ArtifactDetailsScreen> {
|
||||||
late final _future = metAPILogic.getArtifactByID(widget.artifactId);
|
late final _future = metAPILogic.getArtifactByID(widget.artifactId, selfHosted: true);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -37,7 +37,7 @@ class _ArtifactDetailsScreenState extends State<ArtifactDetailsScreen> {
|
|||||||
} else {
|
} else {
|
||||||
content = hzMode
|
content = hzMode
|
||||||
? Row(children: [
|
? Row(children: [
|
||||||
Expanded(child: _ImageBtn(data: data!)),
|
Expanded(child: _ArtifactImageBtn(data: data!)),
|
||||||
Expanded(child: Center(child: SizedBox(width: 600, child: _InfoColumn(data: data)))),
|
Expanded(child: Center(child: SizedBox(width: 600, child: _InfoColumn(data: data)))),
|
||||||
])
|
])
|
||||||
: CustomScrollView(
|
: CustomScrollView(
|
||||||
@ -48,7 +48,7 @@ class _ArtifactDetailsScreenState extends State<ArtifactDetailsScreen> {
|
|||||||
leading: SizedBox.shrink(),
|
leading: SizedBox.shrink(),
|
||||||
expandedHeight: context.heightPx * .5,
|
expandedHeight: context.heightPx * .5,
|
||||||
collapsedHeight: context.heightPx * .35,
|
collapsedHeight: context.heightPx * .35,
|
||||||
flexibleSpace: _ImageBtn(data: data!),
|
flexibleSpace: _ArtifactImageBtn(data: data!),
|
||||||
),
|
),
|
||||||
SliverToBoxAdapter(child: _InfoColumn(data: data)),
|
SliverToBoxAdapter(child: _InfoColumn(data: data)),
|
||||||
],
|
],
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
part of '../artifact_details_screen.dart';
|
part of '../artifact_details_screen.dart';
|
||||||
|
|
||||||
class _ImageBtn extends StatelessWidget {
|
class _ArtifactImageBtn extends StatelessWidget {
|
||||||
const _ImageBtn({Key? key, required this.data}) : super(key: key);
|
const _ArtifactImageBtn({Key? key, required this.data}) : super(key: key);
|
||||||
final ArtifactData data;
|
final ArtifactData data;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -28,9 +28,9 @@ class _ImageBtn extends StatelessWidget {
|
|||||||
bottom: false,
|
bottom: false,
|
||||||
minimum: EdgeInsets.symmetric(vertical: $styles.insets.sm),
|
minimum: EdgeInsets.symmetric(vertical: $styles.insets.sm),
|
||||||
child: Hero(
|
child: Hero(
|
||||||
tag: data.image,
|
tag: data.selfHostedImageUrl,
|
||||||
child: AppImage(
|
child: AppImage(
|
||||||
image: NetworkImage(data.image),
|
image: NetworkImage(data.selfHostedImageUrl),
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
distractor: true,
|
distractor: true,
|
||||||
scale: FullscreenUrlImgViewer.imageScale, // so the image isn't reloaded
|
scale: FullscreenUrlImgViewer.imageScale, // so the image isn't reloaded
|
||||||
@ -44,6 +44,6 @@ class _ImageBtn extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _handleImagePressed(BuildContext context) {
|
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