Skip to content

Instantly share code, notes, and snippets.

@danReynolds
Created June 20, 2024 17:01
Show Gist options
  • Save danReynolds/a69fd2ff303b601468ff3899fe80a149 to your computer and use it in GitHub Desktop.
Save danReynolds/a69fd2ff303b601468ff3899fe80a149 to your computer and use it in GitHub Desktop.
View controller
class ViewController<T> extends ComputableSubscriber<T> {
ViewController({
super.initialValue,
super.broadcast,
});
T get model {
return get();
}
}
class ViewControllerBuilder<T extends ViewController<S>, S>
extends StatefulWidget {
final T Function() factory;
final Widget Function(
BuildContext context,
S viewModel,
T controller,
) builder;
const ViewControllerBuilder({
required this.factory,
required this.builder,
});
@override
ViewControllerBuilderState<T, S> createState() =>
ViewControllerBuilderState<T, S>();
}
class ViewControllerBuilderState<T extends ViewController<S>, S>
extends State<ViewControllerBuilder<T, S>> {
late final T controller;
@override
initState() {
super.initState();
controller = widget.factory();
}
@override
dispose() {
super.dispose();
controller.dispose();
}
@override
build(context) {
return ComputableBuilder(
computable: controller,
builder: (context, viewModel) {
return widget.builder(context, viewModel, controller);
},
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment