diff --git a/assets/images/github.png b/assets/images/github.png deleted file mode 100644 index bfc5e71..0000000 Binary files a/assets/images/github.png and /dev/null differ diff --git a/lib/app/modules/cards/view/info_weather_card.dart b/lib/app/modules/cards/view/info_weather_card.dart index 0f40622..8079045 100644 --- a/lib/app/modules/cards/view/info_weather_card.dart +++ b/lib/app/modules/cards/view/info_weather_card.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:iconsax/iconsax.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:rain/app/controller/controller.dart'; import 'package:rain/app/data/weather.dart'; import 'package:rain/app/widgets/daily/weather_daily.dart'; @@ -67,7 +67,7 @@ class _InfoWeatherCardState extends State { leading: IconButton( onPressed: () => Get.back(), icon: const Icon( - Iconsax.arrow_left_1, + IconsaxPlusLinear.arrow_left_3, size: 20, ), ), diff --git a/lib/app/modules/cards/view/list_weather_card.dart b/lib/app/modules/cards/view/list_weather_card.dart index 73948b1..76b6cb3 100644 --- a/lib/app/modules/cards/view/list_weather_card.dart +++ b/lib/app/modules/cards/view/list_weather_card.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:iconsax/iconsax.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:rain/app/controller/controller.dart'; import 'package:rain/app/modules/cards/widgets/weather_card_list.dart'; import 'package:rain/app/widgets/text_form.dart'; @@ -66,7 +66,7 @@ class _ListWeatherCardState extends State { labelText: 'search'.tr, type: TextInputType.text, icon: const Icon( - Iconsax.search_normal_1, + IconsaxPlusLinear.search_normal_1, size: 20, ), controller: searchTasks, @@ -80,7 +80,7 @@ class _ListWeatherCardState extends State { applyFilter(''); }, icon: const Icon( - Iconsax.close_circle, + IconsaxPlusLinear.close_circle, color: Colors.grey, size: 20, ), diff --git a/lib/app/modules/cards/widgets/create_card_weather.dart b/lib/app/modules/cards/widgets/create_card_weather.dart index 435c020..752dd35 100644 --- a/lib/app/modules/cards/widgets/create_card_weather.dart +++ b/lib/app/modules/cards/widgets/create_card_weather.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:iconsax/iconsax.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:rain/app/api/api.dart'; import 'package:rain/app/api/city_api.dart'; import 'package:rain/app/controller/controller.dart'; @@ -120,7 +120,7 @@ class _CreateWeatherCardState extends State elevation: kTextFieldElevation, labelText: 'search'.tr, type: TextInputType.text, - icon: const Icon(Iconsax.global_search), + icon: const Icon(IconsaxPlusLinear.global_search), controller: _controller, margin: const EdgeInsets.only( left: 10, right: 10, top: 10), @@ -176,7 +176,7 @@ class _CreateWeatherCardState extends State controller: _controllerLat, labelText: 'lat'.tr, type: TextInputType.number, - icon: const Icon(Iconsax.location), + icon: const Icon(IconsaxPlusLinear.location), onChanged: (value) => setState(() {}), margin: const EdgeInsets.only(left: 10, right: 10, top: 10), @@ -199,7 +199,7 @@ class _CreateWeatherCardState extends State controller: _controllerLon, labelText: 'lon'.tr, type: TextInputType.number, - icon: const Icon(Iconsax.location), + icon: const Icon(IconsaxPlusLinear.location), onChanged: (value) => setState(() {}), margin: const EdgeInsets.only(left: 10, right: 10, top: 10), @@ -222,7 +222,7 @@ class _CreateWeatherCardState extends State controller: _controllerCity, labelText: 'city'.tr, type: TextInputType.name, - icon: const Icon(Icons.location_city_rounded), + icon: const Icon(IconsaxPlusLinear.building_3), onChanged: (value) => setState(() {}), margin: const EdgeInsets.only(left: 10, right: 10, top: 10), @@ -238,7 +238,7 @@ class _CreateWeatherCardState extends State controller: _controllerDistrict, labelText: 'district'.tr, type: TextInputType.streetAddress, - icon: const Icon(Iconsax.global), + icon: const Icon(IconsaxPlusLinear.global), onChanged: (value) => setState(() {}), margin: const EdgeInsets.only(left: 10, right: 10, top: 10), diff --git a/lib/app/modules/cards/widgets/weather_card_list.dart b/lib/app/modules/cards/widgets/weather_card_list.dart index aa3a5ec..a0e0b88 100644 --- a/lib/app/modules/cards/widgets/weather_card_list.dart +++ b/lib/app/modules/cards/widgets/weather_card_list.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:iconsax/iconsax.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:rain/app/controller/controller.dart'; import 'package:rain/app/modules/cards/view/info_weather_card.dart'; import 'package:rain/app/modules/cards/widgets/weather_card_container.dart'; @@ -43,7 +43,7 @@ class _WeatherCardListState extends State { child: const Padding( padding: EdgeInsets.only(right: 15), child: Icon( - Iconsax.trush_square, + IconsaxPlusLinear.trash_square, color: Colors.red, ), ), diff --git a/lib/app/modules/geolocation.dart b/lib/app/modules/geolocation.dart index faa20bd..82e6c3a 100644 --- a/lib/app/modules/geolocation.dart +++ b/lib/app/modules/geolocation.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:geolocator/geolocator.dart'; import 'package:get/get.dart'; -import 'package:iconsax/iconsax.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:rain/app/api/api.dart'; import 'package:rain/app/api/city_api.dart'; import 'package:rain/app/controller/controller.dart'; @@ -75,7 +75,7 @@ class _SelectGeolocationState extends State { Get.back(); }, icon: const Icon( - Iconsax.arrow_left_1, + IconsaxPlusLinear.arrow_left_3, size: 20, ), splashColor: Colors.transparent, @@ -132,8 +132,8 @@ class _SelectGeolocationState extends State { elevation: kTextFieldElevation, labelText: 'search'.tr, type: TextInputType.text, - icon: const Icon( - Iconsax.global_search), + icon: const Icon(IconsaxPlusLinear + .global_search), controller: _controller, margin: const EdgeInsets.only( left: 10, right: 10, top: 10), @@ -276,7 +276,7 @@ class _SelectGeolocationState extends State { setState(() => isLoading = false); }, icon: const Icon( - Iconsax.location, + IconsaxPlusLinear.location, ), ), ), @@ -288,7 +288,7 @@ class _SelectGeolocationState extends State { controller: _controllerLat, labelText: 'lat'.tr, type: TextInputType.number, - icon: const Icon(Iconsax.location), + icon: const Icon(IconsaxPlusLinear.location), margin: const EdgeInsets.only( left: 10, right: 10, @@ -315,7 +315,7 @@ class _SelectGeolocationState extends State { controller: _controllerLon, labelText: 'lon'.tr, type: TextInputType.number, - icon: const Icon(Iconsax.location), + icon: const Icon(IconsaxPlusLinear.location), margin: const EdgeInsets.only( left: 10, right: 10, @@ -342,7 +342,8 @@ class _SelectGeolocationState extends State { controller: _controllerCity, labelText: 'city'.tr, type: TextInputType.name, - icon: const Icon(Icons.location_city_rounded), + icon: + const Icon(IconsaxPlusLinear.building_3), margin: const EdgeInsets.only( left: 10, right: 10, top: 10), validator: (value) { @@ -357,7 +358,7 @@ class _SelectGeolocationState extends State { controller: _controllerDistrict, labelText: 'district'.tr, type: TextInputType.streetAddress, - icon: const Icon(Iconsax.global), + icon: const Icon(IconsaxPlusLinear.global), margin: const EdgeInsets.only( left: 10, right: 10, top: 10), ), diff --git a/lib/app/modules/home.dart b/lib/app/modules/home.dart index b18d4b1..2d97edc 100644 --- a/lib/app/modules/home.dart +++ b/lib/app/modules/home.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:iconsax/iconsax.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:isar/isar.dart'; import 'package:rain/app/api/api.dart'; import 'package:rain/app/api/city_api.dart'; @@ -10,6 +10,7 @@ import 'package:rain/app/modules/cards/view/list_weather_card.dart'; import 'package:rain/app/modules/cards/widgets/create_card_weather.dart'; import 'package:rain/app/modules/geolocation.dart'; import 'package:rain/app/modules/main/view/weather_main.dart'; +import 'package:rain/app/modules/map/view/map.dart'; import 'package:rain/app/modules/settings/view/settings.dart'; import 'package:rain/app/services/utils.dart'; import 'package:rain/main.dart'; @@ -32,6 +33,7 @@ class _HomePageState extends State with TickerProviderStateMixin { final pages = [ const WeatherPage(), const ListWeatherCard(), + const MapWeather(), const SettingsPage(), ]; @@ -73,6 +75,11 @@ class _HomePageState extends State with TickerProviderStateMixin { final textTheme = context.textTheme; final labelLarge = textTheme.labelLarge; + final textStyle = textTheme.titleMedium?.copyWith( + fontWeight: FontWeight.w600, + fontSize: 18, + ); + return DefaultTabController( length: pages.length, child: ScaffoldMessenger( @@ -88,7 +95,7 @@ class _HomePageState extends State with TickerProviderStateMixin { transition: Transition.downToUp); }, icon: const Icon( - Iconsax.global_search, + IconsaxPlusLinear.global_search, size: 18, ), ), @@ -184,26 +191,21 @@ class _HomePageState extends State with TickerProviderStateMixin { .isNotEmpty ? 'loading'.tr : 'searchCity'.tr, - style: textTheme.titleMedium?.copyWith( - fontWeight: FontWeight.w600, - fontSize: 18, - ), + style: textStyle, ); }, ), 1 => Text( 'cities'.tr, - style: textTheme.titleMedium?.copyWith( - fontWeight: FontWeight.w600, - fontSize: 18, - ), + style: textStyle, ), 2 => Text( + 'map'.tr, + style: textStyle, + ), + 3 => Text( 'settings_full'.tr, - style: textTheme.titleMedium?.copyWith( - fontWeight: FontWeight.w600, - fontSize: 18, - ), + style: textStyle, ), int() => null, }, @@ -221,7 +223,9 @@ class _HomePageState extends State with TickerProviderStateMixin { setState(() {}); }, icon: Icon( - visible ? Icons.close : Iconsax.search_normal_1, + visible + ? IconsaxPlusLinear.close_circle + : IconsaxPlusLinear.search_normal_1, size: 18, ), ) @@ -240,18 +244,23 @@ class _HomePageState extends State with TickerProviderStateMixin { selectedIndex: tabIndex, destinations: [ NavigationDestination( - icon: const Icon(Iconsax.cloud_sunny), - selectedIcon: const Icon(Iconsax.cloud_sunny5), + icon: const Icon(IconsaxPlusLinear.cloud_sunny), + selectedIcon: const Icon(IconsaxPlusBold.cloud_sunny), label: 'name'.tr, ), NavigationDestination( - icon: const Icon(Iconsax.map_1), - selectedIcon: const Icon(Iconsax.map5), + icon: const Icon(IconsaxPlusLinear.buildings), + selectedIcon: const Icon(IconsaxPlusBold.buildings), label: 'cities'.tr, ), NavigationDestination( - icon: const Icon(Iconsax.category), - selectedIcon: const Icon(Iconsax.category5), + icon: const Icon(IconsaxPlusLinear.map), + selectedIcon: const Icon(IconsaxPlusBold.map), + label: 'map'.tr, + ), + NavigationDestination( + icon: const Icon(IconsaxPlusLinear.category), + selectedIcon: const Icon(IconsaxPlusBold.category), label: 'settings_full'.tr, ), ], @@ -266,7 +275,7 @@ class _HomePageState extends State with TickerProviderStateMixin { const CreateWeatherCard(), ), child: const Icon( - Iconsax.add, + IconsaxPlusLinear.add, ), ) : null, diff --git a/lib/app/modules/map/view/map.dart b/lib/app/modules/map/view/map.dart new file mode 100644 index 0000000..e4d3141 --- /dev/null +++ b/lib/app/modules/map/view/map.dart @@ -0,0 +1,95 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:flutter_map/flutter_map.dart'; +import 'package:flutter_map_animations/flutter_map_animations.dart'; +import 'package:flutter_map_cache/flutter_map_cache.dart'; +import 'package:get/get.dart'; +import 'package:latlong2/latlong.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:rain/app/controller/controller.dart'; +import 'package:dio_cache_interceptor/dio_cache_interceptor.dart'; +import 'package:dio_cache_interceptor_file_store/dio_cache_interceptor_file_store.dart'; + +class MapWeather extends StatefulWidget { + const MapWeather({super.key}); + + @override + State createState() => _MapWeatherState(); +} + +class _MapWeatherState extends State with TickerProviderStateMixin { + late final _animatedMapController = AnimatedMapController(vsync: this); + final weatherController = Get.put(WeatherController()); + + final Future _cacheStoreFuture = _getCacheStore(); + + static Future _getCacheStore() async { + final dir = await getTemporaryDirectory(); + return FileCacheStore('${dir.path}${Platform.pathSeparator}MapTiles'); + } + + @override + Widget build(BuildContext context) { + final mainLocation = weatherController.location; + bool isDarkMode = Theme.of(context).brightness == Brightness.dark; + + Widget darkModeTilesContainerBuilder( + BuildContext context, + Widget tilesContainer, + ) { + return ColorFiltered( + colorFilter: const ColorFilter.matrix([ + -0.2126, -0.7152, -0.0722, 0, 255, // Red channel + -0.2126, -0.7152, -0.0722, 0, 255, // Green channel + -0.2126, -0.7152, -0.0722, 0, 255, // Blue channel + 0, 0, 0, 1, 0, // Alpha channel + ]), + child: tilesContainer, + ); + } + + Widget openStreetMapTileLayer(CacheStore cacheStore) { + return TileLayer( + urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', + userAgentPackageName: 'com.darkmoonight.rain', + tileProvider: CachedTileProvider( + store: cacheStore, + maxStale: const Duration(days: 30), + )); + } + + return FutureBuilder( + future: _cacheStoreFuture, + builder: (context, snapshot) { + if (snapshot.hasData) { + final cacheStore = snapshot.data!; + return FlutterMap( + mapController: _animatedMapController.mapController, + options: MapOptions( + backgroundColor: context.theme.scaffoldBackgroundColor, + initialCenter: LatLng(mainLocation.lat!, mainLocation.lon!), + initialZoom: 12, + cameraConstraint: CameraConstraint.contain( + bounds: LatLngBounds( + const LatLng(-90, -180), + const LatLng(90, 180), + ), + ), + ), + children: [ + isDarkMode + ? darkModeTilesContainerBuilder( + context, openStreetMapTileLayer(cacheStore)) + : openStreetMapTileLayer(cacheStore) + ], + ); + } + if (snapshot.hasError) { + return Center(child: Text(snapshot.error.toString())); + } + return const Center(child: CircularProgressIndicator()); + }, + ); + } +} diff --git a/lib/app/modules/settings/view/settings.dart b/lib/app/modules/settings/view/settings.dart index 97641c8..cc842f1 100644 --- a/lib/app/modules/settings/view/settings.dart +++ b/lib/app/modules/settings/view/settings.dart @@ -5,8 +5,9 @@ import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:gap/gap.dart'; import 'package:geolocator/geolocator.dart'; import 'package:get/get.dart'; -import 'package:iconsax/iconsax.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:intl/intl.dart'; +import 'package:line_awesome_flutter/line_awesome_flutter.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:rain/app/controller/controller.dart'; import 'package:rain/app/data/weather.dart'; @@ -64,7 +65,7 @@ class _SettingsPageState extends State { crossAxisAlignment: CrossAxisAlignment.center, children: [ SettingCard( - icon: const Icon(Iconsax.brush_1), + icon: const Icon(IconsaxPlusLinear.brush_1), text: 'appearance'.tr, onPressed: () { showModalBottomSheet( @@ -92,7 +93,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.moon), + icon: const Icon(IconsaxPlusLinear.moon), text: 'theme'.tr, dropdown: true, dropdownName: settings.theme?.tr, @@ -123,7 +124,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.mobile), + icon: const Icon(IconsaxPlusLinear.mobile), text: 'amoledTheme'.tr, switcher: true, value: settings.amoledTheme, @@ -135,7 +136,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.colorfilter), + icon: const Icon(IconsaxPlusLinear.colorfilter), text: 'materialColor'.tr, switcher: true, value: settings.materialColor, @@ -147,7 +148,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.additem), + icon: const Icon(IconsaxPlusLinear.additem), text: 'largeElement'.tr, switcher: true, value: settings.largeElement, @@ -175,7 +176,7 @@ class _SettingsPageState extends State { }, ), SettingCard( - icon: const Icon(Iconsax.code), + icon: const Icon(IconsaxPlusLinear.code_1), text: 'functions'.tr, onPressed: () { showModalBottomSheet( @@ -203,7 +204,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.map_1), + icon: const Icon(IconsaxPlusLinear.map), text: 'location'.tr, switcher: true, value: settings.location, @@ -270,7 +271,8 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.notification_1), + icon: const Icon( + IconsaxPlusLinear.notification_1), text: 'notifications'.tr, switcher: true, value: settings.notifications, @@ -307,7 +309,8 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.notification_status), + icon: const Icon( + IconsaxPlusLinear.notification_status), text: 'timeRange'.tr, dropdown: true, dropdownName: '$timeRange', @@ -334,7 +337,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.timer_start), + icon: const Icon(IconsaxPlusLinear.timer_start), text: 'timeStart'.tr, info: true, infoSettings: true, @@ -394,7 +397,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.timer_pause), + icon: const Icon(IconsaxPlusLinear.timer_pause), text: 'timeEnd'.tr, info: true, infoSettings: true, @@ -464,7 +467,7 @@ class _SettingsPageState extends State { }, ), SettingCard( - icon: const Icon(Iconsax.d_square), + icon: const Icon(IconsaxPlusLinear.d_square), text: 'data'.tr, onPressed: () { showModalBottomSheet( @@ -492,7 +495,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.cloud_notif), + icon: const Icon(IconsaxPlusLinear.cloud_notif), text: 'roundDegree'.tr, switcher: true, value: settings.roundDegree, @@ -510,7 +513,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.sun_1), + icon: const Icon(IconsaxPlusLinear.sun_1), text: 'degrees'.tr, dropdown: true, dropdownName: settings.degrees.tr, @@ -533,7 +536,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.rulerpen), + icon: const Icon(IconsaxPlusLinear.rulerpen), text: 'measurements'.tr, dropdown: true, dropdownName: settings.measurements.tr, @@ -557,7 +560,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.wind), + icon: const Icon(IconsaxPlusLinear.wind), text: 'wind'.tr, dropdown: true, dropdownName: settings.wind.tr, @@ -573,7 +576,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.ruler), + icon: const Icon(IconsaxPlusLinear.ruler), text: 'pressure'.tr, dropdown: true, dropdownName: settings.pressure.tr, @@ -589,7 +592,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.clock), + icon: const Icon(IconsaxPlusLinear.clock_1), text: 'timeformat'.tr, dropdown: true, dropdownName: settings.timeformat.tr, @@ -615,7 +618,7 @@ class _SettingsPageState extends State { }, ), SettingCard( - icon: const Icon(Iconsax.setting_3), + icon: const Icon(IconsaxPlusLinear.setting_3), text: 'widget'.tr, onPressed: () { showModalBottomSheet( @@ -643,7 +646,8 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.bucket_square), + icon: + const Icon(IconsaxPlusLinear.bucket_square), text: 'widgetBackground'.tr, info: true, infoWidget: CircleAvatar( @@ -711,7 +715,7 @@ class _SettingsPageState extends State { ), IconButton( icon: const Icon( - Iconsax.tick_square, + IconsaxPlusLinear.tick_square, ), onPressed: () { if (colorBackground == null) { @@ -735,7 +739,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.text_block), + icon: const Icon(IconsaxPlusLinear.text_block), text: 'widgetText'.tr, info: true, infoWidget: CircleAvatar( @@ -800,7 +804,7 @@ class _SettingsPageState extends State { ), IconButton( icon: const Icon( - Iconsax.tick_square, + IconsaxPlusLinear.tick_square, ), onPressed: () { if (colorText == null) return; @@ -832,7 +836,7 @@ class _SettingsPageState extends State { }, ), SettingCard( - icon: const Icon(Iconsax.language_square), + icon: const Icon(IconsaxPlusLinear.language_square), text: 'language'.tr, info: true, infoSettings: true, @@ -899,7 +903,7 @@ class _SettingsPageState extends State { }, ), SettingCard( - icon: const Icon(Iconsax.dollar_square), + icon: const Icon(IconsaxPlusLinear.dollar_square), text: 'support'.tr, onPressed: () { showModalBottomSheet( @@ -927,14 +931,14 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.card), + icon: const Icon(IconsaxPlusLinear.card), text: 'DonationAlerts', onPressed: () => urlLauncher( 'https://www.donationalerts.com/r/darkmoonight'), ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.wallet), + icon: const Icon(IconsaxPlusLinear.wallet), text: 'ЮMoney', onPressed: () => urlLauncher( 'https://yoomoney.ru/to/4100117672775961'), @@ -951,7 +955,7 @@ class _SettingsPageState extends State { }, ), SettingCard( - icon: const Icon(Iconsax.link_square), + icon: const Icon(IconsaxPlusLinear.link_square), text: 'groups'.tr, onPressed: () { showModalBottomSheet( @@ -979,7 +983,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.voice_square), + icon: const Icon(LineAwesomeIcons.discord), text: 'Discord', onPressed: () async { final Uri url = Uri.parse( @@ -992,7 +996,7 @@ class _SettingsPageState extends State { ), SettingCard( elevation: 4, - icon: const Icon(Iconsax.message_square), + icon: const Icon(LineAwesomeIcons.telegram), text: 'Telegram', onPressed: () async { final Uri url = @@ -1015,7 +1019,7 @@ class _SettingsPageState extends State { }, ), SettingCard( - icon: const Icon(Iconsax.document), + icon: const Icon(IconsaxPlusLinear.document), text: 'license'.tr, onPressed: () => Get.to( LicensePage( @@ -1037,7 +1041,7 @@ class _SettingsPageState extends State { ), ), SettingCard( - icon: const Icon(Iconsax.hierarchy_square_2), + icon: const Icon(IconsaxPlusLinear.hierarchy_square_2), text: 'version'.tr, info: true, infoWidget: _TextInfo( @@ -1045,10 +1049,7 @@ class _SettingsPageState extends State { ), ), SettingCard( - icon: Image.asset( - 'assets/images/github.png', - scale: 20, - ), + icon: const Icon(LineAwesomeIcons.github), text: '${'project'.tr} GitHub', onPressed: () => urlLauncher('https://github.com/darkmoonight/Rain'), diff --git a/lib/app/modules/settings/widgets/setting_card.dart b/lib/app/modules/settings/widgets/setting_card.dart index d0d0790..0a2f96c 100644 --- a/lib/app/modules/settings/widgets/setting_card.dart +++ b/lib/app/modules/settings/widgets/setting_card.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:iconsax/iconsax.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; class SettingCard extends StatelessWidget { const SettingCard({ @@ -63,7 +63,7 @@ class SettingCard extends StatelessWidget { ? DropdownButton( icon: const Padding( padding: EdgeInsets.only(left: 7), - child: Icon(Iconsax.arrow_down_1), + child: Icon(IconsaxPlusLinear.arrow_down), ), iconSize: 15, alignment: AlignmentDirectional.centerEnd, @@ -85,14 +85,14 @@ class SettingCard extends StatelessWidget { children: [ infoWidget!, const Icon( - Iconsax.arrow_right_3, + IconsaxPlusLinear.arrow_right_3, size: 18, ), ], ) : infoWidget! : const Icon( - Iconsax.arrow_right_3, + IconsaxPlusLinear.arrow_right_3, size: 18, ), ), diff --git a/lib/app/widgets/daily/info_daily_card.dart b/lib/app/widgets/daily/info_daily_card.dart index 02d5445..64fe1d4 100644 --- a/lib/app/widgets/daily/info_daily_card.dart +++ b/lib/app/widgets/daily/info_daily_card.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:iconsax/iconsax.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:intl/intl.dart'; import 'package:rain/app/data/weather.dart'; import 'package:rain/app/widgets/desc/desc_container.dart'; @@ -65,7 +65,7 @@ class _InfoDailyCardState extends State { Get.back(); }, icon: const Icon( - Iconsax.arrow_left_1, + IconsaxPlusLinear.arrow_left_3, size: 20, ), splashColor: Colors.transparent, diff --git a/lib/app/widgets/daily/weather_more.dart b/lib/app/widgets/daily/weather_more.dart index 328bcfd..348b003 100644 --- a/lib/app/widgets/daily/weather_more.dart +++ b/lib/app/widgets/daily/weather_more.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:iconsax/iconsax.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:rain/app/data/weather.dart'; import 'package:rain/app/widgets/daily/info_daily_card.dart'; import 'package:rain/app/widgets/daily/list_daily_card.dart'; @@ -32,7 +32,7 @@ class _WeatherMoreState extends State { Get.back(); }, icon: const Icon( - Iconsax.arrow_left_1, + IconsaxPlusLinear.arrow_left_3, size: 20, ), splashColor: transparent, diff --git a/lib/app/widgets/now/weather_now.dart b/lib/app/widgets/now/weather_now.dart index be9626c..7d385c7 100644 --- a/lib/app/widgets/now/weather_now.dart +++ b/lib/app/widgets/now/weather_now.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter_glow/flutter_glow.dart'; import 'package:gap/gap.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; @@ -51,12 +50,17 @@ class _WeatherNowState extends State { fit: BoxFit.fill, height: 200, ), - GlowText( + Text( '${roundDegree ? widget.degree.round() : widget.degree}', style: context.textTheme.displayLarge?.copyWith( - fontSize: 90, - fontWeight: FontWeight.w800, - ), + fontSize: 90, + fontWeight: FontWeight.w800, + shadows: const [ + Shadow( + blurRadius: 15, + offset: Offset(5, 5), + ) + ]), ), Text( statusWeather.getText(widget.weather), diff --git a/lib/translation/ru_ru.dart b/lib/translation/ru_ru.dart index 84a98ff..735d825 100644 --- a/lib/translation/ru_ru.dart +++ b/lib/translation/ru_ru.dart @@ -132,5 +132,6 @@ class RuRu { 'hourlyVariables': 'Почасовые погодные условия', 'dailyVariables': 'Ежедневные погодные условия', 'largeElement': 'Отображение погоды большим элементом', + 'map': 'Карта', }; } diff --git a/pubspec.lock b/pubspec.lock index 12eab34..2032060 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -26,10 +26,10 @@ packages: dependency: transitive description: name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" archive: dependency: transitive description: @@ -214,6 +214,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + dart_earcut: + dependency: transitive + description: + name: dart_earcut + sha256: "41b493147e30a051efb2da1e3acb7f38fe0db60afba24ac1ea5684cee272721e" + url: "https://pub.dev" + source: hosted + version: "1.1.0" dart_style: dependency: transitive description: @@ -262,6 +270,22 @@ packages: url: "https://pub.dev" source: hosted version: "5.5.0+1" + dio_cache_interceptor: + dependency: "direct main" + description: + name: dio_cache_interceptor + sha256: fb7905c0d12075d8786a6b63bffd64ae062d053f682cfaf28d145a2686507308 + url: "https://pub.dev" + source: hosted + version: "3.5.0" + dio_cache_interceptor_file_store: + dependency: "direct main" + description: + name: dio_cache_interceptor_file_store + sha256: "9c5eff94481913ade139bb33ce58095483aae805aa1cb39c0471ca76f624c366" + url: "https://pub.dev" + source: hosted + version: "1.2.3" dio_web_adapter: dependency: transitive description: @@ -290,10 +314,10 @@ packages: dependency: transitive description: name: ffi - sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" file: dependency: transitive description: @@ -323,15 +347,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.0" - flutter_glow: - dependency: "direct main" - description: - path: "." - ref: HEAD - resolved-ref: "7c5e1fd34583db4b40073add9ca329b03bf52a51" - url: "https://github.com/payam-zahedi/flutter-glow.git" - source: git - version: "0.3.1" flutter_hsvcolor_picker: dependency: "direct main" description: @@ -385,6 +400,38 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_map: + dependency: "direct main" + description: + name: flutter_map + sha256: "2ecb34619a4be19df6f40c2f8dce1591675b4eff7a6857bd8f533706977385da" + url: "https://pub.dev" + source: hosted + version: "7.0.2" + flutter_map_animations: + dependency: "direct main" + description: + name: flutter_map_animations + sha256: "826c10a551d9dbb686a8ed9ee8815b974475812c41beb4ce9fe19095fe1c5611" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + flutter_map_cache: + dependency: "direct main" + description: + name: flutter_map_cache + sha256: "47607b8d95ca791f0367d18955035d098faf80990e5e3bb0dbfa26271a6c2f43" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + flutter_map_cancellable_tile_provider: + dependency: "direct main" + description: + name: flutter_map_cancellable_tile_provider + sha256: "6a2221be8044bd2abfd6ec1de97483fe03f01c7f8b6c2adb4ba160f60d95699a" + url: "https://pub.dev" + source: hosted + version: "3.0.0" flutter_native_splash: dependency: "direct dev" description: @@ -595,14 +642,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" - iconsax: + iconsax_plus: dependency: "direct main" description: - name: iconsax - sha256: fb0144c61f41f3f8a385fadc27783ea9f5359670be885ed7f35cef32565d5228 + name: iconsax_plus + sha256: e9e51b0652a1d3ceea5fedbfc2c1bb4ad432c2ceb7be7de2e30caf085678933c url: "https://pub.dev" source: hosted - version: "0.0.8" + version: "1.0.0" image: dependency: transitive description: @@ -691,6 +738,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.0" + latlong2: + dependency: "direct main" + description: + name: latlong2 + sha256: "98227922caf49e6056f91b6c56945ea1c7b166f28ffcd5fb8e72fc0b453cc8fe" + url: "https://pub.dev" + source: hosted + version: "0.9.1" leak_tracker: dependency: transitive description: @@ -715,6 +770,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.1" + line_awesome_flutter: + dependency: "direct main" + description: + name: line_awesome_flutter + sha256: "24cef0a34816ffed9846f1793172333be50dc29678d499893b3cb38d3c53db24" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -723,6 +786,22 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" + lists: + dependency: transitive + description: + name: lists + sha256: "4ca5c19ae4350de036a7e996cdd1ee39c93ac0a2b840f4915459b7d0a7d4ab27" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + logger: + dependency: transitive + description: + name: logger + sha256: "697d067c60c20999686a0add96cf6aba723b3aa1f83ecf806a8097231529ec32" + url: "https://pub.dev" + source: hosted + version: "2.4.0" logging: dependency: transitive description: @@ -755,6 +834,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.11.1" + material_floating_search_bar_2: + dependency: "direct main" + description: + name: material_floating_search_bar_2 + sha256: ab0c6d209d9491f98dd4c72f2641d0ba1dd35c87effca1f23d8679bece43add0 + url: "https://pub.dev" + source: hosted + version: "0.5.0" meta: dependency: transitive description: @@ -763,6 +850,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.15.0" + mgrs_dart: + dependency: transitive + description: + name: mgrs_dart + sha256: fb89ae62f05fa0bb90f70c31fc870bcbcfd516c843fb554452ab3396f78586f7 + url: "https://pub.dev" + source: hosted + version: "2.0.0" mime: dependency: transitive description: @@ -823,10 +918,10 @@ packages: dependency: transitive description: name: path_provider_android - sha256: "490539678396d4c3c0b06efdaab75ae60675c3e0c66f72bc04c2e2c1e0e2abeb" + sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7" url: "https://pub.dev" source: hosted - version: "2.2.9" + version: "2.2.10" path_provider_foundation: dependency: transitive description: @@ -883,6 +978,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + polylabel: + dependency: transitive + description: + name: polylabel + sha256: "41b9099afb2aa6c1730bdd8a0fab1400d287694ec7615dd8516935fa3144214b" + url: "https://pub.dev" + source: hosted + version: "1.0.1" pool: dependency: transitive description: @@ -891,6 +994,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" + proj4dart: + dependency: transitive + description: + name: proj4dart + sha256: c8a659ac9b6864aa47c171e78d41bbe6f5e1d7bd790a5814249e6b68bc44324e + url: "https://pub.dev" + source: hosted + version: "2.1.0" pub_semver: dependency: transitive description: @@ -1008,6 +1119,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" term_glyph: dependency: transitive description: @@ -1064,6 +1183,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + unicode: + dependency: transitive + description: + name: unicode + sha256: "0f69e46593d65245774d4f17125c6084d2c20b4e473a983f6e21b7d7762218f1" + url: "https://pub.dev" + source: hosted + version: "0.3.1" universal_io: dependency: transitive description: @@ -1196,10 +1323,10 @@ packages: dependency: transitive description: name: win32 - sha256: "015002c060f1ae9f41a818f2d5640389cc05283e368be19dc8d77cecb43c40c9" + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" url: "https://pub.dev" source: hosted - version: "5.5.3" + version: "5.5.4" win32_registry: dependency: transitive description: @@ -1208,6 +1335,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.4" + wkt_parser: + dependency: transitive + description: + name: wkt_parser + sha256: "8a555fc60de3116c00aad67891bcab20f81a958e4219cc106e3c037aa3937f13" + url: "https://pub.dev" + source: hosted + version: "2.0.0" workmanager: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index e911667..df782ea 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,22 +17,18 @@ dependencies: gap: ^3.0.1 dio: ^5.5.0+1 intl: ^0.19.0 - isar: - version: ^3.1.7 - hosted: https://pub.isar-community.dev/ shimmer: ^3.0.0 - iconsax: ^0.0.8 + latlong2: ^0.9.1 timezone: ^0.9.4 geocoding: ^3.0.0 geolocator: ^13.0.1 home_widget: ^0.6.0 workmanager: ^0.5.2 + flutter_map: ^7.0.2 google_fonts: ^6.2.1 url_launcher: ^6.3.0 + iconsax_plus: ^1.0.0 time_machine: ^0.9.17 - flutter_glow: - git: - url: https://github.com/payam-zahedi/flutter-glow.git dynamic_color: ^1.7.0 path_provider: ^2.1.4 # quick_settings: ^1.0.1 @@ -41,17 +37,26 @@ dependencies: device_info_plus: ^10.1.2 package_info_plus: ^8.0.2 connectivity_plus: ^6.0.5 + flutter_map_cache: ^1.5.1 freezed_annotation: ^2.4.4 - isar_flutter_libs: - version: ^3.1.7 - hosted: https://pub.isar-community.dev/ flutter_displaymode: ^0.6.0 lat_lng_to_timezone: ^0.2.0 - # font_awesome_flutter: ^10.7.0 + line_awesome_flutter: ^3.0.1 + dio_cache_interceptor: ^3.5.0 + flutter_map_animations: ^0.7.0 flutter_hsvcolor_picker: ^1.5.1 scrollable_positioned_list: ^0.3.8 flutter_local_notifications: ^17.2.2 + material_floating_search_bar_2: ^0.5.0 internet_connection_checker_plus: ^2.5.1 + dio_cache_interceptor_file_store: ^1.2.2 + flutter_map_cancellable_tile_provider: ^3.0.0 + isar: + version: ^3.1.7 + hosted: https://pub.isar-community.dev/ + isar_flutter_libs: + version: ^3.1.7 + hosted: https://pub.isar-community.dev/ # Uncomment this for publishing FLOSS variant # dependency_overrides: @@ -67,12 +72,12 @@ dev_dependencies: freezed: ^2.5.7 build_runner: ^2.4.12 flutter_lints: ^4.0.0 - isar_generator: - version: ^3.1.7 - hosted: https://pub.isar-community.dev/ json_serializable: ^6.8.0 flutter_native_splash: ^2.4.1 flutter_launcher_icons: ^0.13.1 + isar_generator: + version: ^3.1.7 + hosted: https://pub.isar-community.dev/ flutter_launcher_icons: android: true