listview - 颤振中无线电列表的问题
问题描述
我正在尝试从编码的 json 文件中创建 a/b 选项列表。到目前为止,我已经设法正确填充了我的 radiolisttiles,但是当我选择其中一个图块时,它会同时选择它们。我的问题是我做错了什么,我的 radiolisttiles 不能独立运行?
编辑:我想要做的是将单选按钮选择的值放入列表变量(_pick)中:var _pick =data[i].home; 打印(_pick);
这是我的代码:
// radiolisttile 单选按钮 *** /// return new Column( children: [
new Text("GAME: ${data[i].game} ${data[i].away.toUpperCase()} at ${data[i].home.toUpperCase()} "),
RadioListTile<SingleGame>(
subtitle: const Text('record 3- 1'),
title: new Text("${data[i].home.toUpperCase()}"),
controlAffinity: ListTileControlAffinity.trailing,
value: SingleGame.$home,
groupValue: data[i].selectedValue,
activeColor: Colors.green,
onChanged:
(SingleGame value) {
setState(() {
data[i].selectedValue = SingleGame.$home;
var _pick =data[i].home; print(_pick);
//var _selectedIndex=_pick;
//picksList.add(_pick);
});
},
selected: data[i].selectedValue == SingleGame.$home,
),
////
RadioListTile<SingleGame>(
subtitle: const Text('record 3- 1'),
title: new Text("${data[i].away.toUpperCase()}"),
controlAffinity: ListTileControlAffinity.trailing,
value: SingleGame.$away,
groupValue: data[i].selectedValue,
activeColor: Colors.green,
onChanged: (SingleGame value) {
setState(() {
data[i].selectedValue = SingleGame.$away;
var _pick =data[i].away; print(_pick);
// _picksList.add(_pick);
});
},
selected: data[i].selectedValue == SingleGame.$away,
),
解决方案
我对您的代码进行了一些更改,在此您需要一个项目列表,您可以在其中存储模型中的选定值,请检查此代码,在此ModelVO
添加,其中添加了一个字符串,selectedValue
用于设置正确选择的收音机。
import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
class Schedule extends StatefulWidget {
static const String routeName = "/schedule";
ScheduleState createState() => new ScheduleState();
}
List<ModelVO> data = new List();
enum SingleGame { $home, $away }
class ScheduleState extends State<Schedule> {
SingleGame _gamePick = SingleGame.$home;
Future<String> getJson() async {
var response = await http.get(
Uri.encodeFull("https://sheetdb.io/api/v1/red9m0vfm55hy"),
headers: {"Accept": "application/json"});
this.setState(() {
List strList = json.decode(response.body) as List;
data = strList.map((model) => ModelVO.fromJson(model)).toList();
});
print("schedule imported successfully!");
} //
@override
void initState() {
this.getJson();
}
@override
Widget build(BuildContext context) {
var scaffold = new Scaffold(
appBar: new AppBar(
title: new Text('Schedule'),
backgroundColor: Colors.green,
),
body: new ListView.separated(
separatorBuilder: (context, index) => Divider(
color: Colors.green,
),
itemCount: data == null ? 0 : data.length,
itemBuilder: (BuildContext context, i) {
// radiolisttile ***
return new Column(
children: <Widget>[
RadioListTile<SingleGame>(
title: new Text("${data[i].home.toUpperCase()}"),
value: SingleGame.$home,
groupValue: data[i].selectedValue,
onChanged: (SingleGame value) {
setState(() {
data[i].selectedValue = SingleGame.$home;
});
},
selected: data[i].selectedValue == SingleGame.$home,
),
RadioListTile<SingleGame>(
title: new Text("${data[i].away.toUpperCase()}"),
value: SingleGame.$away,
groupValue: data[i].selectedValue,
onChanged: (SingleGame value) {
setState(() {
data[i].selectedValue = SingleGame.$away;
});
},
selected: data[i].selectedValue == SingleGame.$away,
),
],
);
},
),
);
return scaffold;
}
}
class ModelVO {
String game;
String home;
String away;
String winner;
String score;
SingleGame selectedValue;
ModelVO(
{this.game,
this.home,
this.away,
this.winner,
this.score,
this.selectedValue});
factory ModelVO.fromJson(Map<String, dynamic> parsedJson) {
return ModelVO(
game: parsedJson['game'],
home: parsedJson['home'],
away: parsedJson['away'],
winner: parsedJson['winner'],
score: parsedJson['score']);
}
Map toJson() => {
"game": game,
"home": home,
"away": away,
"winner": winner,
"score": score,
"selectedValue": selectedValue,
};
}
推荐阅读
- git - 为什么`git ls-files --modified`在合并冲突中多次显示文件?
- go - 将字节数组转换为字符串数组
- macos - 视觉工作室社区模板位置
- r - 汇总布尔变量矩阵
- android - 移动音乐应用(集成音乐播放器)先在安卓,后来在ios
- android - Ionic Cordova 平台安装错误
- xml - 使用 powershell 读取 xml 节点
- php - PHP不在Ubuntu上显示图像
- java - 使用 io.Cucumber (java8 - testng - spring) 找不到步骤定义
- c# - 调试 PowerPoint VSTO 加载项,默认打开文件