Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振-显示和跟踪动态问题答案的最佳方式_Flutter_Dart - Fatal编程技术网

Flutter 颤振-显示和跟踪动态问题答案的最佳方式

Flutter 颤振-显示和跟踪动态问题答案的最佳方式,flutter,dart,Flutter,Dart,我对飞镖和飞镖还不熟悉,有点精神障碍 从JSON源代码中,我可以下载一系列问题,这些问题可能需要多选、单选、文本或文件上传类型的答案(等等)。问题本身基于用户事先做出的选择,每个问题对象都有一个值,告诉我问题的类型 显示问题(每个屏幕一个问题,带有前进和后退按钮)并跟踪答案的最佳方式是什么?我是否应该为每种类型的问题创建一个类/小部件,并将答案和问题ID保存在地图中?最好在initState中下载问题列表,然后在build方法中获取问题类型,并使用if/else或switch语句调用正确的小部件

我对飞镖和飞镖还不熟悉,有点精神障碍

从JSON源代码中,我可以下载一系列问题,这些问题可能需要多选、单选、文本或文件上传类型的答案(等等)。问题本身基于用户事先做出的选择,每个问题对象都有一个值,告诉我问题的类型

显示问题(每个屏幕一个问题,带有前进和后退按钮)并跟踪答案的最佳方式是什么?我是否应该为每种类型的问题创建一个类/小部件,并将答案和问题ID保存在地图中?最好在initState中下载问题列表,然后在build方法中获取问题类型,并使用if/else或switch语句调用正确的小部件


只是寻找最好的方法。

最好的方法是有一个问题列表和另一个答案列表以及当前问题的索引。单击“下一步”按钮时,索引将以setState方法更新,从而更新屏幕。请参见此示例:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Scaffold(body: Center(child: Questions())));
  }
}

class Questions extends StatefulWidget {
  @override
  _QuestionsState createState() => _QuestionsState();
}

class _QuestionsState extends State<Questions> {
  var _indexQuestion = 0;

  var _questions = ['Question 1', 'Question 2'];
  var _answers = [
    ['Option 1', 'Option 2'],
    ['Opt 1', 'Opt 2'],
  ];

  _next() {
    setState(() {
      var lastIndex = _questions.length - 1;
      if (_indexQuestion < lastIndex) {
        _indexQuestion++;
      } else {
        // Is the last question
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text(_questions[_indexQuestion]),
        for (var answer in _answers[_indexQuestion]) Text(answer),
        FlatButton(
          color: Colors.blueGrey,
          child: Text('next'),
          onPressed: _next,
        )
      ],
    );
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料APP(家:脚手架(身体:中心(孩子:问题()));
}
}
类问题扩展了StatefulWidget{
@凌驾
_QuestionsState createState()=>\u QuestionsState();
}
类_QuestionsState扩展状态{
var_indexQuestion=0;
var_questions=[‘问题1’、‘问题2’];
var_答案=[
[‘方案一’、‘方案二’],
[‘选择1’、‘选择2’],
];
_下一个(){
设置状态(){
var lastIndex=_questions.length-1;
如果(_indexQuestion
感谢您的回复。这就是我到目前为止所走的路线,所有的事情看起来都像它应该做的那样。我只是有大量的重构要做,因为在我看来,我的UI文件中有太多的业务逻辑。