web-dev-qa-db-fra.com

Les méthodes d'extension Flutter ne fonctionnent pas, il dit "classe non définie" et "nécessite la fonctionnalité de langage des méthodes d'extension"

Je construis lentement mon site Web personnel à dlblack.dev , et j'essaye de le pimenter un peu. Par exemple, à partir d'un ordinateur (plutôt que d'une tablette ou d'un téléphone car ils n'ont pas de pointeurs de souris), si vous survolez l'un des éléments cliquables, cela ne change pas le pointeur de votre souris pour indiquer qu'il est cliquable, et l'objet cliquable ne change pas du tout. J'ai décidé de suivre ce tutoriel FilledStacks , mais il ne mentionne rien sur la résolution de ce problème.

Ce qui se passe essentiellement, c'est lorsque j'obtiens environ 2,5 minutes à travers la vidéo du didacticiel (où il écrit la classe d'extension squelette) et que j'essaye de la dupliquer, VS Code redéfinit presque toute la déclaration de classe en dehors du nom. Ce que j'écris est exactement la même chose que ce qu'il a à l'écran à 2:26, ​​et voici mon code:

import 'package:flutter/material.Dart';
import 'Dart:html' as html;

extension HoverExtension on Widget{

}

"extension", "on" et "Widget" sont tous surlignés lorsque je fais cela. Lorsque je passe la souris sur "extension", il dit ce qui suit:

Undefined class 'extension'.
Try changing the name to the name of an existing class, or creating a class with the name 'extension'. dartundefined_class
This requires the 'extension-methods' language feature to be enabled.
Try updating your pubspec.yaml to set the minimum SDK constraint to 2.6 or higher, and running 'pub get'. Dart(experiment_not_enabled)

La première chose que j'ai faite a été de changer ma contrainte SDK minimale en 2.6.0 dans mon fichier pubspec.yaml. Je l'ai ensuite changé en 2.7.0 car beaucoup de gens en ligne disent que des extensions ont été publiées dans Dart 2.7. J'ai beaucoup fait de googler sur le sujet mais personne ne semble avoir le même problème que moi: je n'ai pas de fichier analysis_options.yaml. J'en ai créé un et mis seulement ceci dans son contenu:

include:

analyzer:
  enable-experiment:
    - extension-methods

linter:

En théorie, je pense que cela devrait résoudre mon problème une fois que je lance flutter pub get à partir de la ligne de commande dans mon dossier racine; ce n'est pas le cas. Je n'ai aucune idée de ce qui ne va pas. Aucune suggestion?

Merci.

4
VitaminTussle

J'ai eu un problème similaire avec la fonction "extensions" de Dart (sous Windows) ... J'obtenais "classe non définie", et le message disant que je devais utiliser les paramètres "expérimentaux" de Dart. Il semble que j'aie eu deux installations Dart, une dans "c:\Program Files" et une dans "c:\tools\Dart-sdk". J'ai supprimé la version sous "Program Files". J'ai aussi lancé "choco uninstall Dart-sdk" et "choco install Dart-sdk", et je me suis assuré que la version était correcte (en utilisant "Dart --version") après l'installation. La commande "where Dart" doit afficher "c:\tools\Dart-sdk-bin-Dart.exe" après l'installation de choco. Quand je suis retourné dans mon projet Flutter (en utilisant Android Studio), cela m'a dit que je n'avais pas de support Dart pour mon projet, et que je devais juste entrer l'emplacement du SDK Dart.

0
Andy King