Шаблон Riverpod: упрощаем работу с состоянием приложения
Привет, разработчики Flutter! 👋 Сегодня мы рассмотрим полезный совет по использованию Riverpod - популярной библиотеки для управления состоянием приложения. 📈
Проблема: при использовании Riverpod часто приходится писать повторяющийся код, например,
Решение: использование расширений Dart для создания удобных шорткатов. 🔥
Эти расширения позволяют легко получать экземпляр
Пример использования:
Такой подход делает код чище и читабельнее. 📚
Оцените новую рубрику и напишите в комментариях, насколько она вам полезна! 🤔
Все подобные новости можно найти по хэштегу #FlutterPulseTips 👍
#flutter #dart #flutterpulse #FlutterPulseTips #Riverpod #StateManagement #FlutterTips #MobileDevelopment #CodingTips
Привет, разработчики 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
Получение количества пробных дней для продукта
Получение списка характеристик из метаданных RevenueCat в зависимости от языка пользователя
Оцените новую рубрику и напишите своё мнение! 👍💬
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #RevenueCat #boilerplate #mobiledevelopment #appdevelopment #codingtips
Вот несколько методов расширения, чтобы упростить работу с пакетом 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