【问题标题】:The argument type 'List<string>' can't be assigned to the parameter type 'String'参数类型“List<string>”不能分配给参数类型“String”
【发布时间】:2021-10-06 22:24:12
【问题描述】:

我正在尝试使用 Flutter 构建一个测验应用程序,但遇到了问题。我有我的 main.dart 和 question.dart 文件。我通过构造函数在 question.dart 文件中创建了一个 questionText,但我还在 main.dart 中创建了一个问题列表。现在我很困惑如何回答我的问题。

这是我的 main.dart 文件

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
 var _questionIndex = 0;

void _answerQuestion() {
  setState(() {
  _questionIndex = _questionIndex + 1;
});
print(_questionIndex);
}

@override
Widget build(BuildContext context) {
  var questions = ['What is your fav color?', 'What is your fav animal?'];

return MaterialApp(
  home: Scaffold(
    appBar: AppBar(
      title: Text("Quiz App"),
    ),
    body: Column(
      children: [
        Question(
          questions[_questionIndex],
          questionText: [_questionIndex.toString()],
        ),
        // ignore: deprecated_member_use
        RaisedButton(
          child: Text('Answer 1'),
          onPressed: _answerQuestion,
        ),
        // ignore: deprecated_member_use
        RaisedButton(
          child: Text('Answer 2'),
          onPressed: _answerQuestion,
        ),
        // ignore: deprecated_member_use
        RaisedButton(
          child: Text('Answer 3'),
          onPressed: _answerQuestion,
        )
      ],
    ),
  ),
);

} }

那么这是我的 question.dart 文件

import 'package:flutter/material.dart';

// ignore: must_be_immutable
class Question extends StatelessWidget {
  String questionText;

Question(String question, {Key? key, required this.questionText})
    : super(key: key);

 @override
 Widget build(BuildContext context) {
   return Text(questionText);
 }
}

我遇到的最大问题是应用程序没有返回我列表中的问题。请帮忙。

【问题讨论】:

    标签: android flutter dart flutter-layout flutter-test


    【解决方案1】:

    这一行:

    questionText: [_questionIndex.toString()],
    

    问题小部件要求 questionText 为字符串。但是在这里你给它一个字符串列表。通过将字符串放在括号内,您可以将其转换为字符串列表。

    如果您删除括号应该可以工作:

    questionText: _questionIndex.toString(),
    

    【讨论】:

      【解决方案2】:

      您已将questionText 定义为字符串数据类型。但是在 MaterialApp 小部件中,您在其中调用 Question 类,您将第二个参数作为 [_questionIndex.toString()]。根据您的代码,_questionIndex 是Integer,因此当您将其转换为字符串时,它会像“1”或“2”或“3”之类的! 所以,在这里你给出的字符串列表将只包含一个字符串,那就是你的questionIndex,所以当你将 questionText 定义为String 时,这会产生错误,但你给它分配了一个List Of Strings

      你应该更换你的

      questionText: [_questionIndex.toString()],
      

      questionText: _questionIndex.toString(), 
      

      我建议您在代码中应用一些更改来改进代码:

      如果您想将数字问题与问题一起显示,请在 Question 类中替换您的代码,如下所示:

      import 'package:flutter/material.dart';
      
      // ignore: must_be_immutable
      class Question extends StatelessWidget {
        final questionNumber;
        final questionText;
      
      Question(this.questionNumber, this.questionText);
      
       @override
       Widget build(BuildContext context) {
      
         return Text('${questionNumber.toString()} $questionText');
       }
      }
      

      MaterialApp 小部件的变化:

      ...
       body: Column(
            children: [
              Question(
                _questionIndex+1,
                questions[_questionIndex],  
              ),
      ...
      

      【讨论】:

      • 这绝对有效。我很感激你!
      • 很高兴为您提供帮助:)
      • 嗨@AdeolaAdesina,如果这对您有用,请接受答案(在答案左侧打勾),以便其他人可以轻松知道!
      猜你喜欢
      • 2020-08-26
      • 2022-12-12
      • 2021-10-02
      • 2021-09-13
      • 2020-04-15
      • 2021-09-06
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      相关资源
      最近更新 更多