Skip to content

Commit 9aa1109

Browse files
authored
Convert all providers to the new Riverpod Generator syntax (#127)
* Add dependencies needed for Riverpod Generator * Convert all providers to the new Riverpod Generator syntax
1 parent 3ca3741 commit 9aa1109

26 files changed

+820
-79
lines changed

analysis_options.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
# packages, and plugins designed to encourage good coding practices.
1010
include: package:flutter_lints/flutter.yaml
1111

12+
analyzer:
13+
plugins:
14+
- custom_lint
15+
1216
linter:
1317
# The lint rules applied to this project can be customized in the
1418
# section below to disable rules from the `package:flutter_lints/flutter.yaml`

ios/Podfile.lock

+3-3
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ PODS:
7171
- nanopb/encode (= 2.30909.0)
7272
- nanopb/decode (2.30909.0)
7373
- nanopb/encode (2.30909.0)
74-
- PromisesObjC (2.2.0)
74+
- PromisesObjC (2.1.1)
7575
- shared_preferences_foundation (0.0.1):
7676
- Flutter
7777
- FlutterMacOS
@@ -133,12 +133,12 @@ SPEC CHECKSUMS:
133133
FirebaseCore: 988754646ab3bd4bdcb740f1bfe26b9f6c0d5f2a
134134
FirebaseCoreInternal: e463f41bb935cd049505bf7e9a5bdd7dcea90df6
135135
FirebaseDynamicLinks: 51c81d07bd63155bb56d76b0abdda79c8a3d8d02
136-
FirebaseFirestore: f16ed5e8e5b024eff4928bc33605df9526bda650
136+
FirebaseFirestore: ef5e47e1489c03dc978f94e8b43ad5f67a77df8c
137137
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
138138
GoogleUtilities: c2bdc4cf2ce786c4d2e6b3bcfd599a25ca78f06f
139139
GTMSessionFetcher: c9e714f7eec91a55641e2bab9f45fd83a219b882
140140
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
141-
PromisesObjC: 09985d6d70fbe7878040aa746d78236e6946d2ef
141+
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
142142
shared_preferences_foundation: 986fc17f3d3251412d18b0265f9c64113a8c2472
143143

144144
PODFILE CHECKSUM: 8ed72f4eb3f774eb823caa5f6b48b21a5eb9975a
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import 'package:firebase_auth/firebase_auth.dart';
2-
import 'package:flutter_riverpod/flutter_riverpod.dart';
2+
import 'package:riverpod_annotation/riverpod_annotation.dart';
3+
4+
part 'firebase_auth_repository.g.dart';
35

46
class AuthRepository {
57
AuthRepository(this._auth);
@@ -13,13 +15,17 @@ class AuthRepository {
1315
}
1416
}
1517

16-
final firebaseAuthProvider =
17-
Provider<FirebaseAuth>((ref) => FirebaseAuth.instance);
18+
@Riverpod(keepAlive: true)
19+
FirebaseAuth firebaseAuth(FirebaseAuthRef ref) {
20+
return FirebaseAuth.instance;
21+
}
1822

19-
final authRepositoryProvider = Provider<AuthRepository>((ref) {
23+
@Riverpod(keepAlive: true)
24+
AuthRepository authRepository(AuthRepositoryRef ref) {
2025
return AuthRepository(ref.watch(firebaseAuthProvider));
21-
});
26+
}
2227

23-
final authStateChangesProvider = StreamProvider<User?>((ref) {
28+
@riverpod
29+
Stream<User?> authStateChanges(AuthStateChangesRef ref) {
2430
return ref.watch(authRepositoryProvider).authStateChanges();
25-
});
31+
}

lib/src/features/authentication/data/firebase_auth_repository.g.dart

+53
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1+
import 'package:firebase_auth/firebase_auth.dart' hide EmailAuthProvider;
12
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
2-
import 'package:flutter_riverpod/flutter_riverpod.dart';
3+
import 'package:riverpod_annotation/riverpod_annotation.dart';
34

4-
final authProvidersProvider = Provider<List<AuthProvider>>((ref) {
5+
part 'auth_providers.g.dart';
6+
7+
@Riverpod(keepAlive: true)
8+
List<AuthProvider<AuthListener, AuthCredential>> authProviders(
9+
AuthProvidersRef ref) {
510
return [
611
EmailAuthProvider(),
712
];
8-
});
13+
}

lib/src/features/authentication/presentation/auth_providers.g.dart

+26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/features/entries/application/entries_service.dart

+16-14
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:flutter_riverpod/flutter_riverpod.dart';
1+
import 'package:riverpod_annotation/riverpod_annotation.dart';
22
import 'package:rxdart/rxdart.dart';
33
import 'package:starter_architecture_flutter_firebase/src/features/authentication/data/firebase_auth_repository.dart';
44
import 'package:starter_architecture_flutter_firebase/src/features/authentication/domain/app_user.dart';
@@ -11,6 +11,8 @@ import 'package:starter_architecture_flutter_firebase/src/utils/format.dart';
1111
import 'package:starter_architecture_flutter_firebase/src/features/entries/domain/entry.dart';
1212
import 'package:starter_architecture_flutter_firebase/src/features/jobs/domain/job.dart';
1313

14+
part 'entries_service.g.dart';
15+
1416
// TODO: Clean up this code a bit more
1517
class EntriesService {
1618
EntriesService(
@@ -78,21 +80,21 @@ class EntriesService {
7880
}
7981
}
8082

81-
final entriesServiceProvider = Provider<EntriesService>((ref) {
83+
@riverpod
84+
EntriesService entriesService(EntriesServiceRef ref) {
8285
return EntriesService(
8386
jobsRepository: ref.watch(jobsRepositoryProvider),
8487
entriesRepository: ref.watch(entriesRepositoryProvider),
8588
);
86-
});
89+
}
8790

88-
final entriesTileModelStreamProvider =
89-
StreamProvider.autoDispose<List<EntriesListTileModel>>(
90-
(ref) {
91-
final user = ref.watch(firebaseAuthProvider).currentUser;
92-
if (user == null) {
93-
throw AssertionError('User can\'t be null when fetching entries');
94-
}
95-
final entriesService = ref.watch(entriesServiceProvider);
96-
return entriesService.entriesTileModelStream(user.uid);
97-
},
98-
);
91+
@riverpod
92+
Stream<List<EntriesListTileModel>> entriesTileModelStream(
93+
EntriesTileModelStreamRef ref) {
94+
final user = ref.watch(firebaseAuthProvider).currentUser;
95+
if (user == null) {
96+
throw AssertionError('User can\'t be null when fetching entries');
97+
}
98+
final entriesService = ref.watch(entriesServiceProvider);
99+
return entriesService.entriesTileModelStream(user.uid);
100+
}

lib/src/features/entries/application/entries_service.g.dart

+42
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/features/entries/presentation/entry_screen/entry_screen_controller.dart

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import 'dart:async';
22

3-
import 'package:flutter_riverpod/flutter_riverpod.dart';
3+
import 'package:riverpod_annotation/riverpod_annotation.dart';
44
import 'package:starter_architecture_flutter_firebase/src/features/authentication/data/firebase_auth_repository.dart';
55
import 'package:starter_architecture_flutter_firebase/src/features/entries/data/entries_repository.dart';
66
import 'package:starter_architecture_flutter_firebase/src/features/entries/domain/entry.dart';
77
import 'package:starter_architecture_flutter_firebase/src/features/jobs/domain/job.dart';
88

9-
class EntryScreenController extends AutoDisposeAsyncNotifier<void> {
9+
part 'entry_screen_controller.g.dart';
10+
11+
@riverpod
12+
class EntryScreenController extends _$EntryScreenController {
1013
@override
1114
FutureOr<void> build() {
1215
// ok to leave this empty if the return type is FutureOr<void>
@@ -47,7 +50,3 @@ class EntryScreenController extends AutoDisposeAsyncNotifier<void> {
4750
return state.hasError == false;
4851
}
4952
}
50-
51-
final entryScreenControllerProvider =
52-
AutoDisposeAsyncNotifierProvider<EntryScreenController, void>(
53-
EntryScreenController.new);

lib/src/features/entries/presentation/entry_screen/entry_screen_controller.g.dart

+26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/features/jobs/data/jobs_repository.dart

+12-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import 'dart:async';
22

33
import 'package:cloud_firestore/cloud_firestore.dart';
4-
import 'package:flutter_riverpod/flutter_riverpod.dart';
4+
import 'package:riverpod_annotation/riverpod_annotation.dart';
55
import 'package:starter_architecture_flutter_firebase/src/features/authentication/data/firebase_auth_repository.dart';
66
import 'package:starter_architecture_flutter_firebase/src/features/authentication/domain/app_user.dart';
77
import 'package:starter_architecture_flutter_firebase/src/features/entries/data/entries_repository.dart';
88
import 'package:starter_architecture_flutter_firebase/src/features/entries/domain/entry.dart';
99
import 'package:starter_architecture_flutter_firebase/src/features/jobs/domain/job.dart';
1010

11+
part 'jobs_repository.g.dart';
12+
1113
class JobsRepository {
1214
const JobsRepository(this._firestore);
1315
final FirebaseFirestore _firestore;
@@ -75,25 +77,27 @@ class JobsRepository {
7577
}
7678
}
7779

78-
final jobsRepositoryProvider = Provider<JobsRepository>((ref) {
80+
@Riverpod(keepAlive: true)
81+
JobsRepository jobsRepository(JobsRepositoryRef ref) {
7982
return JobsRepository(FirebaseFirestore.instance);
80-
});
83+
}
8184

82-
final jobsQueryProvider = Provider<Query<Job>>((ref) {
85+
@riverpod
86+
Query<Job> jobsQuery(JobsQueryRef ref) {
8387
final user = ref.watch(firebaseAuthProvider).currentUser;
8488
if (user == null) {
8589
throw AssertionError('User can\'t be null');
8690
}
8791
final repository = ref.watch(jobsRepositoryProvider);
8892
return repository.queryJobs(uid: user.uid);
89-
});
93+
}
9094

91-
final jobStreamProvider =
92-
StreamProvider.autoDispose.family<Job, JobID>((ref, jobId) {
95+
@riverpod
96+
Stream<Job> jobStream(JobStreamRef ref, JobID jobId) {
9397
final user = ref.watch(firebaseAuthProvider).currentUser;
9498
if (user == null) {
9599
throw AssertionError('User can\'t be null');
96100
}
97101
final repository = ref.watch(jobsRepositoryProvider);
98102
return repository.watchJob(uid: user.uid, jobId: jobId);
99-
});
103+
}

0 commit comments

Comments
 (0)