buildChildLifecycle method

  1. @protected
Widget buildChildLifecycle(
  1. BuildContext context,
  2. Widget? child, {
  3. PairViewModelWidgetBuilder<PVM, VM>? builder,
})

Implementation

@protected
Widget buildChildLifecycle(
  BuildContext context,
  Widget? child, {
  PairViewModelWidgetBuilder<PVM, VM>? builder,
}) {
  final _builder = builder ??
      (this.asSafeType<PairViewModelProviderBuilder<PVM, VM>>())?.buildChild;

  return ViewModelBinding<PVM, Tuple2<PVM, VM>>(
    selector: (context, pvm) => Tuple2(pvm, context.viewModel<VM>()),
    shouldRebuild: (previous, next) {
      return !const DeepCollectionEquality()
          .equals(previous.item2, next.item2);
    },
    builder: (context, value, isBinding, child) => LifecycleBuilder<VM>(
      create: (context) => context.viewModel<VM>(),
      initState: (_) => initViewModel(context, value.item1, value.item2),
      initBuild: (_, __) => bindViewModel(context, value.item1, value.item2),
      initFrame: (_, __) => initFrame(context, value.item1, value.item2),
      dispose: (_, __) => disposeViewModel(context, value.item1, value.item2),
      didChangeDependencies: (_, oldValue) {
        if (!const DeepCollectionEquality().equals(oldValue, value.item2)) {
          changeViewModel(context, value.item1, value.item2, oldValue);
        }
      },
      child: child,
      builder: _builder != null
          ? (_, setStatus, __, child) {
              return _builder(context, value.item1, value.item2, child);
            }
          : null,
    ),
  );
}