This commit is contained in:
Yoshi 2024-08-12 21:03:35 +03:00
parent b2e843c5d9
commit 6c7da7b28d
16 changed files with 380 additions and 129 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -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<InfoWeatherCard> {
leading: IconButton(
onPressed: () => Get.back(),
icon: const Icon(
Iconsax.arrow_left_1,
IconsaxPlusLinear.arrow_left_3,
size: 20,
),
),

View file

@ -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<ListWeatherCard> {
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<ListWeatherCard> {
applyFilter('');
},
icon: const Icon(
Iconsax.close_circle,
IconsaxPlusLinear.close_circle,
color: Colors.grey,
size: 20,
),

View file

@ -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<CreateWeatherCard>
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<CreateWeatherCard>
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<CreateWeatherCard>
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<CreateWeatherCard>
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<CreateWeatherCard>
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),

View file

@ -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<WeatherCardList> {
child: const Padding(
padding: EdgeInsets.only(right: 15),
child: Icon(
Iconsax.trush_square,
IconsaxPlusLinear.trash_square,
color: Colors.red,
),
),

View file

@ -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<SelectGeolocation> {
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<SelectGeolocation> {
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<SelectGeolocation> {
setState(() => isLoading = false);
},
icon: const Icon(
Iconsax.location,
IconsaxPlusLinear.location,
),
),
),
@ -288,7 +288,7 @@ class _SelectGeolocationState extends State<SelectGeolocation> {
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<SelectGeolocation> {
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<SelectGeolocation> {
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<SelectGeolocation> {
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),
),

View file

@ -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<HomePage> with TickerProviderStateMixin {
final pages = [
const WeatherPage(),
const ListWeatherCard(),
const MapWeather(),
const SettingsPage(),
];
@ -73,6 +75,11 @@ class _HomePageState extends State<HomePage> 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<HomePage> with TickerProviderStateMixin {
transition: Transition.downToUp);
},
icon: const Icon(
Iconsax.global_search,
IconsaxPlusLinear.global_search,
size: 18,
),
),
@ -184,26 +191,21 @@ class _HomePageState extends State<HomePage> 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(
'settings_full'.tr,
style: textTheme.titleMedium?.copyWith(
fontWeight: FontWeight.w600,
fontSize: 18,
'map'.tr,
style: textStyle,
),
3 => Text(
'settings_full'.tr,
style: textStyle,
),
int() => null,
},
@ -221,7 +223,9 @@ class _HomePageState extends State<HomePage> 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<HomePage> 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<HomePage> with TickerProviderStateMixin {
const CreateWeatherCard(),
),
child: const Icon(
Iconsax.add,
IconsaxPlusLinear.add,
),
)
: null,

View file

@ -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<MapWeather> createState() => _MapWeatherState();
}
class _MapWeatherState extends State<MapWeather> with TickerProviderStateMixin {
late final _animatedMapController = AnimatedMapController(vsync: this);
final weatherController = Get.put(WeatherController());
final Future<CacheStore> _cacheStoreFuture = _getCacheStore();
static Future<CacheStore> _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(<double>[
-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<CacheStore>(
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());
},
);
}
}

View file

@ -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<SettingsPage> {
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<SettingsPage> {
),
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<SettingsPage> {
),
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<SettingsPage> {
),
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<SettingsPage> {
),
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<SettingsPage> {
},
),
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<SettingsPage> {
),
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<SettingsPage> {
),
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<SettingsPage> {
),
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<SettingsPage> {
),
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<SettingsPage> {
),
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<SettingsPage> {
},
),
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<SettingsPage> {
),
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<SettingsPage> {
),
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<SettingsPage> {
),
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<SettingsPage> {
),
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<SettingsPage> {
),
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<SettingsPage> {
),
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<SettingsPage> {
},
),
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<SettingsPage> {
),
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<SettingsPage> {
),
IconButton(
icon: const Icon(
Iconsax.tick_square,
IconsaxPlusLinear.tick_square,
),
onPressed: () {
if (colorBackground == null) {
@ -735,7 +739,7 @@ class _SettingsPageState extends State<SettingsPage> {
),
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<SettingsPage> {
),
IconButton(
icon: const Icon(
Iconsax.tick_square,
IconsaxPlusLinear.tick_square,
),
onPressed: () {
if (colorText == null) return;
@ -832,7 +836,7 @@ class _SettingsPageState extends State<SettingsPage> {
},
),
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<SettingsPage> {
},
),
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<SettingsPage> {
),
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<SettingsPage> {
},
),
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<SettingsPage> {
),
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<SettingsPage> {
),
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<SettingsPage> {
},
),
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<SettingsPage> {
),
),
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<SettingsPage> {
),
),
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'),

View file

@ -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<String>(
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,
),
),

View file

@ -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<InfoDailyCard> {
Get.back();
},
icon: const Icon(
Iconsax.arrow_left_1,
IconsaxPlusLinear.arrow_left_3,
size: 20,
),
splashColor: Colors.transparent,

View file

@ -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<WeatherMore> {
Get.back();
},
icon: const Icon(
Iconsax.arrow_left_1,
IconsaxPlusLinear.arrow_left_3,
size: 20,
),
splashColor: transparent,

View file

@ -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<WeatherNow> {
fit: BoxFit.fill,
height: 200,
),
GlowText(
Text(
'${roundDegree ? widget.degree.round() : widget.degree}',
style: context.textTheme.displayLarge?.copyWith(
fontSize: 90,
fontWeight: FontWeight.w800,
),
shadows: const [
Shadow(
blurRadius: 15,
offset: Offset(5, 5),
)
]),
),
Text(
statusWeather.getText(widget.weather),

View file

@ -132,5 +132,6 @@ class RuRu {
'hourlyVariables': 'Почасовые погодные условия',
'dailyVariables': 'Ежедневные погодные условия',
'largeElement': 'Отображение погоды большим элементом',
'map': 'Карта',
};
}

View file

@ -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:

View file

@ -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