import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'provider.dart'; // ignore: public_member_api_docs typedef ProviderBuilder = Widget Function( BuildContext context, R value, Widget child, ); // ignore: public_member_api_docs typedef ProxyProviderBuilder = R Function( BuildContext context, T value, R? previous, ); // ignore: public_member_api_docs typedef ProxyProviderBuilder2 = R Function( BuildContext context, T value, T2 value2, R? previous, ); // ignore: public_member_api_docs typedef ProxyProviderBuilder3 = R Function( BuildContext context, T value, T2 value2, T3 value3, R? previous, ); // ignore: public_member_api_docs typedef ProxyProviderBuilder4 = R Function( BuildContext context, T value, T2 value2, T3 value3, T4 value4, R? previous, ); // ignore: public_member_api_docs typedef ProxyProviderBuilder5 = R Function( BuildContext context, T value, T2 value2, T3 value3, T4 value4, T5 value5, R? previous, ); // ignore: public_member_api_docs typedef ProxyProviderBuilder6 = R Function( BuildContext context, T value, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, R? previous, ); /// {@macro provider.proxyprovider} class ProxyProvider0 extends InheritedProvider { /// Initializes [key] for subclasses. ProxyProvider0({ Key? key, Create? create, required R Function(BuildContext context, R? value) update, UpdateShouldNotify? updateShouldNotify, Dispose? dispose, bool? lazy, TransitionBuilder? builder, Widget? child, }) : super( key: key, lazy: lazy, builder: builder, create: create, update: update, dispose: dispose, updateShouldNotify: updateShouldNotify, debugCheckInvalidValueType: kReleaseMode ? null : (R value) => Provider.debugCheckInvalidValueType?.call(value), child: child, ); } /// {@template provider.proxyprovider} /// A provider that builds a value based on other providers. /// /// The exposed value is built through either `create` or `update`, then passed /// to [InheritedProvider]. /// /// As opposed to `create`, `update` may be called more than once. /// It will be called once the first time the value is obtained, then once /// whenever [ProxyProvider] rebuilds or when one of the providers it depends on /// updates. /// /// [ProxyProvider] comes in different variants such as [ProxyProvider2]. This /// is syntax sugar on the top of [ProxyProvider0]. /// /// As such, `ProxyProvider` is equal to: /// ```dart /// ProxyProvider0( /// update: (context, result) { /// final a = Provider.of(context); /// return update(context, a, result); /// } /// ); /// ``` /// /// Whereas `ProxyProvider2` is equal to: /// ```dart /// ProxyProvider0( /// update: (context, result) { /// final a = Provider.of(context); /// final b = Provider.of(context); /// return update(context, a, b, result); /// } /// ); /// ``` /// /// This last parameter of `update` is the last value returned by either /// `create` or `update`. /// It is `null` by default. /// /// `update` must not be `null`. /// /// See also: /// /// * [Provider], which matches the behavior of [ProxyProvider] but has only /// a `create` callback. /// {@endtemplate} class ProxyProvider extends ProxyProvider0 { /// Initializes [key] for subclasses. ProxyProvider({ Key? key, Create? create, required ProxyProviderBuilder update, UpdateShouldNotify? updateShouldNotify, Dispose? dispose, bool? lazy, TransitionBuilder? builder, Widget? child, }) : super( key: key, lazy: lazy, builder: builder, create: create, update: (context, value) => update( context, Provider.of(context), value, ), updateShouldNotify: updateShouldNotify, dispose: dispose, child: child, ); } /// {@macro provider.proxyprovider} class ProxyProvider2 extends ProxyProvider0 { /// Initializes [key] for subclasses. ProxyProvider2({ Key? key, Create? create, required ProxyProviderBuilder2 update, UpdateShouldNotify? updateShouldNotify, Dispose? dispose, bool? lazy, TransitionBuilder? builder, Widget? child, }) : super( key: key, lazy: lazy, builder: builder, create: create, update: (context, value) => update( context, Provider.of(context), Provider.of(context), value, ), updateShouldNotify: updateShouldNotify, dispose: dispose, child: child, ); } /// {@macro provider.proxyprovider} class ProxyProvider3 extends ProxyProvider0 { /// Initializes [key] for subclasses. ProxyProvider3({ Key? key, Create? create, required ProxyProviderBuilder3 update, UpdateShouldNotify? updateShouldNotify, Dispose? dispose, bool? lazy, TransitionBuilder? builder, Widget? child, }) : super( key: key, lazy: lazy, builder: builder, create: create, update: (context, value) => update( context, Provider.of(context), Provider.of(context), Provider.of(context), value, ), updateShouldNotify: updateShouldNotify, dispose: dispose, child: child, ); } /// {@macro provider.proxyprovider} class ProxyProvider4 extends ProxyProvider0 { /// Initializes [key] for subclasses. ProxyProvider4({ Key? key, Create? create, required ProxyProviderBuilder4 update, UpdateShouldNotify? updateShouldNotify, Dispose? dispose, bool? lazy, TransitionBuilder? builder, Widget? child, }) : super( key: key, lazy: lazy, builder: builder, create: create, update: (context, value) => update( context, Provider.of(context), Provider.of(context), Provider.of(context), Provider.of(context), value, ), updateShouldNotify: updateShouldNotify, dispose: dispose, child: child, ); } /// {@macro provider.proxyprovider} class ProxyProvider5 extends ProxyProvider0 { /// Initializes [key] for subclasses. ProxyProvider5({ Key? key, Create? create, required ProxyProviderBuilder5 update, UpdateShouldNotify? updateShouldNotify, Dispose? dispose, bool? lazy, TransitionBuilder? builder, Widget? child, }) : super( key: key, lazy: lazy, builder: builder, create: create, update: (context, value) => update( context, Provider.of(context), Provider.of(context), Provider.of(context), Provider.of(context), Provider.of(context), value, ), updateShouldNotify: updateShouldNotify, dispose: dispose, child: child, ); } /// {@macro provider.proxyprovider} class ProxyProvider6 extends ProxyProvider0 { /// Initializes [key] for subclasses. ProxyProvider6({ Key? key, Create? create, required ProxyProviderBuilder6 update, UpdateShouldNotify? updateShouldNotify, Dispose? dispose, bool? lazy, TransitionBuilder? builder, Widget? child, }) : super( key: key, lazy: lazy, builder: builder, create: create, update: (context, value) => update( context, Provider.of(context), Provider.of(context), Provider.of(context), Provider.of(context), Provider.of(context), Provider.of(context), value, ), updateShouldNotify: updateShouldNotify, dispose: dispose, child: child, ); }