web-dev-qa-db-fra.com

Flutter - La «longueur» du getter a été appelée sur null

J'essaie de développer une application Flutter. Ce flutter crée des équipes pour un jeu de cartes. Après la création de l'équipe, les points peuvent être comptés via le, afin que vous n'ayez pas à penser au nombre de points que tout le monde a.

Mais j'ai eu une exception, où je sais où l'exception et ce que cela signifie, mais je ne sais pas comment je pourrais résoudre le problème. J'espère que certains d'entre vous pourraient m'aider.

C'est le code où l'erreur est levée:

import 'package:flutter/material.Dart';


class Punktezaehler extends StatefulWidget{

  final List<String> spieler_namen;
  Punktezaehler(this.spieler_namen);

  @override
  State<StatefulWidget> createState() => new _Punktezaehler(this.spieler_namen);
}


class _Punktezaehler extends State<Punktezaehler>{

  final List<String> spieler_namen;
  _Punktezaehler(this.spieler_namen);

  List<int> punkteanzahl_teamEins;
  List<int> punkteanzahl_teamZwei;

  @override
  Widget build(BuildContext context) {


    var spieler1 = spieler_namen[0].substring(0,3);
    var spieler2 = spieler_namen[1].substring(0,3);
    var spieler3 = spieler_namen[2].substring(0,3);
    var spieler4 = spieler_namen[3].substring(0,3);

    return new Scaffold(
      appBar: new AppBar(
        automaticallyImplyLeading: false,
        title: new Text("$spieler1 & $spieler2 vs" +" $spieler3 & $spieler4"),
        actions: <Widget>[

        ],
      ),
      body: Container(
        child: new Row(
          children: <Widget>[
            new Column(
              children: <Widget>[
                new IconButton(
                    icon: Icon(Icons.exposure_plus_2),
                    onPressed: () => punkte_hinzuzaehlen(1, 2)
                )
              ],
            ),
            new Column(
              children: <Widget>[
                //new FlatButton(onPressed: () => print(punkteanzahl_teamEins.length), child: new Text("Punkte")),
                ListView.builder(
                  itemCount: punkteanzahl_teamEins.length, //--> Error is thrown here
                  itemBuilder: (context, index){
                    return Text(punkteanzahl_teamEins[index].toString());
                  }
                ),
                new Row()
              ],
            ),
            new Column(
              children: <Widget>[
                new IconButton(
                    icon: Icon(Icons.exposure_plus_2),
                    onPressed: () => punkte_hinzuzaehlen(2, 2)
                )],
            )
          ],
        )
      ),
    );
  }

  void punkte_hinzuzaehlen(int team, int nummer){
    if (team == 1){
      //Team 1 bekommt die Punkte
      print("Team 1 gets points");
    }
    else if(team == 2){
      //Team 2 bekommt die Punkte
      print("Team 2 gets points");
    }
  }
}

Et voici le message d'erreur:

══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
I/flutter (26028): The following NoSuchMethodError was thrown while handling a gesture:
I/flutter (26028): The getter 'length' was called on null.
I/flutter (26028): Receiver: null
I/flutter (26028): Tried calling: length

Après la correction, j'ai eu une autre erreur:

══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter (26028): The following assertion was thrown during performResize():
I/flutter (26028): Vertical viewport was given unbounded width.
I/flutter (26028): Viewports expand in the cross axis to fill their container and constrain their children to match
I/flutter (26028): their extent in the cross axis. In this case, a vertical viewport was given an unlimited amount of
I/flutter (26028): horizontal space in which to expand.
4
user9047282

punkteanzahl_teamEins est seulement déclaré. Mais pas initialisé. Il lance donc une erreur nulle.

Vous devez attribuer une valeur à punkteanzahl_teamEins as

List<int> punkteanzahl_teamEins = [1,4,5,7];

ou transmettre les données du parent comme exigence.

9
Dhiraj Sharma

Nous perdons du temps pour résoudre le problème, enfin nous avons obtenu une solution: veuillez vérifier pubspec.yaml et supprimer les '-' supplémentaires en cas de fichier d'actifs et veuillez également suivre la structure de cet espace, comme l'espacement et tout ça.

Nous sommes sûrs que ce problème ne se trouve que dans le fichier pubspec.yaml

2
Chetan Raval

Dans notre cas, nous avons obtenu cette erreur lorsque la connexion Internet est désactivée après avoir appelé le service Web.

1
CHIRINGUCHI

Tout d'abord, vérifiez que spieler_namen est nul ou non. S'il est nul, utilisez le code ci-dessous, j'espère que cela résoudra votre problème .....

if(spieler_namen == null){
  new Container(width: 10.0,height:  10.0,);
 }else{
 your requirement .......
 }
0
Adam

Je corrige cela en revisitant cette section dans pubspec.yaml

# To add assets to your application, add an assets section, like this:
# assets:
#  - images/a_dot_burr.jpeg
#  - images/a_dot_ham.jpeg

Assurez-vous que l'espacement, les tirets et les noms de fichiers sont corrects. Remarque: vous n'avez pas besoin de répertorier tous les fichiers image; à la place, vous pouvez simplement lister leur répertoire:

assets:
- images/
0
Robert Stevens