Je suis un tutoriel et je suis maintenant bloqué car je ne peux pas appeler la valeur de la clé.

Voici mon script main.dart :

import 'package:flutter/material.dart';
import 'package:first_app/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');
  }

  void resetIndex() {
    setState(() {
      indexQuestion = 0;
    });
    print('Reset to 0');
  }

  var a = 'as';

  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'],
      },
      {
        'questionText': 'Who\'s your favorite actor?',
        'answers': ['D\'Caprio', 'Tony Hawk', 'Scarlet', 'J-Low'],
      },
    ];

    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            title: Text('My First App Yo!'),
          ),
          body: Column(
            children: [
// ========================ERROR HERE========================
              Question(
                questions[indexQuestion]['questionText'],
              ),
//===========================================================
              Text('indexQuestion = $indexQuestion'),
              Answer(answerQuestion),
              Answer(answerQuestion),
              RaisedButton(
                child: Text('Answer 3'),
                onPressed: () {
                  print('Anonymus function is pressed!');
                },
              ),
              RaisedButton(
                child: Text('Answer 4'),
                onPressed: answerQuestion,
              ),
              RaisedButton(
                child: Text('Reset'),
                onPressed: resetIndex,
              ),
              Container(
                color: Colors.amber,
                width: 50,
                height: 50,
                margin: EdgeInsets.all(10),
              ),
              Center(
                child: SetGo(),
              ),
            ],
          )),
    );
  }
}

Voici le fichier question.dart qui a besoin de l'argument à la ligne Question :

    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: 1,
      ),
      width: double.infinity,
      margin: EdgeInsets.all(10),
    );
  }
}

L'erreur est à cette ligne :

Question(
                questions[indexQuestion]['questionText'],
              ),

Et voici l'erreur : Le type d'argument 'Object' ne peut pas être affecté au type de paramètre 'String'. entrez la description de l'image ici

Cette valeur sera appelée en tant que chaîne dans une autre fonction dans un autre fichier. Quelqu'un peut-il m'aider à résoudre cela s'il vous plaît?

1
sleonhart 2 nov. 2020 à 18:06

1 réponse

Meilleure réponse

Votre code donné fonctionne.

enter image description here

import 'package:flutter/material.dart';
//import 'package:first_app/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');
  }

  void resetIndex() {
    setState(() {
      indexQuestion = 0;
    });
    print('Reset to 0');
  }

  var a = 'as';

  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'],
      },
      {
        'questionText': 'Who\'s your favorite actor?',
        'answers': ['D\'Caprio', 'Tony Hawk', 'Scarlet', 'J-Low'],
      },
    ];

    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            title: Text('My First App Yo!'),
          ),
          body: Column(
            children: [
// ========================ERROR HERE========================
              Question(
                questions[indexQuestion]['questionText'],
              ),
//===========================================================
              Text('indexQuestion = $indexQuestion'),
              //Answer(answerQuestion),
              //Answer(answerQuestion),
              RaisedButton(
                child: Text('Answer 3'),
                onPressed: () {
                  print('Anonymus function is pressed!');
                },
              ),
              RaisedButton(
                child: Text('Answer 4'),
                onPressed: answerQuestion,
              ),
              RaisedButton(
                child: Text('Reset'),
                onPressed: resetIndex,
              ),
              Container(
                color: Colors.amber,
                width: 50,
                height: 50,
                margin: EdgeInsets.all(10),
              ),
              Center(
                //child: SetGo(),
              ),
            ],
          )),
    );
  }
}



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: 1,
      ),
      width: double.infinity,
      margin: EdgeInsets.all(10),
    );
  }
}
0
bluenile 2 nov. 2020 à 15:29