Skip to content

Upgrading provider 1 to 2

Breaking1.6.1 → 2.0.1+1Breaking2New2Fixed2

BreakingUpgrade verdict

2 breaking changes.

  • 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.
2 items need code or config changes
Breaking2
Normalizes provider constructors so the default constructor is a builder and a value named constructor is offered.
value
Merges Provider and StatefulProvider into a single class.
ProviderStatefulProvider

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)