![Tests failed](https://img.shields.io/badge/tests-268%20passed%2C%201%20failed-critical) ## ๐Ÿ”ดย fixtures/external/flutter/provider-test-results.json **269** tests were completed in **0ms** with **268** passed, **1** failed and **0** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |๐ŸŸข [test/builder_test.dart](#r0s0)|24|||402ms| |๐ŸŸข [test/change_notifier_provider_test.dart](#r0s1)|10|||306ms| |๐ŸŸข [test/consumer_test.dart](#r0s2)|18|||340ms| |๐ŸŸข [test/context_test.dart](#r0s3)|31|||698ms| |๐ŸŸข [test/future_provider_test.dart](#r0s4)|10|||305ms| |๐ŸŸข [test/inherited_provider_test.dart](#r0s5)|81|||1s| |๐ŸŸข [test/listenable_provider_test.dart](#r0s6)|16|||353ms| |๐ŸŸข [test/listenable_proxy_provider_test.dart](#r0s7)|12|||373ms| |๐ŸŸข [test/multi_provider_test.dart](#r0s8)|3|||198ms| |๐ŸŸข [test/provider_test.dart](#r0s9)|11|||306ms| |๐ŸŸข [test/proxy_provider_test.dart](#r0s10)|16|||438ms| |๐ŸŸข [test/reassemble_test.dart](#r0s11)|3|||221ms| |๐ŸŸข [test/selector_test.dart](#r0s12)|17|||364ms| |๐ŸŸข [test/stateful_provider_test.dart](#r0s13)|4|||254ms| |๐ŸŸข [test/stream_provider_test.dart](#r0s14)|8|||282ms| |๐Ÿ”ด [test/value_listenable_provider_test.dart](#r0s15)|4|1||327ms| ### ๐ŸŸขย test/builder_test.dart ``` ChangeNotifierProvider ๐ŸŸข default ๐ŸŸข .value ListenableProvider ๐ŸŸข default ๐ŸŸข .value Provider ๐ŸŸข default ๐ŸŸข .value ProxyProvider ๐ŸŸข 0 ๐ŸŸข 1 ๐ŸŸข 2 ๐ŸŸข 3 ๐ŸŸข 4 ๐ŸŸข 5 ๐ŸŸข 6 MultiProvider ๐ŸŸข with 1 ChangeNotifierProvider default ๐ŸŸข with 2 ChangeNotifierProvider default ๐ŸŸข with ListenableProvider default ๐ŸŸข with Provider default ๐ŸŸข with ProxyProvider0 ๐ŸŸข with ProxyProvider1 ๐ŸŸข with ProxyProvider2 ๐ŸŸข with ProxyProvider3 ๐ŸŸข with ProxyProvider4 ๐ŸŸข with ProxyProvider5 ๐ŸŸข with ProxyProvider6 ``` ### ๐ŸŸขย test/change_notifier_provider_test.dart ``` ๐ŸŸข Use builder property, not child ChangeNotifierProvider ๐ŸŸข value ๐ŸŸข builder ๐ŸŸข builder1 ๐ŸŸข builder2 ๐ŸŸข builder3 ๐ŸŸข builder4 ๐ŸŸข builder5 ๐ŸŸข builder6 ๐ŸŸข builder0 ``` ### ๐ŸŸขย test/consumer_test.dart ``` consumer ๐ŸŸข obtains value from Provider ๐ŸŸข crashed with no builder ๐ŸŸข can be used inside MultiProvider consumer2 ๐ŸŸข obtains value from Provider ๐ŸŸข crashed with no builder ๐ŸŸข can be used inside MultiProvider consumer3 ๐ŸŸข obtains value from Provider ๐ŸŸข crashed with no builder ๐ŸŸข can be used inside MultiProvider consumer4 ๐ŸŸข obtains value from Provider ๐ŸŸข crashed with no builder ๐ŸŸข can be used inside MultiProvider consumer5 ๐ŸŸข obtains value from Provider ๐ŸŸข crashed with no builder ๐ŸŸข can be used inside MultiProvider consumer6 ๐ŸŸข obtains value from Provider ๐ŸŸข crashed with no builder ๐ŸŸข can be used inside MultiProvider ``` ### ๐ŸŸขย test/context_test.dart ``` ๐ŸŸข watch in layoutbuilder ๐ŸŸข select in layoutbuilder ๐ŸŸข cannot select in listView ๐ŸŸข watch in listView ๐ŸŸข watch in gridView ๐ŸŸข clears select dependencies for all dependents BuildContext ๐ŸŸข internal selected value is updated ๐ŸŸข create can use read without being lazy ๐ŸŸข watch can be used inside InheritedProvider.update ๐ŸŸข select doesn't fail if it loads a provider that depends on other providers ๐ŸŸข don't call old selectors if the child rebuilds individually ๐ŸŸข selects throws inside click handlers ๐ŸŸข select throws if try to read dynamic ๐ŸŸข select throws ProviderNotFoundException ๐ŸŸข select throws if watch called inside the callback from build ๐ŸŸข select throws if read called inside the callback from build ๐ŸŸข select throws if select called inside the callback from build ๐ŸŸข select throws if read called inside the callback on dependency change ๐ŸŸข select throws if watch called inside the callback on dependency change ๐ŸŸข select throws if select called inside the callback on dependency change ๐ŸŸข can call read inside didChangeDependencies ๐ŸŸข select cannot be called inside didChangeDependencies ๐ŸŸข select in initState throws ๐ŸŸข watch in initState throws ๐ŸŸข read in initState works ๐ŸŸข consumer can be removed and selector stops to be called ๐ŸŸข context.select deeply compares maps ๐ŸŸข context.select deeply compares lists ๐ŸŸข context.select deeply compares iterables ๐ŸŸข context.select deeply compares sets ๐ŸŸข context.watch listens to value changes ``` ### ๐ŸŸขย test/future_provider_test.dart ``` ๐ŸŸข works with MultiProvider ๐ŸŸข (catchError) previous future completes after transition is no-op ๐ŸŸข previous future completes after transition is no-op ๐ŸŸข transition from future to future preserve state ๐ŸŸข throws if future has error and catchError is missing ๐ŸŸข calls catchError if present and future has error ๐ŸŸข works with null ๐ŸŸข create and dispose future with builder ๐ŸŸข FutureProvider() crashes if builder is null FutureProvider() ๐ŸŸข crashes if builder is null ``` ### ๐ŸŸขย test/inherited_provider_test.dart ``` ๐ŸŸข regression test #377 ๐ŸŸข rebuild on dependency flags update ๐ŸŸข properly update debug flags if a create triggers another deferred create ๐ŸŸข properly update debug flags if a create triggers another deferred create ๐ŸŸข properly update debug flags if an update triggers another create/update ๐ŸŸข properly update debug flags if a create triggers another create/update ๐ŸŸข Provider.of(listen: false) outside of build works when it loads a provider ๐ŸŸข new value is available in didChangeDependencies ๐ŸŸข builder receives the current value and updates independently from `update` ๐ŸŸข builder can _not_ rebuild when provider updates ๐ŸŸข builder rebuilds if provider is recreated ๐ŸŸข provider.of throws if listen:true outside of the widget tree ๐ŸŸข InheritedProvider throws if no child is provided with default constructor ๐ŸŸข InheritedProvider throws if no child is provided with value constructor ๐ŸŸข DeferredInheritedProvider throws if no child is provided with default constructor ๐ŸŸข DeferredInheritedProvider throws if no child is provided with value constructor ๐ŸŸข startListening markNeedsNotifyDependents ๐ŸŸข InheritedProvider can be subclassed ๐ŸŸข DeferredInheritedProvider can be subclassed ๐ŸŸข can be used with MultiProvider ๐ŸŸข throw if the widget ctor changes ๐ŸŸข InheritedProvider lazy loading can be disabled ๐ŸŸข InheritedProvider.value lazy loading can be disabled ๐ŸŸข InheritedProvider subclass don't have to specify default lazy value ๐ŸŸข DeferredInheritedProvider lazy loading can be disabled ๐ŸŸข DeferredInheritedProvider.value lazy loading can be disabled ๐ŸŸข selector ๐ŸŸข can select multiple types from same provider ๐ŸŸข can select same type on two different providers ๐ŸŸข can select same type twice on same provider ๐ŸŸข Provider.of has a proper error message if context is null diagnostics ๐ŸŸข InheritedProvider.value ๐ŸŸข InheritedProvider doesn't break lazy loading ๐ŸŸข InheritedProvider show if listening ๐ŸŸข DeferredInheritedProvider.value ๐ŸŸข DeferredInheritedProvider InheritedProvider.value() ๐ŸŸข markNeedsNotifyDependents during startListening is noop ๐ŸŸข startListening called again when create returns new value ๐ŸŸข startListening ๐ŸŸข stopListening not called twice if rebuild doesn't have listeners ๐ŸŸข removeListener cannot be null ๐ŸŸข pass down current value ๐ŸŸข default updateShouldNotify ๐ŸŸข custom updateShouldNotify InheritedProvider() ๐ŸŸข hasValue ๐ŸŸข provider calls update if rebuilding only due to didChangeDependencies ๐ŸŸข provider notifying dependents doesn't call update ๐ŸŸข update can call Provider.of with listen:true ๐ŸŸข update lazy loaded can call Provider.of with listen:true ๐ŸŸข markNeedsNotifyDependents during startListening is noop ๐ŸŸข update can obtain parent of the same type than self ๐ŸŸข _debugCheckInvalidValueType ๐ŸŸข startListening ๐ŸŸข startListening called again when create returns new value ๐ŸŸข stopListening not called twice if rebuild doesn't have listeners ๐ŸŸข removeListener cannot be null ๐ŸŸข fails if initialValueBuilder calls inheritFromElement/inheritFromWiggetOfExactType ๐ŸŸข builder is called on every rebuild and after a dependency change ๐ŸŸข builder with no updateShouldNotify use == ๐ŸŸข builder calls updateShouldNotify callback ๐ŸŸข initialValue is transmitted to valueBuilder ๐ŸŸข calls builder again if dependencies change ๐ŸŸข exposes initialValue if valueBuilder is null ๐ŸŸข call dispose on unmount ๐ŸŸข builder unmount, dispose not called if value never read ๐ŸŸข call dispose after new value ๐ŸŸข valueBuilder works without initialBuilder ๐ŸŸข calls initialValueBuilder lazily once ๐ŸŸข throws if both builder and initialBuilder are missing DeferredInheritedProvider.value() ๐ŸŸข hasValue ๐ŸŸข startListening ๐ŸŸข stopListening cannot be null ๐ŸŸข startListening doesn't need setState if already initialized ๐ŸŸข setState without updateShouldNotify ๐ŸŸข setState with updateShouldNotify ๐ŸŸข startListening never leave the widget uninitialized ๐ŸŸข startListening called again on controller change DeferredInheritedProvider() ๐ŸŸข create can't call inherited widgets ๐ŸŸข creates the value lazily ๐ŸŸข dispose ๐ŸŸข dispose no-op if never built ``` ### ๐ŸŸขย test/listenable_provider_test.dart ``` ListenableProvider ๐ŸŸข works with MultiProvider ๐ŸŸข asserts that the created notifier can have listeners ๐ŸŸข don't listen again if listenable instance doesn't change ๐ŸŸข works with null (default) ๐ŸŸข works with null (create) ๐ŸŸข stateful create called once ๐ŸŸข dispose called on unmount ๐ŸŸข dispose can be null ๐ŸŸข changing listenable rebuilds descendants ๐ŸŸข rebuilding with the same provider don't rebuilds descendants ๐ŸŸข notifylistener rebuilds descendants ListenableProvider value constructor ๐ŸŸข pass down key ๐ŸŸข changing the Listenable instance rebuilds dependents ListenableProvider stateful constructor ๐ŸŸข called with context ๐ŸŸข pass down key ๐ŸŸข throws if create is null ``` ### ๐ŸŸขย test/listenable_proxy_provider_test.dart ``` ListenableProxyProvider ๐ŸŸข throws if update is missing ๐ŸŸข asserts that the created notifier has no listener ๐ŸŸข asserts that the created notifier has no listener after rebuild ๐ŸŸข rebuilds dependendents when listeners are called ๐ŸŸข update returning a new Listenable disposes the previously created value and update dependents ๐ŸŸข disposes of created value ListenableProxyProvider variants ๐ŸŸข ListenableProxyProvider ๐ŸŸข ListenableProxyProvider2 ๐ŸŸข ListenableProxyProvider3 ๐ŸŸข ListenableProxyProvider4 ๐ŸŸข ListenableProxyProvider5 ๐ŸŸข ListenableProxyProvider6 ``` ### ๐ŸŸขย test/multi_provider_test.dart ``` MultiProvider ๐ŸŸข throw if providers is null ๐ŸŸข MultiProvider children can only access parent providers ๐ŸŸข MultiProvider.providers with ignored child ``` ### ๐ŸŸขย test/provider_test.dart ``` ๐ŸŸข works with MultiProvider Provider.of ๐ŸŸข throws if T is dynamic ๐ŸŸข listen defaults to true when building widgets ๐ŸŸข listen defaults to false outside of the widget tree ๐ŸŸข listen:false doesn't trigger rebuild ๐ŸŸข listen:true outside of the widget tree throws Provider ๐ŸŸข throws if the provided value is a Listenable/Stream ๐ŸŸข debugCheckInvalidValueType can be disabled ๐ŸŸข simple usage ๐ŸŸข throws an error if no provider found ๐ŸŸข update should notify ``` ### ๐ŸŸขย test/proxy_provider_test.dart ``` ProxyProvider ๐ŸŸข throws if the provided value is a Listenable/Stream ๐ŸŸข debugCheckInvalidValueType can be disabled ๐ŸŸข create creates initial value ๐ŸŸข consume another providers ๐ŸŸข rebuild descendants if value change ๐ŸŸข call dispose when unmounted with the latest result ๐ŸŸข don't rebuild descendants if value doesn't change ๐ŸŸข pass down updateShouldNotify ๐ŸŸข works with MultiProvider ๐ŸŸข update callback can trigger descendants setState synchronously ๐ŸŸข throws if update is null ProxyProvider variants ๐ŸŸข ProxyProvider2 ๐ŸŸข ProxyProvider3 ๐ŸŸข ProxyProvider4 ๐ŸŸข ProxyProvider5 ๐ŸŸข ProxyProvider6 ``` ### ๐ŸŸขย test/reassemble_test.dart ``` ๐ŸŸข ReassembleHandler ๐ŸŸข unevaluated create ๐ŸŸข unevaluated create ``` ### ๐ŸŸขย test/selector_test.dart ``` ๐ŸŸข asserts that builder/selector are not null ๐ŸŸข Deep compare maps by default ๐ŸŸข Deep compare iterables by default ๐ŸŸข Deep compare sets by default ๐ŸŸข Deep compare lists by default ๐ŸŸข custom shouldRebuid ๐ŸŸข passes `child` and `key` ๐ŸŸข calls builder if the callback changes ๐ŸŸข works with MultiProvider ๐ŸŸข don't call builder again if it rebuilds but selector returns the same thing ๐ŸŸข call builder again if it rebuilds abd selector returns the a different variable ๐ŸŸข Selector ๐ŸŸข Selector2 ๐ŸŸข Selector3 ๐ŸŸข Selector4 ๐ŸŸข Selector5 ๐ŸŸข Selector6 ``` ### ๐ŸŸขย test/stateful_provider_test.dart ``` ๐ŸŸข asserts ๐ŸŸข works with MultiProvider ๐ŸŸข calls create only once ๐ŸŸข dispose ``` ### ๐ŸŸขย test/stream_provider_test.dart ``` ๐ŸŸข works with MultiProvider ๐ŸŸข transition from stream to stream preserve state ๐ŸŸข throws if stream has error and catchError is missing ๐ŸŸข calls catchError if present and stream has error ๐ŸŸข works with null ๐ŸŸข StreamProvider() crashes if builder is null StreamProvider() ๐ŸŸข create and dispose stream with builder ๐ŸŸข crashes if builder is null ``` ### ๐Ÿ”ดย test/value_listenable_provider_test.dart ``` valueListenableProvider ๐ŸŸข rebuilds when value change ๐ŸŸข don't rebuild dependents by default ๐ŸŸข pass keys ๐ŸŸข don't listen again if stream instance doesn't change ๐Ÿ”ด pass updateShouldNotify The following TestFailure object was thrown running a test: Expected: <2> Actual: <1> Unexpected number of calls ```