Skip to content

Instantly share code, notes, and snippets.

@dnys1
Created March 15, 2023 23:54
Show Gist options
  • Save dnys1/9720b6abe565ad345e1c4d5a174c2315 to your computer and use it in GitHub Desktop.
Save dnys1/9720b6abe565ad345e1c4d5a174c2315 to your computer and use it in GitHub Desktop.
hopeful-zephyr-4541
class Options<PluginOptions extends Object?> {
const Options({
this.pluginOptions,
});
final PluginOptions? pluginOptions;
}
class AWSPluginOptions {}
class Category<PluginOptions extends Object?> {
Category(this.plugin);
final Plugin<PluginOptions> plugin;
void doSomething(Options<PluginOptions> options) {
plugin.doSomething(options);
}
}
abstract class Plugin<PluginOptions extends Object?> {
void doSomething(Options<PluginOptions> options);
}
class AWSPlugin extends Plugin<AWSPluginOptions> {
@override
void doSomething(Options<AWSPluginOptions> options) {
print(options.pluginOptions.runtimeType);
}
}
void main() {
final Plugin awsPlugin = AWSPlugin(); // plugin type gets erased
final category = Category(awsPlugin);
category.doSomething(Options(pluginOptions: AWSPluginOptions()));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment