在Flutter(Dart)中访问实例对象中的数据

时间:2019-12-29 03:15:10

标签: flutter dart

因此,我试图创建一个预定义类的列表。我遇到的问题是访问list内部的对象列表。我想最终将它们映射出来并动态地渲染它们,但是您能否帮助告诉我在此特定列表中可以改进的地方,或者如果我做得正确,是否可以告诉我实际上是否可以在map上使用map方法它使他们呈现一个小部件?我还没有制作任何小部件,但让我们想象一下我只是使用一些简单的东西,例如文本。是的,目前只有一个实例,但稍后我会添加更多实例。

所以主要问题是:

如何访问键值对答案:文本和分数?

同样,如果您认为我在做的事情很奇怪并且没有任何意义,请随时纠正我,我是编程新手。另外,您可以在列表和对象上给我一些有用的提示或任何其他提示或备忘单,而map方法将极大地帮助您,因为我一直在努力解决这个问题,以获取高级部分。我的意思是我了解了基础知识,列表(又称数组)可以通过索引访问,但是当您开始将它们与列表中对象内的类和对象混合时,我会感到很困惑。

import 'package:flutter/material.dart';

import './testing.dart';

class MainQuiz {
  String question;
  var answer;

  MainQuiz(this.question, this.answer);
}

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  static const String _title = 'Flutter Code Sample';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: _title,
      home: MyStatefulWidget(),
    );
  }
}

class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  var questionMap = [
    MainQuiz('What is the national Flower?', {
      'answers': [
        {'text': 'Rafflesia', 'score': 0},
        {'text': 'Rose', 'score': 0},
        {'text': 'Bunga Raya', 'score': 1},
        {'text': 'Bunga Telur', 'score': 0}
      ]
    })
  ];

  int number = 0;

  void changeNumHandler() {
    setState(() {
      number += 1;
    });
    print(questionMap[0]); //.map((qna){
    //     return
    //   })) = MainQuiz()
  }

  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Testing'),
      ),
      body: Center(child: Text('$number')),
      backgroundColor: Colors.blue.shade200,
      floatingActionButton: FloatingActionButton(
        onPressed: changeNumHandler,
        tooltip: 'Text Changer',
        child: const Icon(Icons.add),
      ),
    );
  }
}

2 个答案:

答案 0 :(得分:0)

Nvm伙计们,我在这里和那里进行了几分钟的摸索后才想出了办法,就像这样:

var mappedQuestion = questionMap[0].answer['answers'].map((answer){
    return 'This is the ${answer['text']}, and it\'s score is ${answer['score']}';
    });

答案 1 :(得分:0)

我有一些相关的问题,我解决了一种返回我所需信息的方法。只是传递元素的ID和位置。

因此,通过一种方法,您可以看到更加清晰的代码,并将虚拟db分离到实现中。

在简历中:您可能想将每个问题作为某个类的实例,例如Question,以使其更快,更安全,更容易。

List <Question> _allDB = [
    Question(id: 01, text: "Some text", score: 1),
    Question(id: 02, text: "Some other text", score: 0),
]

getElement(id) {
    return [_allDB[id].text, _allDB[id].score]
}