diff --git a/lib/main.dart b/lib/main.dart index 5286f6b..6ab2d09 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,8 @@ -// main.dart import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'pages/bookmarks_page.dart'; import 'pages/collections_page.dart'; +import 'service/shared_link_provider.dart'; import 'service/storage.dart'; import 'service/share_intent_service.dart'; import 'theme.dart'; @@ -9,7 +10,12 @@ import 'theme.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Storage.initialize(); - runApp(const MapsBookmarks()); + runApp( + ChangeNotifierProvider( + create: (_) => SharedLinkProvider(), + child: const MapsBookmarks(), + ), + ); } class MapsBookmarks extends StatefulWidget { @@ -21,15 +27,14 @@ class MapsBookmarks extends StatefulWidget { class _MapsBookmarksState extends State with WidgetsBindingObserver { - final ShareIntentService _shareIntentService = ShareIntentService(); final GlobalKey _navigatorKey = GlobalKey(); + final ShareIntentService _shareIntentService = ShareIntentService(); @override - void initState() { - super.initState(); - WidgetsBinding.instance.addObserver(this); - // Check for shared content on app start - _checkForSharedContent(); + void didChangeAppLifecycleState(AppLifecycleState state) { + if (state == AppLifecycleState.resumed) { + _checkForSharedContent(); + } } @override @@ -39,24 +44,20 @@ class _MapsBookmarksState extends State } @override - void didChangeAppLifecycleState(AppLifecycleState state) { - if (state == AppLifecycleState.resumed) { - _checkForSharedContent(); - } + void initState() { + super.initState(); + WidgetsBinding.instance.addObserver(this); + _checkForSharedContent(); } Future _checkForSharedContent() async { final sharedText = await _shareIntentService.getSharedMapsLink(); if (sharedText.isNotEmpty && mounted) { - _handleSharedMapsLink(sharedText); + context.read().setCurrentMapsLink(sharedText); } } - void _handleSharedMapsLink(String sharedText) { - //TODO: implement - } - @override Widget build(BuildContext context) { return MaterialApp( diff --git a/lib/service/shared_link_provider.dart b/lib/service/shared_link_provider.dart new file mode 100644 index 0000000..4c35262 --- /dev/null +++ b/lib/service/shared_link_provider.dart @@ -0,0 +1,19 @@ +import 'package:flutter/material.dart'; +import 'package:metadata_fetch/metadata_fetch.dart'; + +import '../model/maps_link_metadata.dart'; + +class SharedLinkProvider extends ChangeNotifier { + MapsLinkMetadata? _currentMapsLinkMetadata; + + void setCurrentMapsLink(String mapsLink) async { + final metadata = await MetadataFetch.extract(mapsLink); + _currentMapsLinkMetadata = MapsLinkMetadata( + url: mapsLink, + placeName: metadata?.title ?? '', + ); + notifyListeners(); + } + + MapsLinkMetadata? get currentMapsLinkMetadata => _currentMapsLinkMetadata; +} diff --git a/pubspec.lock b/pubspec.lock index f206905..b9fec60 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -49,6 +49,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.19.1" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" cupertino_icons: dependency: "direct main" description: @@ -104,6 +112,30 @@ packages: description: flutter source: sdk version: "0.0.0" + html: + dependency: transitive + description: + name: html + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" + url: "https://pub.dev" + source: hosted + version: "0.15.6" + http: + dependency: transitive + description: + name: http + sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007 + url: "https://pub.dev" + source: hosted + version: "1.5.0" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" leak_tracker: dependency: transitive description: @@ -160,6 +192,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.16.0" + metadata_fetch: + dependency: "direct main" + description: + name: metadata_fetch + sha256: "24a713eaddbebea3dc3036a6c1d6f7c57e187fff5f0ef07be3e3ebbb7820c3e7" + url: "https://pub.dev" + source: hosted + version: "0.4.2" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" path: dependency: transitive description: @@ -208,6 +256,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + provider: + dependency: "direct main" + description: + name: provider + sha256: "4e82183fa20e5ca25703ead7e05de9e4cceed1fbd1eadc1ac3cb6f565a09f272" + url: "https://pub.dev" + source: hosted + version: "6.1.5+1" shared_preferences: dependency: "direct main" description: @@ -301,6 +357,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.1" + string_validator: + dependency: transitive + description: + name: string_validator + sha256: "240f4c98027dfbe8639c8271ef18cc9de735b47067aa15a720cfed9576a512b1" + url: "https://pub.dev" + source: hosted + version: "1.2.0" term_glyph: dependency: transitive description: @@ -317,6 +381,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.6" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" vector_math: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 72f82c3..a72fb7d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,6 +15,8 @@ dependencies: cupertino_icons: ^1.0.8 android_intent_plus: ^6.0.0 shared_preferences: ^2.3.2 + provider: ^6.1.5+1 + metadata_fetch: ^0.4.2 dev_dependencies: flutter_test: