Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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,我正在创建一个测验应用程序,需要根据特定问题的选项数量动态显示mcq选项 例如: 现在按钮的代码如下: final quizOptions=容器( 宽度:MediaQuery.of(context).size.width, 儿童:中心( 子:列( 儿童:[ SimpleRoundButton( 背景颜色:颜色。来自RGBO(58,66,86,1.0), buttonText:Text(问题[questionNum]。选项[0], 样式:TextStyle( 颜色:颜色。白色 ), ), tex

我正在创建一个测验应用程序,需要根据特定问题的选项数量动态显示mcq选项

例如:

现在按钮的代码如下:

final quizOptions=容器(
宽度:MediaQuery.of(context).size.width,
儿童:中心(
子:列(
儿童:[
SimpleRoundButton(
背景颜色:颜色。来自RGBO(58,66,86,1.0),
buttonText:Text(问题[questionNum]。选项[0],
样式:TextStyle(
颜色:颜色。白色
),
),
textColor:Colors.white,
按下:(){},
),
SimpleRoundButton(
背景颜色:颜色。来自RGBO(58,66,86,1.0),
buttonText:Text(问题[questionNum]。选项[1],
样式:TextStyle(
颜色:颜色。白色
),
),
textColor:Colors.white,
按下:(){},
),
],
),
),
);
如你所见,我能做的就是“修复”2个按钮。有没有一种方法可以根据特定问题的选项数量动态添加按钮

我有一个名为
问题的列表,它是一个问题列表(这是一个类):

课堂提问{
字符串标题;
列出选项;
字符串图像路径;
问题:(
{this.title,this.options,this.imagePath,});
}
//例如:
问题:(
标题:“无人机的飞行速度有多快?”,
选项:['80km/h','90km/h','100km/h'],
imagePath:“资产/图像/无人机1.jpg”,
)

您应该遍历您的选项来创建
SimpleRoundButton

...................................
    child: Column(
              children: questions[questionNum].options.map<Widget>(
                (option) =>  SimpleRoundButton(
                    backgroundColor: Color.fromRGBO(58, 66, 86, 1.0),
                    buttonText: Text(option, 
                        style: TextStyle(
                            color: Colors.white
                        ),
                    ),
                    textColor: Colors.white,
                    onPressed: (){},
                ),
           ).toList(),
.........................
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
子:列(
儿童:问题[questionNum].options.map(
(选项)=>SimpleRoundButton(
背景颜色:颜色。来自RGBO(58,66,86,1.0),
buttonText:Text(选项,
样式:TextStyle(
颜色:颜色。白色
),
),
textColor:Colors.white,
按下:(){},
),
).toList(),
.........................

我制作了一个完整的示例,用于在屏幕上显示和隐藏小部件,您也可以看到它在线运行

导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
列表项=[
{“标题”:“按钮一”,“颜色”:50},
{“标题”:“按钮二”,“颜色”:100},
{“标题”:“按钮三”,“颜色”:200},
{“标题”:“不显示”,“颜色”:0,“隐藏”:“1”},
];
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:appBar(标题:文本(“动态小部件-列表”),背景颜色:Colors.blue),
正文:专栏(
儿童:[
居中(子项:buttonBar()),
文本(“单击按钮隐藏它”),
]
)
)
);
}
小部件按钮栏(){
返回列(
子项:item.where((e)=>e['hide']!=“1”).map((文档){
返回新的扁平按钮(
子项:新文本(文档['title']),
颜色:color.fromARGB(文档['color'],0,100,0),
已按下:(){
设置状态(){
打印(“单击${document['title']}隐藏它”);
最终平铺=项目.firstWhere((e)=>e['title']==文档['title']);
平铺['hide']='1';
});
},
);
}
).toList());
}
}
也许它对某人有帮助。如果它对您有用,请单击向上箭头让我知道。谢谢

是的,这很有效,谢谢:)),我必须使用
.map(
才能使它工作,因为我遇到了以下错误:
import 'package:flutter/material.dart';

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

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

class _MyAppState extends State<MyApp> {
  List item = [
    {"title": "Button One", "color": 50},
    {"title": "Button Two", "color": 100},
    {"title": "Button Three", "color": 200},
    {"title": "No show", "color": 0, "hide": '1'},
  ];

  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Dynamic Widget - List<Widget>"),backgroundColor: Colors.blue),
        body: Column(
          children: <Widget>[
            Center(child: buttonBar()),
            Text('Click the buttons to hide it'),
          ]
        )
      )
    );
  }

  Widget buttonBar() {
    return Column(
      children: item.where((e) => e['hide'] != '1').map<Widget>((document) {
        return new FlatButton(
          child: new Text(document['title']),
          color: Color.fromARGB(document['color'], 0, 100, 0),
          onPressed: () {
            setState(() {
              print("click on ${document['title']} lets hide it");
              final tile = item.firstWhere((e) => e['title'] == document['title']);
              tile['hide'] = '1';
            });
          },
        );
      }
    ).toList());
  }
}