Skip to content

Commit

Permalink
fix: Add the function of load.
Browse files Browse the repository at this point in the history
  • Loading branch information
mathrunet committed Jan 19, 2023
1 parent 0d274b4 commit 4058e01
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 20 deletions.
2 changes: 2 additions & 0 deletions packages/katana_prefs/lib/katana_prefs.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
/// [YouTube]: https://www.youtube.com/c/mathrunetchannel
library katana_prefs;

export 'dart:async' show Completer;

export 'package:katana/katana.dart';
export 'package:katana_prefs_annotation/katana_prefs_annotation.dart';
export 'package:shared_preferences/shared_preferences.dart'
Expand Down
86 changes: 67 additions & 19 deletions packages/katana_prefs_builder/lib/common/base_class.dart
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ List<Spec> baseClass(
Field(
(f) => f
..name = "_ref"
..type = Reference("_\$${model.name}")
..type = Reference("_${model.name}")
..modifier = FieldModifier.final$,
),
Field(
Expand All @@ -63,7 +63,7 @@ List<Spec> baseClass(
..name = "get"
..returns = const Reference("T")
..body = const Code(
"final o = _ref._prefs?.get(_key);if (o is! T) { return _def; } return o;",
"assert(_ref._prefs != null, \"SharedPreference has not finished loading. Please execute [load()] to complete loading.\", ); final o = _ref._prefs?.get(_key);if (o is! T) { return _def; } return o;",
),
),
Method(
Expand Down Expand Up @@ -101,14 +101,6 @@ List<Spec> baseClass(
const Reference("ChangeNotifier"),
])
..methods.addAll([
Method(
(m) => m
..name = "_prefs"
..returns = const Reference("SharedPreferences?")
..type = MethodType.getter
..lambda = true
..body = const Code("throw UnimplementedError()"),
),
...model.parameters.map((param) {
return Method(
(m) => m
Expand Down Expand Up @@ -185,6 +177,21 @@ List<Spec> baseClass(
"return \"\$runtimeType(${model.parameters.map((e) => "${e.name}: \$${e.name}").join(", ")})\";",
),
),
Method(
(m) => m
..name = "load"
..returns = const Reference("Future<void>")
..lambda = true
..body = const Code("throw UnimplementedError()"),
),
Method(
(m) => m
..name = "loading"
..type = MethodType.getter
..returns = const Reference("Future<void>?")
..lambda = true
..body = const Code("throw UnimplementedError()"),
),
]),
),
if (model.existUnderbarConstructor) ...[
Expand Down Expand Up @@ -218,13 +225,29 @@ List<Spec> baseClass(
return Code("_${param.name} = ${param.name}");
}),
const Code("super._()"),
])
..body = const Code(
"SharedPreferences.getInstance().then((value) { _prefs = value; notifyListeners(); });",
),
]),
),
])
..methods.addAll([
Method(
(m) => m
..name = "load"
..returns = const Reference("Future<void>")
..modifier = MethodModifier.async
..annotations.addAll([const Reference("override")])
..body = const Code(
"try { _completer = Completer(); _prefs = await SharedPreferences.getInstance(); notifyListeners(); _completer?.complete(); _completer = null; } catch (e) { _completer?.completeError(e); _completer = null; } finally { _completer?.complete(); }",
),
),
Method(
(m) => m
..name = "loading"
..type = MethodType.getter
..returns = const Reference("Future<void>?")
..annotations.addAll([const Reference("override")])
..lambda = true
..body = const Code("_completer?.future"),
),
...model.parameters.map((param) {
return Method(
(m) => m
Expand All @@ -248,6 +271,11 @@ List<Spec> baseClass(
..annotations.addAll([const Reference("override")])
..type = const Reference("SharedPreferences?"),
),
Field(
(f) => f
..name = "_completer"
..type = const Reference("Completer<void>?"),
),
...model.parameters.map((param) {
return Field(
(f) => f
Expand Down Expand Up @@ -289,13 +317,29 @@ List<Spec> baseClass(
...model.parameters.map((param) {
return Code("_${param.name} = ${param.name}");
}),
])
..body = const Code(
"SharedPreferences.getInstance().then((value) { _prefs = value; notifyListeners(); });",
),
]),
),
])
..methods.addAll([
Method(
(m) => m
..name = "load"
..returns = const Reference("Future<void>")
..modifier = MethodModifier.async
..annotations.addAll([const Reference("override")])
..body = const Code(
"try { _completer = Completer(); _prefs = await SharedPreferences.getInstance(); notifyListeners(); _completer?.complete(); _completer = null; } catch (e) { _completer?.completeError(e); _completer = null; } finally { _completer?.complete(); }",
),
),
Method(
(m) => m
..name = "loading"
..type = MethodType.getter
..returns = const Reference("Future<void>?")
..annotations.addAll([const Reference("override")])
..lambda = true
..body = const Code("_completer?.future"),
),
...model.parameters.map((param) {
return Method(
(m) => m
Expand All @@ -316,9 +360,13 @@ List<Spec> baseClass(
Field(
(f) => f
..name = "_prefs"
..annotations.addAll([const Reference("override")])
..type = const Reference("SharedPreferences?"),
),
Field(
(f) => f
..name = "_completer"
..type = const Reference("Completer<void>?"),
),
...model.parameters.map((param) {
return Field(
(f) => f
Expand Down
2 changes: 1 addition & 1 deletion packages/katana_prefs_builder/lib/src/builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ Builder katanaPrefsBuilderFactory(BuilderOptions options) {
],
".prefs.dart",
header:
"// GENERATED CODE - DO NOT MODIFY BY HAND\r\n\r\n// ignore_for_file: unused_field, unused_element, require_trailing_commas, prefer_const_constructors, unnecessary_overrides, prefer_const_literals_to_create_immutables, unnecessary_null_in_if_null_operators, library_prefixes, directives_ordering, no_leading_underscores_for_local_identifiers, unnecessary_brace_in_string_interps, unnecessary_type_check",
"// GENERATED CODE - DO NOT MODIFY BY HAND\r\n\r\n// ignore_for_file: unused_field, unused_element, require_trailing_commas, prefer_const_constructors, unnecessary_overrides, prefer_const_literals_to_create_immutables, unnecessary_null_in_if_null_operators, library_prefixes, directives_ordering, no_leading_underscores_for_local_identifiers, unnecessary_brace_in_string_interps, unnecessary_type_check, invalid_use_of_visible_for_testing_member, invalid_use_of_protected_member",
);
}

0 comments on commit 4058e01

Please sign in to comment.