如何在 ListView.builder 中使用 RadioListTile?
Posted
技术标签:
【中文标题】如何在 ListView.builder 中使用 RadioListTile?【英文标题】:How to use RadioListTile inside of a ListView.builder? 【发布时间】:2019-06-15 09:21:46 【问题描述】:我正在尝试制作一个可选择的列表视图。
我选择了RadioListTile
,但它不需要与Radios
一起使用,我会很高兴在点击该项目时ListTile
的背景颜色发生变化。
所以在我当前的代码中,我有RadioListTiles
,但它不检查水龙头,我认为它可以检查多个,因为它在ListView.builder
,但我不知道,因为我新来的颤振,它不工作。
代码如下:
ListView.builder(
scrollDirection: Axis.vertical,
itemCount: items.length,
itemBuilder: (context, index)
return RadioListTile<LoadList>(
selected: isSelected,
groupValue: radiolist,
value: items[index],
onChanged: (LoadList value)
radiolist.GetHours(value.hours);
print("CurrentSelected $index");
setState(()
isSelected = true;
);
,
title: new Text(index),
);
,
),
【问题讨论】:
什么是 loadlist , radiolist, items 请告诉我。我也想做,但做不到 【参考方案1】:Radio 在 Flutter 中其实非常简单。基本上,它们是一个项目列表,每个项目都有一个值,并且有一个共享的选定值。状态维护共享的选定值。
基本上,您需要做的就是跟踪所选值并在按下列表项时更改它。对于每个项目,您检查共享的选定值是否等于项目的值。
RadioListItem 只是通过为您做相等部分来帮助一点点。这应该可以满足您的需求。
import 'package:flutter/material.dart';
main() => runApp(MyApp());
class MyApp extends StatefulWidget
@override
MyAppState createState()
return new MyAppState();
class MyAppState extends State<MyApp>
@override
Widget build(BuildContext context)
return MaterialApp(
home: Scaffold(
body: RadioListBuilder(
num: 20,
),
),
);
class RadioListBuilder extends StatefulWidget
final int num;
const RadioListBuilder(Key key, this.num) : super(key: key);
@override
RadioListBuilderState createState()
return RadioListBuilderState();
class RadioListBuilderState extends State<RadioListBuilder>
int value;
@override
Widget build(BuildContext context)
return ListView.builder(
itemBuilder: (context, index)
return RadioListTile(
value: index,
groupValue: value,
onChanged: (ind) => setState(() => value = ind),
title: Text("Number $index"),
);
,
itemCount: widget.num,
);
【讨论】:
感谢您的回答!这与我的代码非常相似,但是我尝试了它,如果我在onChanged
中打印它的打印,带有正确的索引,但Radio
没有检查,与我的代码相同......我怎么能点击时更改Radio
的颜色?
检查你的代码中是否有这个“groupValue: value”
嗨@rmtmckenzie,如果你能解决我的问题***.com/questions/68208975/…【参考方案2】:
检查下面的代码示例以动态使用单选按钮。
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: _options
.map((e) => new Column(
children: [
Container(
margin: EdgeInsets.symmetric(vertical: 5),
decoration: BoxDecoration(
border: Border.all(
width: 2,
),
borderRadius: BorderRadius.circular(12.0),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: e.subOptions
.map((x) => RadioListTile(
value: x.optionBit, //set this to parent object of the
//group which determines the selected option.
groupValue: e.optionBit,
onChanged: (value)
setState(()
e.optionBit = value;
);
,
title: new Text(
x.text,
),
))
.toList(),
),
)
],
))
.toList(),
),
【讨论】:
以上是关于如何在 ListView.builder 中使用 RadioListTile?的主要内容,如果未能解决你的问题,请参考以下文章
如何使 ListView.Builder 的项目出现在屏幕宽度内?
如果数据发生变化,颤动如何更新 Listview.builder
如何在 ListView.Builder 中右对齐卡片中的行?
如何在颤动中使我的文本与 listview.builder 一起滚动
如何使用 StreamBuilder 将数据从 firebase firestore 检索到颤振中,并使用 ListView.builder 显示值?