Skip to content

Commit

Permalink
fetch share on twitter content from API
Browse files Browse the repository at this point in the history
  • Loading branch information
d-reader-luka committed May 29, 2024
1 parent 2044297 commit 190be11
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 18 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:d_reader_flutter/config/config.dart';
import 'package:d_reader_flutter/constants/routes.dart';
import 'package:d_reader_flutter/features/comic_issue/presentation/providers/comic_issue_providers.dart';
import 'package:d_reader_flutter/features/digital_asset/presentation/providers/digital_asset_controller.dart';
import 'package:d_reader_flutter/features/digital_asset/presentation/utils/extensions.dart';
import 'package:d_reader_flutter/features/digital_asset/presentation/utils/utils.dart';
import 'package:d_reader_flutter/features/digital_asset/domain/models/digital_asset.dart';
import 'package:d_reader_flutter/shared/domain/providers/environment/environment_notifier.dart';
import 'package:d_reader_flutter/features/twitter/domain/providers/twitter_provider.dart';
import 'package:d_reader_flutter/shared/presentations/providers/global/global_notifier.dart';
import 'package:d_reader_flutter/shared/theme/app_colors.dart';
import 'package:d_reader_flutter/shared/utils/screen_navigation.dart';
Expand Down Expand Up @@ -308,22 +306,19 @@ class _DoneMintingAnimationState extends State<DoneMintingAnimation>
builder: (context, ref, child) {
return GestureDetector(
onTap: () async {
final digitalAsset = widget.digitalAsset;
final comicIssue = await ref.read(
comicIssueDetailsProvider(
digitalAsset.comicIssueId.toString())
.future,
final response = await ref
.read(twitterRepositoryProvider)
.assetMintedContent(
widget.digitalAsset.address);
response.fold(
(exception) {
// handle exception
},
(twitterUri) async {
final uri = Uri.encodeFull(twitterUri);
await openUrl(uri);
},
);
final dReaderWebUrl = ref
.read(environmentProvider)
.solanaCluster ==
SolanaCluster.devnet.value
? 'https://dev-devnet.dreader.app/mint/${comicIssue.comicSlug}_${comicIssue.slug}?utm_source=mobile'
: 'https://dreader.app/mint/${comicIssue.comicSlug}_${comicIssue.slug}?utm_source=mobile';
final uri = Uri.encodeFull(
'https://twitter.com/intent/tweet?text=I just minted a ${digitalAsset.rarity} ${comicIssue.comic?.title}: ${comicIssue.title} comic on @dReaderApp! 📚\n\nMint yours here while the supply lasts.👇\n\n$dReaderWebUrl',
);
await openUrl(uri);
},
child: Container(
padding: const EdgeInsets.symmetric(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import 'package:d_reader_flutter/shared/data/remote/network_service.dart';
import 'package:d_reader_flutter/shared/domain/models/either.dart';
import 'package:d_reader_flutter/shared/exceptions/exceptions.dart';

abstract class TwitterDataSource {
Future<Either<AppException, String>> assetMintedContent(String assetAddress);
}

class TwitterRemoteDataSource implements TwitterDataSource {
final NetworkService _networkService;

TwitterRemoteDataSource(this._networkService);
@override
Future<Either<AppException, String>> assetMintedContent(
String assetAddress) async {
try {
final response = await _networkService.get(
'/twitter/intent/comic-minted?comicAddress=$assetAddress&utmSource=mobile');
return response.fold((exception) => Left(exception), (result) {
return Right(
result.data as String,
);
});
} catch (exception) {
return Left(
AppException(
message: 'Unknown exception occurred',
statusCode: 500,
identifier:
'${exception.toString()}TwitterRemoteDataSource.assetMintedContent',
),
);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import 'package:d_reader_flutter/features/twitter/data/datasource/twitter_remote_data_source.dart';
import 'package:d_reader_flutter/features/twitter/domain/repositories/twitter_repository.dart';
import 'package:d_reader_flutter/shared/domain/models/either.dart';
import 'package:d_reader_flutter/shared/exceptions/exceptions.dart';

class TwitterRepositoryImpl implements TwitterRepository {
final TwitterDataSource _dataSource;

TwitterRepositoryImpl(this._dataSource);
@override
Future<Either<AppException, String>> assetMintedContent(String assetAddress) {
return _dataSource.assetMintedContent(assetAddress);
}
}
22 changes: 22 additions & 0 deletions lib/features/twitter/domain/providers/twitter_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import 'package:d_reader_flutter/features/twitter/data/datasource/twitter_remote_data_source.dart';
import 'package:d_reader_flutter/features/twitter/data/repositories/twitter_repository_impl.dart';
import 'package:d_reader_flutter/features/twitter/domain/repositories/twitter_repository.dart';
import 'package:d_reader_flutter/shared/data/remote/network_service.dart';
import 'package:d_reader_flutter/shared/domain/providers/dio_network_service_provider.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';

final twitterDataSourceProvider =
Provider.family<TwitterDataSource, NetworkService>(
(ref, networkService) {
return TwitterRemoteDataSource(networkService);
},
);

final twitterRepositoryProvider = StateProvider<TwitterRepository>(
(ref) {
final networkService = ref.watch(networkServiceProvider);
final dataSource = ref.watch(twitterDataSourceProvider(networkService));

return TwitterRepositoryImpl(dataSource);
},
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import 'package:d_reader_flutter/shared/domain/models/either.dart';
import 'package:d_reader_flutter/shared/exceptions/exceptions.dart';

abstract class TwitterRepository {
Future<Either<AppException, String>> assetMintedContent(String assetAddress);
}

0 comments on commit 190be11

Please sign in to comment.