Flutter Pulse
513 subscribers
323 photos
701 links
На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.
Download Telegram
Шаблон Riverpod: упрощаем работу с состоянием приложения

Привет, разработчики Flutter! 👋 Сегодня мы рассмотрим полезный совет по использованию Riverpod - популярной библиотеки для управления состоянием приложения. 📈

Проблема: при использовании Riverpod часто приходится писать повторяющийся код, например, ref.read(myProvider).xxx. Это может быть утомительно и привести к ошибкам. 😩

Решение: использование расширений Dart для создания удобных шорткатов. 🔥



extension UserSessionRepositoryProvider on Ref {
UserSessionRepository get userSessionRepository =>
read(userSessionRepositoryProvider);

UserSessionRepository get userSessionRepository$ =>
watch(userSessionRepositoryProvider);
}



Эти расширения позволяют легко получать экземпляр UserSessionRepository, используя ref.userSessionRepository или следить за его изменениями с помощью ref.userSessionRepository$. 🔄

Пример использования:



Future<UserSession> startSession({
required Session session,
}) async {
final activeSession = await ref.userSessionRepository
.getActiveSession(idOrThrow);
if (activeSession != null) {
throw AlreadyRunningSessionException();
}
return ref.userSessionRepository.start(
idOrThrow,
UserSession.fromSession(session),
);
}



Такой подход делает код чище и читабельнее. 📚

Оцените новую рубрику и напишите в комментариях, насколько она вам полезна! 🤔

Все подобные новости можно найти по хэштегу #FlutterPulseTips 👍

#flutter #dart #flutterpulse #FlutterPulseTips #Riverpod #StateManagement #FlutterTips #MobileDevelopment #CodingTips
👍3
Flutter совет: шаблон RevenueCat

Вот несколько методов расширения, чтобы упростить работу с пакетом RevenueCat:

Получение периода подписки продукта в виде Duration



@override
Duration get duration => switch (revenueCatPackage.storeProduct.subscriptionPeriod) {
'P1W' => const Duration(days: 7),
'P1M' => const Duration(days: 30),
'P3M' => const Duration(days: 90),
'P6M' => const Duration(days: 180),
'P1Y' => const Duration(days: 365),
_ => Duration.zero,
};



Получение количества пробных дней для продукта



@override
int? get trialDays {
final introductory = revenueCatPackage.storeProduct.introductoryPrice;
if (introductory == null) {
return null;
}
if (introductory.price == 0) {
final unit = introductory.periodUnit;
switch (unit) {
case PeriodUnit.day:
return introductory.periodNumberOfUnits;
case PeriodUnit.week:
return introductory.periodNumberOfUnits * 7;
case PeriodUnit.month:
return introductory.periodNumberOfUnits * 30;
case PeriodUnit.year:
return introductory.periodNumberOfUnits * 365;
default:
return null;
}
}
return null;
}



Получение списка характеристик из метаданных RevenueCat в зависимости от языка пользователя



@override
List<String>? get features {
final locale = LocaleSettings.currentLocale.languageCode;
if (revenueCatOffer.metadata[locale] == null) {
return null;
}

final data = revenueCatOffer.metadata[locale]! as Map<Object?, Object?>;
final featurerObj = data["features"]! as List<Object?>;
return featurerObj.map((e) => e! as String).toList();
}



Оцените новую рубрику и напишите своё мнение! 👍💬

Все подобные новости можно найти по хэштегу #FlutterPulseTips

#flutter #dart #flutterpulse #FlutterPulseTips #RevenueCat #boilerplate #mobiledevelopment #appdevelopment #codingtips
🔥1