【问题标题】:Flutter - Error at compiled application when adding toList() at spreadFlutter - 在展开时添加 toList() 时编译的应用程序出错
【发布时间】:2020-11-04 14:17:28
【问题描述】:

在代码中添加 List 和 toList() 后编译我的应用程序时,我得到错误类型 'String' is not a subtype of type 'List' in type cast

这是包含List和toList()代码的ma​​in.dart,取出这些代码后我的应用程序可以正常运行,不知道是什么地方出错了。 我在VS Code中没有发现任何错误行,但是编译器cmd和应用程序出现错误:

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'),
              ),
            ],
          )),
    );
  }
}

这是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(),
        ),
      )
    ]);
  }
}

这是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),
    );
  }
}

我只是按照 Flutter 教程学习并卡在这里,现在任何帮助都会对我有所帮助。 提前感谢您的帮助。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    questions[indexQuestion]['questionText'] 是一个字符串,您不能将其转换为 List&lt;String&gt;questions[indexQuestion]['answers'] 会工作。 当你让它工作时,你可能会因为在没有ExpandedColumn(Answer class) 中嵌套Column 而出现布局错误。

    【讨论】:

    • 是的,你是对的!它的工作原理,谢谢你的洞察力!很有帮助
    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 2018-07-29
    • 2016-02-27
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 2020-09-07
    • 2019-08-14
    相关资源
    最近更新 更多