When using the class Bloc provider as follows, I get the error:
'The method 'ancestorInheritedElementForWidgetOfExactType' isn't defined for the type 'BuildContext'.'
So I replaced this line context.ancestorInheritedElementForWidgetOfExactType(type)?.widget;
with this line context.getElementForInheritedWidgetOfExactType<_BlocProviderInherited<T>>().widget;
but then I get the following Error:
Error output from Xcode build:
↳
** BUILD FAILED **
Xcode's output:
↳
../../../development/flutter/.pub-cache/hosted/pub.dartlang.org/dynamic_theme-1.0.1/lib/dynamic_theme.dart:25:20: Error: The method 'ancestorStateOfType' isn't defined for the class 'BuildContext'.
- 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('../../../development/flutter/packages/flutter/lib/src/widgets/framework.dart').
Try correcting the name to the name of an existing method, or defining a method named 'ancestorStateOfType'.
return context.ancestorStateOfType(const TypeMatcher<DynamicThemeState>());
^^^^^^^^^^^^^^^^^^^
Command PhaseScriptExecution failed with a nonzero exit code
note: Using new build system
note: Building targets in parallel
note: Planning build
note: Constructing build description
Could not build the precompiled application for the device.
Error launching application on iPhone
This is the Bloc Provider i am using:
class BlocProvider<T extends BlocBase> extends StatefulWidget {
BlocProvider({
Key key,
@required this.child,
@required this.bloc,}) : super(key: key);
final Widget child;
final T bloc;
@override
_BlocProviderState<T> createState() => _BlocProviderState<T>();
static T of<T extends BlocBase>(BuildContext context) {
final type = _typeOf<_BlocProviderInherited<T>>();
_BlocProviderInherited<T> provider =
context.ancestorInheritedElementForWidgetOfExactType(type)?.widget;
return provider?.bloc;
}
}
I am on the Master channel, Flutter (Channel master, 1.26.0-2.0.pre.275)
Flutter master branch issue - The method 'ancestorStateOfType' isn't defined for the class 'BuildContext'. · Issue #140 · fluttercommunity/flutter_google_places · GitHub
This error is caused by inheritFromWidgetOfExactType method. This method is deprecated . Use dependOnInheritedWidgetOfExactType instead.
A handle to the location of a widget in the widget tree. This class presents a set of methods that can be used from StatelessWidget.build methods and from methods on State objects. BuildContext objects are passed to WidgetBuilder functions (such as StatelessWidget.build ), and are available from the State.context member.
In general, dependOnInheritedWidgetOfExactType is more appropriate for such cases. This method is useful for changing the state of an ancestor widget in a one-off manner, for example, to cause an ancestor scrolling list to scroll this build context's widget into view, or to move the focus in response to user interaction.
after upgrade dev channel was almost the same issue
.pub-cache/hosted/pub.dartlang.org/dynamic_theme-1.0.1/lib/dynamic_theme.dart:25:20: Error: The method 'ancestorStateOfType' isn't defined for the class 'BuildContext'.
'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('/home/liudmila/snap/flutter/common/flutter/packages/flutter/lib/src/widgets/framework.dart').
Try correcting the name to the name of an existing method, or defining a method named 'ancestorStateOfType'.
with block 4.0.0
just change this in file .pub-cache/../dynamic_theme.dart:25:20
context.ancestorStateOfType()
on that
context.findAncestorStateOfType<DynamicThemeState>();
thats temp solution, but app is work
You are using an old version of flutter_bloc, first you should upgrade it.
But, in fact the real problem is that context.ancestorInheritedElementForWidgetOfExactType(type)
is deprecated in favor of context.getElementForInheritedWidgetOfExactType<T>()
but still available in the stable channel, but in master is already removed.
Then it is necessary to update your code because Bloc has suffered breaking changes.
UPDATE: The mentioned change is already in the stable channel.
try changing the packages version in pubspec.yaml it worked for me i changed provider version to 5.0.0 , then it started working
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With