Skip to content

Commit 3e8ab1e

Browse files
committed
fix initialization
1 parent 770e0ea commit 3e8ab1e

File tree

7 files changed

+25
-29
lines changed

7 files changed

+25
-29
lines changed

example/lib/main.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ void main() async {
2727

2828
print('Using temporary directory: ${_dir.path}');
2929

30-
container.read(adapterProviders.notifier).state = adapterProvidersMap;
31-
await container.read(initializeAdapters.future);
30+
await container.read(initializeFlutterData(adapterProvidersMap).future);
3231
container.users.logLevel = 2;
3332
container.tasks.logLevel = 2;
3433

lib/src/adapter/adapter.dart

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ abstract class _BaseAdapter<T extends DataModelMixin<T>> with _Lifecycle {
5959
/// This [Map] is typically required when initializing new models, and passed as-is.
6060
@protected
6161
@nonVirtual
62-
Map<String, Adapter> get adapters => _internalAdapters!;
62+
Map<String, Adapter> get adapters => _internalAdaptersMap!;
6363

6464
/// Give access to the dependency injection system
6565
@nonVirtual
@@ -188,8 +188,8 @@ abstract class _BaseAdapter<T extends DataModelMixin<T>> with _Lifecycle {
188188

189189
@protected
190190
Future<R> runInIsolate<R>(FutureOr<R> fn(Adapter adapter)) async {
191-
final _path = Directory(storage.path).parent.path;
192-
final _internalProviders = ref.read(adapterProviders)!;
191+
final storagePath = Directory(storage.path).parent.path;
192+
final internalProvidersMap = _internalProvidersMap!;
193193
final _internalType = internalType;
194194

195195
return await Isolate.run(() async {
@@ -198,20 +198,18 @@ abstract class _BaseAdapter<T extends DataModelMixin<T>> with _Lifecycle {
198198
container = ProviderContainer(
199199
overrides: [
200200
localStorageProvider.overrideWith(
201-
(ref) => LocalStorage(baseDirFn: () => _path),
201+
(ref) => LocalStorage(baseDirFn: () => storagePath),
202202
),
203203
],
204204
);
205205

206-
// TODO improve initializer API
207-
// set providers from outer context and start initialization
208-
container.read(adapterProviders.notifier).state = _internalProviders;
209-
await container.read(initializeAdapters.future);
206+
await container
207+
.read(initializeFlutterData(internalProvidersMap).future);
210208

211-
final adapter = _internalProviders[_internalType]!;
209+
final adapter = internalProvidersMap[_internalType]!;
212210
return fn(container.read(adapter));
213211
} finally {
214-
for (final provider in container.read(adapterProviders)!.values) {
212+
for (final provider in internalProvidersMap.values) {
215213
container.read(provider).dispose();
216214
}
217215
container.read(localStorageProvider).dispose();

lib/src/model/data_model.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ mixin DataModelMixin<T extends DataModelMixin<T>> {
3131
T get _this => this as T;
3232

3333
/// Exposes this type's [Adapter]
34-
Adapter<T> get _adapter => _internalAdapters![_internalType] as Adapter<T>;
34+
Adapter<T> get _adapter => _internalAdaptersMap![_internalType] as Adapter<T>;
3535

3636
T init() {
37-
final adapter = _internalAdapters![_internalType];
37+
final adapter = _internalAdaptersMap![_internalType];
3838
if (adapter != null) {
3939
adapter.initModel(
4040
this,

lib/src/model/relationship/relationship.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ sealed class Relationship<E extends DataModelMixin<E>, N> with EquatableMixin {
1919
// type will always be first in split
2020
final [type, ..._] = ownerKey.split('#');
2121

22-
final adapter = _internalAdapters![type]!;
22+
final adapter = _internalAdaptersMap![type]!;
2323
return adapter.findOneLocal(ownerKey) as DataModelMixin?;
2424
}
2525

2626
String get name => _name!;
2727
String? get inverseName => _inverseName;
2828

29-
Adapter<E> get _adapter => _internalAdapters![_internalType] as Adapter<E>;
29+
Adapter<E> get _adapter => _internalAdaptersMap![_internalType] as Adapter<E>;
3030

3131
Set<String>? _uninitializedKeys;
3232
String get _internalType => DataHelpers.internalTypeFor(E.toString());

lib/src/utils/framework.dart

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -269,12 +269,6 @@ class DataResponse {
269269
{this.body, required this.statusCode, this.headers = const {}});
270270
}
271271

272-
final adapterProviders =
273-
StateProvider<Map<String, Provider<Adapter<DataModelMixin>>>?>(
274-
(ref) => null);
275-
276-
Map<String, Adapter>? _internalAdapters;
277-
278272
R logTime<R>(String? name, R cb()) {
279273
if (name == null) return cb();
280274
final a1 = DateTime.now().millisecondsSinceEpoch;
@@ -296,14 +290,20 @@ Future<R> logTimeAsync<R>(String? name, Future<R> cb()) async {
296290
@protected
297291
mixin NothingMixin {}
298292

299-
final initializeAdapters = FutureProvider<bool>((ref) async {
300-
final arg = ref.read(adapterProviders)!;
301-
_internalAdapters = arg.map((key, value) => MapEntry(key, ref.read(value)));
293+
Map<String, Adapter>? _internalAdaptersMap;
294+
Map<String, Provider<Adapter<DataModelMixin>>>? _internalProvidersMap;
295+
296+
final initializeFlutterData =
297+
FutureProvider.family<bool, Map<String, Provider<Adapter<DataModelMixin>>>>(
298+
(ref, arg) async {
299+
_internalProvidersMap = arg;
300+
_internalAdaptersMap =
301+
arg.map((key, value) => MapEntry(key, ref.read(value)));
302302

303303
await ref.read(localStorageProvider).initialize();
304304

305305
// initialize and register
306-
for (final adapter in _internalAdapters!.values) {
306+
for (final adapter in _internalAdaptersMap!.values) {
307307
adapter.dispose();
308308
await adapter.initialize(ref: ref);
309309
}

lib/src/utils/offline_operations.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ final _offlineCallbackProvider =
136136

137137
final offlineRetryProvider = StreamProvider<void>((ref) async* {
138138
Set<OfflineOperation> _offlineOperations() {
139-
return _internalAdapters!.values
139+
return _internalAdaptersMap!.values
140140
.map((adapter) {
141141
// if the stream is called before initialization
142142
// (or after disposal) simply return an empty set

test/_support/setup.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,7 @@ Future<void> setUpFn() async {
6565
'${_kIsWeb ? 'node1s' : 'nodes'}': nodesAdapterProvider
6666
};
6767

68-
container.read(adapterProviders.notifier).state = adapterProvidersMap;
69-
await container.read(initializeAdapters.future);
68+
await container.read(initializeFlutterData(adapterProvidersMap).future);
7069

7170
container.read(dogsAdapterProvider).logLevel = 2;
7271

0 commit comments

Comments
 (0)