diff --git a/example/lib/main.dart b/example/lib/main.dart index 24331d1..d855dfd 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,9 +1,14 @@ +import 'dart:math'; + import 'package:flutter/material.dart'; import 'package:flutter_map_plugins_example/flutter_map_cache/page.dart'; import 'package:flutter_map_plugins_example/flutter_map_pmtiles/page.dart'; import 'package:flutter_map_plugins_example/vector_map_tiles_pmtiles/page.dart'; +import 'package:url_launcher/url_launcher_string.dart'; +import 'package:url_strategy/url_strategy.dart'; void main() { + setPathUrlStrategy(); runApp(const MyApp()); } @@ -17,7 +22,13 @@ class MyApp extends StatelessWidget { theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.white), ), - home: const Material(child: SelectionPage()), + initialRoute: '/', + routes: { + '/': (context) => const SelectionPage(), + 'flutter_map_cache': (context) => const FlutterMapCachePage(), + 'flutter_map_pmtiles': (context) => const FlutterMapPmTilesPage(), + 'vector_map_tiles_pmtiles': (context) => VectorMapTilesPmTilesPage(), + }, ); } } @@ -27,67 +38,89 @@ class SelectionPage extends StatelessWidget { @override Widget build(BuildContext context) { - final children = [ + const children = [ SelectionItemWidget( title: 'flutter_map_cache', desc: 'A slim yet powerful caching plugin for flutter_map ' 'tile layers.', - pageBuilder: (context) => const FlutterMapCachePage(), + routeName: 'flutter_map_cache', ), SelectionItemWidget( title: 'flutter_map_pmtiles', desc: 'PMTiles for flutter_map', - pageBuilder: (context) => const FlutterMapPmTilesPage(), + routeName: 'flutter_map_pmtiles', ), SelectionItemWidget( title: 'vector_map_tiles_pmtiles', desc: 'PMTiles for vector_map_files / flutter_map', - pageBuilder: (context) => VectorMapTilesPmTilesPage(), + routeName: 'vector_map_tiles_pmtiles', ), ]; - final size = MediaQuery.sizeOf(context); - - if (size.width > 900) { - return Padding( - padding: const EdgeInsets.all(8), - child: GridView.count( - crossAxisCount: 2, - childAspectRatio: 5, - children: children, + final width = MediaQuery.sizeOf(context).width; + final githubButton = width < 350 + ? IconButton(onPressed: _openGithub, icon: const Icon(Icons.link)) + : TextButton( + onPressed: _openGithub, + child: const Text('Source Code'), + ); + return Scaffold( + appBar: AppBar( + title: const Text('flutter_map_plugins'), + actions: [githubButton], + ), + body: ColoredBox( + color: Colors.blueGrey.withOpacity(0.3), + child: Padding( + padding: const EdgeInsets.all(8), + child: GridView.count( + crossAxisCount: max(width ~/ 250, 1), + childAspectRatio: 2, + children: children, + ), ), - ); - } - return Padding( - padding: const EdgeInsets.all(8), - child: ListView( - children: children, ), ); } + + void _openGithub() => launchUrlString( + 'https://github.com/josxha/flutter_map_plugins', + ); } class SelectionItemWidget extends StatelessWidget { + static const _titleStyle = TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ); final String title; final String desc; - final WidgetBuilder pageBuilder; + final String routeName; const SelectionItemWidget({ super.key, required this.title, required this.desc, - required this.pageBuilder, + required this.routeName, }); @override Widget build(BuildContext context) { return Card( + color: Colors.white, child: InkWell( - onTap: () => - Navigator.of(context).push(MaterialPageRoute(builder: pageBuilder)), - child: ListTile( - title: Text(title), - subtitle: Text(desc), + onTap: () => Navigator.of(context).pushNamed(routeName), + child: Padding( + padding: const EdgeInsets.all(12), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(title, style: _titleStyle, textAlign: TextAlign.center), + const Spacer(), + Text(desc, textAlign: TextAlign.center), + const Spacer(), + ], + ), ), ), ); diff --git a/example/linux/flutter/generated_plugin_registrant.cc b/example/linux/flutter/generated_plugin_registrant.cc index 2c1ec4f..4c0025f 100644 --- a/example/linux/flutter/generated_plugin_registrant.cc +++ b/example/linux/flutter/generated_plugin_registrant.cc @@ -7,9 +7,13 @@ #include "generated_plugin_registrant.h" #include +#include void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) sqlite3_flutter_libs_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin"); sqlite3_flutter_libs_plugin_register_with_registrar(sqlite3_flutter_libs_registrar); + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); } diff --git a/example/linux/flutter/generated_plugins.cmake b/example/linux/flutter/generated_plugins.cmake index 7ea2a80..ad279a8 100644 --- a/example/linux/flutter/generated_plugins.cmake +++ b/example/linux/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST sqlite3_flutter_libs + url_launcher_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/example/macos/Flutter/GeneratedPluginRegistrant.swift b/example/macos/Flutter/GeneratedPluginRegistrant.swift index 4b080db..6f38ee0 100644 --- a/example/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -8,9 +8,11 @@ import Foundation import connectivity_plus import path_provider_foundation import sqlite3_flutter_libs +import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin")) + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 5e32585..b28ab66 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -12,6 +12,8 @@ dependencies: # commom packages flutter_map: ^6.0.0 latlong2: ^0.9.0 + url_launcher: ^6.2.4 + url_strategy: ^0.2.0 # flutter_map_cache specific packages flutter_map_cache: diff --git a/example/web/index.html b/example/web/index.html index a049d1a..c8bb658 100644 --- a/example/web/index.html +++ b/example/web/index.html @@ -1,59 +1,59 @@ - - - - - - - - - - - - - - - - - example - - - - - + + + + + + + + + + + + + + + + + example + + + + + - + diff --git a/example/windows/flutter/generated_plugin_registrant.cc b/example/windows/flutter/generated_plugin_registrant.cc index fffbd6a..2a9dc10 100644 --- a/example/windows/flutter/generated_plugin_registrant.cc +++ b/example/windows/flutter/generated_plugin_registrant.cc @@ -8,10 +8,13 @@ #include #include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { ConnectivityPlusWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin")); Sqlite3FlutterLibsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("Sqlite3FlutterLibsPlugin")); + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/example/windows/flutter/generated_plugins.cmake b/example/windows/flutter/generated_plugins.cmake index a0f6fa5..7565d04 100644 --- a/example/windows/flutter/generated_plugins.cmake +++ b/example/windows/flutter/generated_plugins.cmake @@ -5,6 +5,7 @@ list(APPEND FLUTTER_PLUGIN_LIST connectivity_plus sqlite3_flutter_libs + url_launcher_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST