-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Way to remove a callback using Watcher.attach
+ Cubit
#10
Comments
Yes, the important thing here is that I wouldn't want to force users to use a conditional |
There are a couple more options that I came up with. The most important thing in them is to simplify the constant use of Input data: final class AppCardoteka = Cardoteka with WatcherImpl;
final cardoteka = AppCardoteka(
config: const CardotekaConfig(
name: 'app_settings',
cards: AppSettings.values,
),
);
enum AppSettings<T> implements Card<T> {
themeMode(DataType.string, ThemeMode.system),
;
const AppSettings(this.type, this.defaultValue);
@override
final DataType type;
@override
final T defaultValue;
@override
String get key => name;
} 1. mixin DetacherCubitV1<T> on Cubit<T> implements Detachability {
@override
@mustCallSuper
Future<void> close() async {
detach();
return super.close();
}
}
class CubitThemeModeV1 extends Cubit<ThemeMode>
with DetacherCubitV1, Detachability {
CubitThemeModeV1() : super(AppSettings.themeMode.defaultValue) {
cardoteka.attach(
AppSettings.themeMode,
(ThemeMode value) => emit(value),
fireImmediately: true,
detacher: onDetach,
);
}
void setThemeMode(ThemeMode value) =>
cardoteka.set(AppSettings.themeMode, value);
} The user writes the I like this method because:
There is also a short version for this method, which unfortunately is not available yet: mixin DetacherCubit<T> on Cubit<T> extends Detachability {}
// and then...
class MyCubit extends Cubit<ThemeMode> with DetacherCubit {} Related to: 2. mixin DetacherCubitV2<T> on Cubit<T> implements Detachability {
final _detachability = Detachability();
@override
void onDetach(void Function() cb) => _detachability.onDetach(cb);
@override
void detach() => _detachability.detach();
@override
@mustCallSuper
Future<void> close() async {
detach();
return super.close();
}
}
class CubitThemeMode2 extends Cubit<ThemeMode> with DetacherCubitV2 {
// ... exactly like in the previous example
} Cons:
Props:
For now, I would prefer to implement the first option, as the most optimal. On the other hand, the user will have to copy the code anyway, so why not copy |
- upd: minimum supported SDK version to Flutter 3.24.0/Dart 3.5.0 - 🛡️fix: [Implement security advisories CWE-502](#29) - new: now you can directly create an instance of the `Cardoteka` ([#15](#15)) - new: `CardotekaAsync` for asynchronous data retrieval (works without cache) ([#24](#24)) - 🧨upd: all declarations of own classes from `Cardoteka` and `CardotekaAsync` must now necessarily be declared as `final` or `base` or `sealed` - 🧨upd: `AccessToSP` has been deleted. Use `import package:cardoteka/access_to_sp.dart`. - 🧨upd: changes in `Watcher.attach`: `onRemove` parameter is now required and callback is now a named `onChange` parameter ([#14](#14) и [#37](#37)) - add: `Detachability` and `DetacherChangeNotifier`for easy dispose of linked resources in classes with business logic ([#10](#10) и [#9](#9)) - add: `CRUD.readAsync` method for use with `CardotekaAsync` - add: `notifyAll` method for `Watcher` [17](#17) - upd: `Converters.colorAsInt` is temporarily deprecated. See more details in [#31](#31) - add: `CardotekaCore.migrate` method for data migration ([#33](#33)) - upd: all examples in `example` folder have been updated - upd: some internal methods have been hidden from the IDE prompts to make package easier to use - doc: "Notifier (riverpod)", "Analogy in `SharedPreferencesWithCache` and `SharedPreferencesAsync`", "Migration", "Sync or Async storage", "Detachability" sections were added to readme You can see all closed issues in [Milestone v2.0.0](https://github.com/PackRuble/cardoteka/milestone/2?closed=1). Also, read `readme.md` section on data migration [Cardoteka from v1 to v2](https://github.com/PackRuble/cardoteka?tab=readme-ov-file#cardoteka-from-v1-to-v2).
- upd: minimum supported SDK version to Flutter 3.24.0/Dart 3.5.0 - 🛡️fix: [Implement security advisories CWE-502](#29) - new: now you can directly create an instance of the `Cardoteka` ([#15](#15)) - new: `CardotekaAsync` for asynchronous data retrieval (works without cache) ([#24](#24)) - 🧨upd: all declarations of own classes from `Cardoteka` and `CardotekaAsync` must now necessarily be declared as `final` or `base` or `sealed` - 🧨upd: `AccessToSP` has been deleted. Use `import package:cardoteka/access_to_sp.dart`. - 🧨upd: changes in `Watcher.attach`: `onRemove` parameter is now required and callback is now a named `onChange` parameter ([#14](#14) и [#37](#37)) - add: `Detachability` and `DetacherChangeNotifier`for easy dispose of linked resources in classes with business logic ([#10](#10) и [#9](#9)) - add: `CRUD.readAsync` method for use with `CardotekaAsync` - add: `notifyAll` method for `Watcher` [#17](#17) - upd: `Converters.colorAsInt` is temporarily deprecated. See more details in [#31](#31) - add: `CardotekaCore.migrate` method for data migration ([#33](#33)) - upd: all examples in `example` folder have been updated - upd: some internal methods have been hidden from the IDE prompts to make package easier to use - doc: "Notifier (riverpod)", "Analogy in `SharedPreferencesWithCache` and `SharedPreferencesAsync`", "Migration", "Sync or Async storage", "Detachability" sections were added to readme You can see all closed issues in [Milestone v2.0.0](https://github.com/PackRuble/cardoteka/milestone/2?closed=1). Also, read `readme.md` section on data migration [Cardoteka from v1 to v2](https://github.com/PackRuble/cardoteka?tab=readme-ov-file#cardoteka-from-v1-to-v2).
This is generally the same story as in issue #9 with
ChangeNotifier
. However, a slightly more general syntax covering both cases at once appeared in my head:Which will make it possible to do things like this:
We can't seem to do anything technically with those "parent" classes that we need to
extends
from. This also applies toCubit
andValueNotifier
and the like. And I don't like the fact that it's very easy to forget to override theclose
method when adding the “Detachability” mixin.The text was updated successfully, but these errors were encountered: