Upgrading provider 1 to 2
Breaking1.6.1 → 2.0.1+1Breaking2New2Fixed2
BreakingUpgrade verdict
2 breaking changes.
In plain terms
- Providers are now created with a builder by default; use the value named constructor to pass a value directly.
- StatefulProvider no longer exists as a separate class; use Provider instead.
Must act 2 items need code or config changes
What you must change
Breaking2
Normalizes provider constructors so the default constructor is a builder and a
value named constructor is offered.valueMerges
Provider and StatefulProvider into a single class.ProviderStatefulProviderAPI changes
Generated by DepDelta from published Dart source. Not mixed with prose notes.
- removed:
class HookProvider<T> extends HookWidget implements ProviderBase - removed:
class ProviderBase: abstract implements Widget - removed:
class StatefulProvider<T> extends StatefulWidget implements ProviderBase - removed:
ctor ChangeNotifierProvider.stateful({ Key key, @required ValueBuilder<T> builder, Disposer<T> disposer, this.child, }) - removed:
ctor HookProvider({Key key, this.hook, this.child, this.updateShouldNotify}) - removed:
ctor StatefulProvider({ Key key, @required this.valueBuilder, this.child, this.onDispose, this.updateShouldNotify, }) - removed:
field ChangeNotifierProvider.child: final Widget - removed:
field HookProvider.child: final Widget - removed:
field Provider.value: final T - removed:
field StatefulProvider.child: final Widget - removed:
field StreamProvider.stream: final Stream<T> - removed:
field ValueListenableProvider.valueListenable: final ValueListenable<T> - removed:
method ChangeNotifierProvider.build(BuildContext context): Widget - removed:
method HookProvider.Function(): T - removed:
method HookProvider.Function(T, T): bool - removed:
method HookProvider.build(BuildContext context): Widget - removed:
method HookProvider.cloneWithChild(Widget child): HookProvider<T> - removed:
method Provider.Function(T previous, T current): bool - removed:
method Provider.debugFillProperties(DiagnosticPropertiesBuilder properties): void - removed:
method Provider.updateShouldNotify(Provider<T> oldWidget): bool - removed:
method ProviderBase.cloneWithChild(Widget child): ProviderBase - removed:
method StatefulProvider.Function(BuildContext context): T - removed:
method StatefulProvider.Function(BuildContext context, T value): void - removed:
method StatefulProvider.Function(T previous, T current): bool - removed:
method StatefulProvider.cloneWithChild(Widget child): StatefulProvider<T> - removed:
method StatefulProvider.createState(): _StatefulProviderState<T> - removed:
static method StreamProvider.of<T>(BuildContext context): AsyncSnapshot<T> - changed:
class ChangeNotifierProvider<T extends ChangeNotifier> extends HookWidget implements ProviderBase → class ChangeNotifierProvider<T extends ChangeNotifier> extends ListenableProvider<T> implements SingleChildCloneableWidget - changed:
class MultiProvider extends StatelessWidget implements ProviderBase → class MultiProvider extends StatelessWidget implements SingleChildCloneableWidget - changed:
class Provider<T> extends InheritedWidget implements ProviderBase → class Provider<T> extends AdaptiveBuilderWidget<T, T> implements SingleChildCloneableWidget - changed:
class StreamProvider<T> extends HookProvider<AsyncSnapshot<T>> → class StreamProvider<T> extends AdaptiveBuilderWidget<Stream<T>, StreamController<T>> implements SingleChildCloneableWidget - changed:
class ValueListenableProvider<T> extends HookProvider<T> → class ValueListenableProvider<T> extends AdaptiveBuilderWidget<ValueListenable<T>, ValueNotifier<T>> implements SingleChildCloneableWidget - changed:
ctor ChangeNotifierProvider({Key key, @required T notifier, this.child}) → ctor ChangeNotifierProvider({ Key key, @required ValueBuilder<T> builder, Widget child, }) - changed:
ctor Consumer({Key key, @required this.builder}) → ctor Consumer({ Key key, @required this.builder, this.child, }) - changed:
ctor Consumer2({Key key, @required this.builder}) → ctor Consumer2({ Key key, @required this.builder, this.child, }) - changed:
ctor Consumer3({Key key, @required this.builder}) → ctor Consumer3({ Key key, @required this.builder, this.child, }) - changed:
ctor Consumer4({Key key, @required this.builder}) → ctor Consumer4({ Key key, @required this.builder, this.child, }) - changed:
ctor Consumer5({Key key, @required this.builder}) → ctor Consumer5({ Key key, @required this.builder, this.child, }) - changed:
ctor Consumer6({Key key, @required this.builder}) → ctor Consumer6({ Key key, @required this.builder, this.child, }) - changed:
ctor MultiProvider({Key key, @required this.providers, this.child}) → ctor MultiProvider({ Key key, @required this.providers, this.child, }) - changed:
ctor Provider({ Key key, @required this.value, Widget child, UpdateShouldNotify<T> updateShouldNotify, }) → ctor Provider({ Key key, @required ValueBuilder<T> builder, this.dispose, this.child, }) - changed:
ctor StreamProvider({ @required this.stream, Key key, T initialData, Widget child, }) → ctor StreamProvider({ Key key, @required ValueBuilder<StreamController<T>> builder, this.initialData, this.catchError, this.updateShouldNotify, this.child, }) - changed:
ctor ValueListenableProvider({ @required this.valueListenable, Key key, Widget child, }) → ctor ValueListenableProvider({ Key key, @required ValueBuilder<ValueNotifier<T>> builder, this.updateShouldNotify, this.child, }) - changed:
field MultiProvider.providers: final List<ProviderBase> → field MultiProvider.providers: final List<SingleChildCloneableWidget> - changed:
method Consumer.Function(BuildContext context, T value): Widget → method Consumer.Function(BuildContext context, T value, Widget child): Widget - changed:
method Consumer2.Function(BuildContext context, A value, B value2): Widget → method Consumer2.Function(BuildContext context, A value, B value2, Widget chi): Widget - changed:
method Consumer3.Function(BuildContext context, A value, B value2, C value3): Widget → method Consumer3.Function( BuildContext context, A value, B value2, C value3, Widget child): Widget - changed:
method Consumer4.Function( BuildContext context, A value, B value2, C value3, D value4): Widget → method Consumer4.Function(BuildContext context, A value, B value2, C value3, D value4, Widget child): Widget - changed:
method Consumer5.Function( BuildContext context, A value, B value2, C value3, D value4, E value5): Widget → method Consumer5.Function(BuildContext context, A value, B value2, C value3, D value4, E value5, Widget child): Widget - changed:
method Consumer6.Function(BuildContext context, A value, B value2, C value3, D value4, E value5, F value6): Widget → method Consumer6.Function(BuildContext context, A value, B value2, C value3, D value4, E value5, F value6, Widget child): Widget - added:
class ListenableProvider<T extends Listenable> extends AdaptiveBuilderWidget<T, T> implements SingleChildCloneableWidget - added:
class SingleChildCloneableWidget: abstract implements Widget - added:
ctor ChangeNotifierProvider.value({ Key key, @required T notifier, Widget child, }) - added:
ctor ListenableProvider({ Key key, @required ValueBuilder<T> builder, this.dispose, this.child, }) - added:
ctor ListenableProvider.value({ Key key, @required T listenable, this.child, }) - added:
ctor Provider.value({ Key key, @required T value, this.updateShouldNotify, this.child, }) - added:
ctor StreamProvider.value({ Key key, @required Stream<T> stream, this.initialData, this.catchError, this.updateShouldNotify, this.child, }) - added:
ctor ValueListenableProvider.value({ Key key, @required ValueListenable<T> valueListenable, this.updateShouldNotify, this.child, }) - added:
field Consumer.child: final Widget - added:
field Consumer2.child: final Widget - added:
field Consumer3.child: final Widget - added:
field Consumer4.child: final Widget - added:
field Consumer5.child: final Widget - added:
field Consumer6.child: final Widget - added:
field ListenableProvider.child: final Widget - added:
field ListenableProvider.dispose: final Disposer<T> - added:
field Provider.child: final Widget - added:
field Provider.dispose: final Disposer<T> - added:
field Provider.updateShouldNotify: final UpdateShouldNotify<T> - added:
field StreamProvider.catchError: final ErrorBuilder<T> - added:
field StreamProvider.child: final Widget - added:
field StreamProvider.initialData: final T - added:
field StreamProvider.updateShouldNotify: final UpdateShouldNotify<T> - added:
field ValueListenableProvider.child: final Widget - added:
field ValueListenableProvider.updateShouldNotify: final UpdateShouldNotify<T> - added:
method ListenableProvider.cloneWithChild(Widget child): ListenableProvider<T> - added:
method ListenableProvider.createState(): _ListenableProviderState<T> - added:
method Provider.createState(): _ProviderState<T> - added:
method SingleChildCloneableWidget.cloneWithChild(Widget child): SingleChildCloneableWidget - added:
method StreamProvider.cloneWithChild(Widget child): StreamProvider<T> - added:
method StreamProvider.createState(): _StreamProviderState<T> - added:
method ValueListenableProvider.cloneWithChild(Widget child): ValueListenableProvider<T> - added:
method ValueListenableProvider.createState(): _ValueListenableProviderState<T> - added:
typedef Disposer<T> = void Function(BuildContext context, T value) - added:
typedef ErrorBuilder<T> = T Function(BuildContext context, Object error) - added:
typedef UpdateShouldNotify<T> = bool Function(T previous, T current) - added:
typedef ValueBuilder<T> = T Function(BuildContext context)