This commit is contained in:
2026-06-29 20:43:13 +03:00
parent 19db4fe688
commit 64a3f4e34e
24 changed files with 1154 additions and 152 deletions
@@ -0,0 +1,8 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../services/backup_service.dart';
import 'premium_provider.dart';
final backupServiceProvider = Provider<BackupService>((ref) {
final token = ref.watch(purchaseTokenProvider) ?? '';
return BackupService(token);
});
+1 -3
View File
@@ -1,8 +1,6 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../features/dashboard/provider.dart';
import '../services/billing_service.dart';
final billingServiceProvider = Provider<BillingService>((ref) {
final prefs = ref.watch(sharedPreferencesProvider);
return MockBillingService(prefs);
return PlayBillingService();
});
+10 -12
View File
@@ -1,29 +1,27 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../features/dashboard/provider.dart';
import '../models/user_model.dart';
import '../services/premium_manager.dart';
import 'billing_provider.dart';
class CurrentUserNotifier extends Notifier<UserModel> {
static const _key = 'user_plan';
@override
UserModel build() {
final prefs = ref.watch(sharedPreferencesProvider);
final planName = prefs.getString(_key);
final plan = UserPlan.values.firstWhere(
(e) => e.name == planName,
orElse: () => UserPlan.free,
);
return UserModel(plan: plan);
final billing = ref.watch(billingServiceProvider);
final manager = PremiumManager(prefs, billing);
return UserModel(plan: manager.currentPlan);
}
Future<void> setPlan(UserPlan plan) async {
final prefs = ref.read(sharedPreferencesProvider);
state = UserModel(plan: plan);
await prefs.setString(_key, plan.name);
}
Future<void> toggleVip() async {
await setPlan(state.isVip ? UserPlan.free : UserPlan.vip);
Future<void> refreshFromPremium() async {
final prefs = ref.read(sharedPreferencesProvider);
final billing = ref.read(billingServiceProvider);
final manager = PremiumManager(prefs, billing);
state = UserModel(plan: manager.currentPlan);
}
}
@@ -0,0 +1,18 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:google_sign_in/google_sign_in.dart';
import '../services/google_drive_service.dart';
final googleDriveServiceProvider = Provider<GoogleDriveService>((ref) {
final signIn = GoogleSignIn(
scopes: [
'email',
'https://www.googleapis.com/auth/drive.appdata',
],
);
return GoogleDriveService(signIn);
});
final googleDriveUserProvider = StreamProvider<GoogleSignInAccount?>((ref) {
final service = ref.watch(googleDriveServiceProvider);
return service.onUserChanged;
});
@@ -0,0 +1,20 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../features/dashboard/provider.dart';
import '../services/premium_manager.dart';
import 'billing_provider.dart';
final premiumManagerProvider = Provider<PremiumManager>((ref) {
final prefs = ref.watch(sharedPreferencesProvider);
final billing = ref.watch(billingServiceProvider);
return PremiumManager(prefs, billing);
});
final isPremiumProvider = Provider<bool>((ref) {
final manager = ref.watch(premiumManagerProvider);
return manager.isPremium;
});
final purchaseTokenProvider = Provider<String?>((ref) {
final manager = ref.watch(premiumManagerProvider);
return manager.purchaseToken;
});