Skip to content

Commit

Permalink
add 3D model viewer
Browse files Browse the repository at this point in the history
  • Loading branch information
hawkbee1 committed Sep 1, 2023
1 parent 2cb2596 commit 412cd7b
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 10 deletions.
Binary file added assets/testFile.glb
Binary file not shown.
2 changes: 1 addition & 1 deletion lib/dashboard/home/tab_bar/nft/cubit/nft_cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ class NftCubit extends Cubit<NftState> {
'token.metadata.null': false,
'sort.desc': 'firstLevel',
'select':
'token.tokenId as tokenId,token.id as id,token.metadata.name as name,token.metadata.displayUri as displayUri,balance,token.metadata.thumbnailUri as thumbnailUri,token.metadata.description as description,token.standard as standard,token.metadata.symbol as symbol,token.contract.address as contractAddress,token.metadata.identifier as identifier,token.metadata.creators as creators,token.metadata.publishers as publishers,token.metadata.date as date,token.metadata.is_transferable as isTransferable,firstTime', // ignore: lines_longer_than_80_chars
'token.tokenId as tokenId,token.id as id,token.metadata.name as name,token.metadata.displayUri as displayUri,balance,token.metadata.thumbnailUri as thumbnailUri,token.metadata.description as description,token.standard as standard,token.metadata.symbol as symbol,token.contract.address as contractAddress,token.metadata.identifier as identifier,token.metadata.creators as creators,token.metadata.publishers as publishers,token.metadata.date as date,token.metadata.is_transferable as isTransferable,firstTime,token.metadata.artifactUri as artifactUri', // ignore: lines_longer_than_80_chars
'offset': offset,
'limit': limit,
},
Expand Down
13 changes: 13 additions & 0 deletions lib/dashboard/home/tab_bar/nft/models/nft_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class NftModel extends Equatable {
this.displayUri,
this.thumbnailUri,
this.isTransferable = true,
this.artifactUri = '',
});

factory NftModel.fromJson(Map<String, dynamic> json) =>
Expand All @@ -35,6 +36,8 @@ class NftModel extends Equatable {
final String balance;
@JsonKey(defaultValue: true)
final bool isTransferable;
@JsonKey(defaultValue: '')
final String artifactUri;

String? get displayUrl {
if (displayUri?.isEmpty ?? true) {
Expand All @@ -56,6 +59,16 @@ class NftModel extends Equatable {
);
}

String? get artifactUrl {
if (artifactUri == '') {
return null;
}
return artifactUri.replaceAll(
'ipfs://',
Urls.talaoIpfsGateway,
);
}

Map<String, dynamic> toJson() => _$NftModelToJson(this);

@override
Expand Down
2 changes: 2 additions & 0 deletions lib/dashboard/home/tab_bar/nft/models/tezos_nft_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class TezosNftModel extends NftModel {
this.mPublishers,
this.date,
this.firstTime,
super.artifactUri,
});

factory TezosNftModel.fromJson(Map<String, dynamic> json) =>
Expand Down Expand Up @@ -105,5 +106,6 @@ class TezosNftModel extends NftModel {
date,
isTransferable,
firstTime,
artifactUri,
];
}
49 changes: 40 additions & 9 deletions lib/dashboard/home/tab_bar/nft/view/nft_details_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:altme/wallet/cubit/wallet_cubit.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:model_viewer_plus/model_viewer_plus.dart';

class NftDetailsPage extends StatelessWidget {
const NftDetailsPage({
Expand Down Expand Up @@ -87,15 +88,7 @@ class _NftDetailsViewState extends State<NftDetailsView> {
children: [
AspectRatio(
aspectRatio: 1.1,
child: CachedImageFromNetwork(
widget.nftModel.displayUrl ??
(widget.nftModel.thumbnailUrl ?? ''),
fit: BoxFit.contain,
errorMessage: l10n.nftTooBigToLoad,
borderRadius: const BorderRadius.all(
Radius.circular(Sizes.largeRadius),
),
),
child: NftPicture(widget: widget, l10n: l10n),
),
const SizedBox(
height: Sizes.spaceSmall,
Expand Down Expand Up @@ -358,6 +351,44 @@ class _NftDetailsViewState extends State<NftDetailsView> {
}
}

class NftPicture extends StatelessWidget {
const NftPicture({
super.key,
required this.widget,
required this.l10n,
});

final NftDetailsView widget;
final AppLocalizations l10n;

@override
Widget build(BuildContext context) {
if (widget.nftModel.artifactUri == '') {
return CachedImageFromNetwork(
widget.nftModel.displayUrl ?? (widget.nftModel.thumbnailUrl ?? ''),
fit: BoxFit.contain,
errorMessage: l10n.nftTooBigToLoad,
borderRadius: const BorderRadius.all(
Radius.circular(Sizes.largeRadius),
),
);
}
return const ClipRRect(
borderRadius: BorderRadius.all(
Radius.circular(Sizes.largeRadius),
),
child: ModelViewer(
backgroundColor: Color.fromARGB(0xFF, 0xEE, 0xEE, 0xEE),
src: 'assets/testFile.glb',
alt: '',
ar: false,
autoRotate: false,
disableZoom: true,
),
);
}
}

class SendButton extends StatelessWidget {
const SendButton({
super.key,
Expand Down

0 comments on commit 412cd7b

Please sign in to comment.