fluffychat/lib/widgets/view_model_builder.dart
swherdman c581377999
feat: add autoSsoRedirect config option for automatic SSO login on web
When enabled via config.json, unauthenticated web users are
automatically redirected to the homeserver's SSO provider on page load,
bypassing the homeserver picker UI. Uses full-page redirect with
localStorage token recovery to avoid browser popup blocking.

Requires defaultHomeserver to also be set in config.json.
2026-02-20 17:51:02 +11:00

51 lines
1.2 KiB
Dart

import 'package:flutter/material.dart';
class ViewModelBuilder<T extends ValueNotifier> extends StatefulWidget {
final T Function() create;
final Widget Function(BuildContext context, T viewModel, Widget? child)
builder;
final Widget? child;
final void Function(BuildContext context, T viewModel)? onCreated;
const ViewModelBuilder({
super.key,
required this.create,
required this.builder,
this.child,
this.onCreated,
});
@override
State<ViewModelBuilder<T>> createState() => _ViewModelBuilderState<T>();
}
class _ViewModelBuilderState<T extends ValueNotifier>
extends State<ViewModelBuilder<T>> {
late final T _viewModel;
@override
void initState() {
_viewModel = widget.create();
if (widget.onCreated != null) {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (!mounted) return;
widget.onCreated!(context, _viewModel);
});
}
super.initState();
}
@override
void dispose() {
_viewModel.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return ValueListenableBuilder(
valueListenable: _viewModel,
builder: (context, value, child) =>
widget.builder.call(context, _viewModel, child),
);
}
}