36
votes

Erreur: la méthode 'héritage dewidgetofExactType' n'est pas définie pour la classe 'buildContext'

Aujourd'hui, lorsque je compile mon projet Flutter, il montre cette erreur:

~/Documents/GitHub/cruise-open on  feature/channel! ⌚ 15:01:43
$ ~/apps/flutter/bin/flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.0.1, on Mac OS X 10.15.7 19H114 darwin-x64, locale en-CN)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.1)
[✓] IntelliJ IDEA Community Edition (version 2020.3.2)
[✓] IntelliJ IDEA Ultimate Edition (version 2019.2.2)
[✓] VS Code (version 1.53.2)
[✓] Connected device (3 available)
    ! Error: xiaoqiang çš„ iPhone is not connected. Xcode will continue when xiaoqiang çš„ iPhone is connected. (code
      -13)

• No issues found!
(base)

J'utilise Flutter Master Channel, c'est le Doctor Flutter:

xxx / / pre>

Après la mise à niveau vers Flutter 2.0.1, montre à nouveau cette erreur:

[✓] Flutter (Channel master, 1.26.0-2.0.pre.366, on Mac OS X 10.15.7 19H114 darwin-x64, locale en-CN)
    • Flutter version 1.26.0-2.0.pre.366 at /Users/dolphin/apps/flutter
    • Framework revision b7f6d9bcb2 (24 hours ago), 2021-01-15 07:44:03 -0500
    • Engine revision 69a7538a90
    • Dart version 2.12.0 (build 2.12.0-227.0.dev)
    • Pub download mirror https://pub.flutter-io.cn
    • Flutter download mirror https://storage.flutter-io.cn

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /Users/dolphin/Library/Android/sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.3, Build version 12C33
    • CocoaPods version 1.10.0

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[✓] IntelliJ IDEA Community Edition (version 2020.3.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart

[✓] IntelliJ IDEA Ultimate Edition (version 2019.2.2)
    • IntelliJ at /Users/dolphin/Applications/JetBrains Toolbox/IntelliJ IDEA Ultimate.app
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart

[✓] VS Code (version 1.52.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.18.1

[✓] Connected device (3 available)
    • sdk gphone x86 arm (mobile) • emulator-5554 • android-x86    • Android 11 (API 30) (emulator)
    • macOS (desktop)             • macos         • darwin-x64     • Mac OS X 10.15.7 19H114 darwin-x64
    • Chrome (web)                • chrome        • web-javascript • Google Chrome 87.0.4280.141
    ! Error: xiaoqiang çš„ iPhone is not connected. Xcode will continue when xiaoqiang çš„ iPhone is connected. (code
      -13)

• No issues found!
(base)


5 commentaires

Ayez le même problème après le passage de Beta à Master Channel. Dites moi si vous trouvez une solution.


Avoir le même problème après la mise à niveau de Flutter il y a quelques jours. Je l'ai quelque peu réparé en mettant à niveau le package du fournisseur, mais maintenant je suis confronté à de nouveaux problèmes.


Je passe à un canal stable maintenant, je ferai peut-être face à l'erreur après la mise à niveau dans la fourrure. @ user1032620


Les deux n'ont malheureusement pas résolu ma situation. La construction en bêta n'est pas un problème, mais a besoin de la chaîne maître afin de ne pas faire écraser l'application à la fin dans TestFlight.


Quelqu'un a-t-il trouvé une solution?


5 Réponses :


11
votes

upd!

Avec Flutter 2 Release Downrading SDK n'est pas la meilleure solution de contournement à plus long terme. La bonne chose à faire est de parcourir les dépendances et de les mettre à jour, vous pouvez utiliser Flutter Pub Outdated Commande de terminal pour mettre en surbrillance les mises à jour disponibles - puis modifiez PubSpec.YAML avec des versions plus récentes et essayez d'exécuter votre application. Il pourrait arriver que certaines dépendances n'auront pas les mises à jour ou les correctifs pour les changements de rupture du SDK Flutter. Dans ce cas, vous serez enfermé dans l'utilisation du Flutter plus ancien (jusqu'à ce que la dépendance soit mise à jour ou que vous la remplacez par un autre package).

orig

Exécuter Downgrade Flutter

a reçu la même erreur juste après la mise à niveau. Le passage de Flutter 1.26.0-12

Il s'agit d'un QuickFix au cas où vous n'êtes pas d'humeur à passer par des dépendances dans pubSpec.yaml à la mise à jour vers des plus récentes (en espérant qu'il y ait des mises à jour de la sécurité nul) mais je veux juste faire Continuez de l'endroit où vous avez quitté. Eventualy vous devrez passer par tous vos packages / plugins et les mettre à jour / les remplacer par des versions nullsafe .


1 commentaires

Argh. Cela l'a corrigé, ty!



4
votes

pour moi, c'était parce que j'utilisais une ancienne version de mes dépendances. Vérifiez Pub.Dev pour voir si une nouvelle version de vos packages!


1 commentaires

github.com/flutter/flutter/issues/74519 - Il y a un changement de rupture de l'API Lié à la sécurité nul (supprimant Nullok Param) et en jetant un coup d'œil à ce qu'ils ont changé (navigateur, localisation) et combien de plug-ins reposent sur ces API, il peut prendre des mois pour les développeurs plug-in pour rattraper le changement (si Flutter Team décide de ne pas revenir au changement)



3
votes

Cela s'est souvent produit lorsque vous travaillez avec les canaux Dev et Master, les meilleurs choix mensuels de maître que Flutter considèrent plus stable est la canal bêta

flutter channel beta

FLUTTER BUILD CHALLALS

Nous allons nous diversifier de maître pour une nouvelle version bêta au début de Le mois, généralement le premier lundi. Cela comprendra une branche pour Dart, le moteur et le cadre. Cette branche sera alors "stabilisé" pendant les deux prochaines semaines, ce qui signifie que nous accepterons Demandes de Cherrypick pour des problèmes à fort impact. Comme nous versons la fin de la mois et la prochaine succursale bêta, nous réduirons probablement le nombre de Cherrypicks que nous sommes prêts à faire. Une fois par quart, la succursale bêta vivre pour devenir la prochaine branche stable, comme détaillé ci-dessous.


2 commentaires

Je suis confronté à cela sur les canaux bêta depuis hier et j'ai dû Flutter Downgrade de toute façon.


Récemment passé de la version bêta au maître (ou dev?). La réwitching à la version bêta a résolu le problème, merci Feras pour l'explication!



45
votes

Cette erreur est causée par hheritfromwidgetofacttype Méthode.

Cette méthode est obsolète. Utilisez dépendoninheritedwidgetofactType à la place.

Votre projet le contient simplement

première solution:

Revenez à la version 1.26.0-8.0 manuellement ou Utilisez cette commande:

static Name of(BuildContext context) {
  return context.dependOnInheritedWidgetOfExactType<Name>();  //after
}

Solution deuxième:

Passez à la chaîne bêta

static Name of(BuildContext context) {
  return context.inheritFromWidgetOfExactType(Name);  //before
}

Si vous n'avez pas encore de canal bêta, vous devez ajouter Flutter Updgrade

troisième solution:

Mettez à jour votre projet

trouver HéréritfromwidgetofExactType Méthode dans votre code et adaptez-le avec dépendonInheritedWidgetOfExactType .

Exemple de remplacement :

Strong> avant: avec hhetritfromwidgetofacttype

pre> xxx

maintenant avec dépend-en-cohérencewidgetofexactType (recommandée)

flutter channel beta

Maintenant, au lieu de prendre un type comme argument, la méthode est générique.
Brief <...> () au lieu de (...)

L'erreur peut également être causée par un package que vous avez importé:

Solution: Vérifiez si ce package a une nouvelle mise à jour

En fait, Cette méthode a été dépréciée depuis la version 1.12.1 de Flutter. Mais jusque-là, son utilisation était possible mais pas recommandée. Depuis la version 1.26.0-12.0.pre, il n'est plus utilisé, ce qui explique les erreurs.


4 commentaires

Où trouver ça? Avant: avec INHERITFROMWIDGETOFEXATTYPE Nom statique de (Context BuildContext) {return context.InHeritFromWidgetOfExactType (name); //avant de }


@DanieLengelini à l'intérieur des codes de votre projet. Je pense que votre compilateur vous dira l'emplacement exact. Suivez simplement l'endroit où il vous indique l'erreur et essayez de réadapter le code.


Super! La solution exacte, je trouvais des heures


a travaillé avec la drobotage de la solution, pour exécuter cet exemple de projet de flottement -> github.com/2d-inc/developer_quest < / a>



4
votes

Si vous avez besoin d'exécuter Providerin Flutter 1.26, vous devez exécuter: Downradgrade Flutter.

Si vous avez besoin d'exécuter un fournisseur dans Flutter 2.0.0 + vous devez changer:

pubspe.yaml

Fournisseur: ^ 2.0.1 à ^ 5.0.0

main.dart

Modifier le constructeur pour créer

return Multiprovider (fournisseurs: [ChangeNotifierProvider (Create: (context) => yourProvider ()),],


1 commentaires

Merci, cela a fonctionné pour moi