diff --git a/packages/share_repository/lib/share_repository.dart b/packages/share_repository/lib/share_repository.dart index 0b6d064c..0a68aff4 100644 --- a/packages/share_repository/lib/share_repository.dart +++ b/packages/share_repository/lib/share_repository.dart @@ -1,3 +1,4 @@ library share_repository; +export 'src/models/models.dart'; export 'src/share_repository.dart'; diff --git a/packages/share_repository/lib/src/models/models.dart b/packages/share_repository/lib/src/models/models.dart new file mode 100644 index 00000000..26819946 --- /dev/null +++ b/packages/share_repository/lib/src/models/models.dart @@ -0,0 +1 @@ +export 'share_platform.dart'; diff --git a/packages/share_repository/lib/src/models/share_platform.dart b/packages/share_repository/lib/src/models/share_platform.dart new file mode 100644 index 00000000..054a4f15 --- /dev/null +++ b/packages/share_repository/lib/src/models/share_platform.dart @@ -0,0 +1,8 @@ +/// The platform that is being used to share a score. +enum SharePlatform { + /// Twitter platform. + twitter, + + /// Facebook platform. + facebook, +} diff --git a/packages/share_repository/lib/src/share_repository.dart b/packages/share_repository/lib/src/share_repository.dart index 6c1f36d0..6e6679c2 100644 --- a/packages/share_repository/lib/src/share_repository.dart +++ b/packages/share_repository/lib/src/share_repository.dart @@ -1,7 +1,30 @@ +import 'package:share_repository/share_repository.dart'; + /// {@template share_repository} /// Repository to facilitate sharing scores. /// {@endtemplate} class ShareRepository { /// {@macro share_repository} - const ShareRepository(); + const ShareRepository({ + required String appUrl, + }) : _appUrl = appUrl; + + final String _appUrl; + + /// Returns a url to share the [value] on the given [platform]. + /// + /// The returned url can be opened using the [url_launcher](https://pub.dev/packages/url_launcher) package. + String shareText({ + required String value, + required SharePlatform platform, + }) { + final encodedUrl = Uri.encodeComponent(_appUrl); + final encodedShareText = Uri.encodeComponent(value); + switch (platform) { + case SharePlatform.twitter: + return 'https://twitter.com/intent/tweet?url=$encodedUrl&text=$encodedShareText'; + case SharePlatform.facebook: + return 'https://www.facebook.com/sharer.php?u=$encodedUrl"e=$encodedShareText'; + } + } } diff --git a/packages/share_repository/test/src/share_repository_test.dart b/packages/share_repository/test/src/share_repository_test.dart index e6cc536b..bdb2c517 100644 --- a/packages/share_repository/test/src/share_repository_test.dart +++ b/packages/share_repository/test/src/share_repository_test.dart @@ -4,8 +4,38 @@ import 'package:test/test.dart'; void main() { group('ShareRepository', () { + const appUrl = 'https://fakeurl.com/'; + late ShareRepository shareRepository; + + setUp(() { + shareRepository = ShareRepository(appUrl: appUrl); + }); + test('can be instantiated', () { - expect(ShareRepository(), isNotNull); + expect(ShareRepository(appUrl: appUrl), isNotNull); + }); + + group('shareText', () { + const value = 'hello world!'; + test('returns the correct share url for twitter', () async { + const shareTextUrl = + 'https://twitter.com/intent/tweet?url=https%3A%2F%2Ffakeurl.com%2F&text=hello%20world!'; + final shareTextResult = shareRepository.shareText( + value: value, + platform: SharePlatform.twitter, + ); + expect(shareTextResult, equals(shareTextUrl)); + }); + + test('returns the correct share url for facebook', () async { + const shareTextUrl = + 'https://www.facebook.com/sharer.php?u=https%3A%2F%2Ffakeurl.com%2F"e=hello%20world!'; + final shareTextResult = shareRepository.shareText( + value: value, + platform: SharePlatform.facebook, + ); + expect(shareTextResult, equals(shareTextUrl)); + }); }); }); }