J'ai le type d'erreur 'String' n'est pas un sous-type du type 'List' dans le type cast lors de la compilation de mon application comme ceci après avoir ajouté une List et toList() dans le code : entrez la description de l'image ici

Voici le main.dart qui contient le code List et toList(), mon application peut bien fonctionner lorsque ce code est retiré, je me demande ce qui le rend mal. Je n'ai trouvé aucune ligne d'erreur dans VS Code, mais l'erreur apparaît dans la cmd et l'application du compilateur :

import 'package:flutter/material.dart';
import './question.dart';
import './answer.dart';

void main() {
  runApp(MyApps());
}

class MyApps extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return MyAppsState();
  }
}

class MyAppsState extends State<MyApps> {
  int indexQuestion = 0;

  void answerQuestion() {
    setState(() {
      indexQuestion += 1;
    });
    if (indexQuestion > 1) {
      indexQuestion = 1;
    }
    print('add index by 1');
  }

  Widget build(BuildContext context) {
    var questions = [
      {
        'questionText': 'What\'s your favorite animal?',
        'answers': ['cat', 'dog', 'elephant', 'fish'],
      },
      {
        'questionText': 'What\'s your favorite color?',
        'answers': ['red', 'green', 'blue', 'black'],
      },
    ];

    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            title: Text('My First App Yo!'),
          ),
          body: Column(
            children: [
              Question(
                questions[indexQuestion]['questionText'],
              ),
              **//==============PROBLEM HERE===================================**
              ...(questions[indexQuestion]['questionText'] as List<String>)
                  .map((answer) {
                return Answer(answerQuestion, answer);
              }).toList(),
              **//===============================================================**
              RaisedButton(
                onPressed: resetIndex,
                child: Text('Reset'),
              ),
            ],
          )),
    );
  }
}

Voici le answer.dart :

import 'package:flutter/material.dart';

class Answer extends StatelessWidget {
  final Function selectHandler;
  final String answerText;

  Answer(this.selectHandler, this.answerText);

  @override
  Widget build(BuildContext context) {
    return Column(children: [
      Container(
        width: double.infinity,
        margin: EdgeInsets.only(left: 50, right: 50),
        child: RaisedButton(
          child: Text('Answer1'),
          color: Colors.blue,
          onPressed: () => selectHandler(),
        ),
      )
    ]);
  }
}

Voici la question.dart :

    import 'package:flutter/material.dart';

class Question extends StatelessWidget {
  final String questionText;

  Question(this.questionText);

  // Question({String questionTextoption}) {
  //   questionText = questionTextoption;
  // }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Text(
        'aaa $questionText',
        style: TextStyle(fontSize: 28),
        textAlign: TextAlign.center,
        maxLines: 2,
      ),
      width: double.infinity,
      margin: EdgeInsets.all(10),
    );
  }
}

Je viens de suivre le didacticiel flutter et je suis bloqué ici, toute aide m'aiderait vraiment maintenant. Merci d'avance pour votre aide.

0
sleonhart 4 nov. 2020 à 17:17

1 réponse

Meilleure réponse

questions[indexQuestion]['questionText'] est une chaîne, vous ne pouvez pas la convertir en List<String>. questions[indexQuestion]['answers'] fonctionnerait bien. Et lorsque cela fonctionnera, vous aurez probablement des erreurs de mise en page dues à l'imbrication d'un Column dans un Column(Answer class) sans Expanded.

1
krumpli 4 nov. 2020 à 15:24