43
votes

Le générateur ne peut pas cibler des bibliothèques qui n'ont pas été migrées vers la sécurité nul

Ce problème se produit lorsque vous essayez la commande suivante:

Flutter Pub Run build_runner build - Delete-Conflicting-sorts

Le message d'erreur:

xxx

pubSpec.yaml:

[√] Flutter (Channel stable, 2.0.0, on Microsoft Windows [Version
> 10.0.19042.844], locale en-US)
>     • Flutter version 2.0.0 at C:\flutter
>     • Framework revision 60bd88df91 (22 hours ago), 2021-03-03 09:13:17 -0800
>     • Engine revision 40441def69
>     • Dart version 2.12.0

Ce sont les versions actuelles de flottement et de fléchettes:

dependencies:
  json_annotation: ^4.0.0
  flutter:
    sdk: flutter
...
dev_dependencies:
  build_runner: ^1.11.5
  json_serializable: ^4.0.2
  flutter_test:
    sdk: flutter


0 commentaires

6 Réponses :


62
votes

J'ai découvert que json_serializable> = 4.0.0 dépend de json_annotation> = 4.0.0 et le json_annotation: ^ 4.0.0 inclut Null Safety mais json_serializable: ^ 4.0.2 ne fait pas , donc L'erreur se produit.

J'ai donc rétrogradé les deux packages:

json_serializable: 3.5.1

et

json_annotation: 3.1.1

et ils fonctionnent à nouveau correctement correctement .


3 commentaires

Je suis coincé dans une étrange dépendance en enfer. dépend à la fois de build_runner 1.12.2 et json_serializable 3.5.1, la résolution de la version a échoué.


Utilisez Build_Runner: ^ 1.10.9


Utilisez JSON_annotation: ^ 3.0.1, build_runner: ^ 1.0.0, JSON_Serializable: ^ 3.3.0 Cela fonctionne pour moi.



30
votes

Je pense que tout cela dépend si vous avez l'intention de mettre à niveau votre projet global pour activer Sécurité nul ou ne pas. Si vous souhaitez utiliser les derniers packages json_serializable (qui ont permis une sécurité nul), vous aurez besoin de le spécifier en tant que tel dans votre environnement.

dans votre pubspec.yaml, si vous activez la sécurité nul avec les éléments suivants:

environment:
   sdk: ">=2.12.0 <3.0.0"

... alors le dernier json_serializable devrait fonctionner sans problème.

Référence: en coulisses: les contraintes sdk

chances, votre environnement "sdk" est quelque chose Moins de 2.12.0 s'ils vous donnent cette erreur.

Cependant, si vous n'êtes pas intéressé à mettre à jour la sécurité nul, vous devrez probablement garder votre JSON_Serializable Les packages ont été rétrogradés comme vous l'avez mentionné.


0 commentaires

0
votes

J'ai eu le même problème et le résolvez avec des étapes ci-dessous:

  • set sdk: '> = 2.12.0 <3.0.0'

  • Modifier la version de json_serializable et json_annotation à ^ 4.0.0 (pas 4.1.0)


  • 0 commentaires

    6
    votes

    Essayez de définir:

    sdk: '>=2.12.0 <3.0.0'
    


    0 commentaires

    0
    votes

    Mettez à niveau votre fichier PubSpec,

    flutter pub run build_runner build --delete-conflicting-outputs
    

    Après la mise à niveau des packages pour exécuter cette commande:

      sdk: '>=2.12.0 <3.0.0'
    
      json_annotation: ^4.0.1
      json_serializable: ^4.1.0
      build_runner: ^1.12.2
    


    0 commentaires

    7
    votes

    Dans votre fichier pubspe.yaml , la version SDK inférieure doit être > = 2.12 .

    flutter pub get
    flutter pub run build_runner build --delete-conflicting-outputs
    

    Utilisez les versions suivantes ( Tous sont nuls-sûrs)

    json_annotation: ^4.0.1
    json_serializable: ^4.1.2
    build_runner: ^2.0.3
    

    Après cela, exécutez:

    environment:
      sdk: '>=2.12.0 <3.0.0'
    


    0 commentaires