如何在 ListView.builder 中使用 RadioListTile?
How to use RadioListTile inside of a ListView.builder?
我正在尝试创建一个可选择的列表视图。
我选择了 RadioListTile
,但它不需要与 Radios
一起使用,我很乐意在点击项目时改变 ListTile
的背景颜色。
所以在我当前的代码中,我有 RadioListTiles
,但它不会在点击时检查,我认为它会让检查不止一个,因为它在 ListView.builder
中,但我不知道因为我是 flutter 的新手,所以它不起作用。
代码如下:
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),
);
},
),
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,
);
}
}
检查下面的代码示例以动态使用单选按钮。
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(),
),
我正在尝试创建一个可选择的列表视图。
我选择了 RadioListTile
,但它不需要与 Radios
一起使用,我很乐意在点击项目时改变 ListTile
的背景颜色。
所以在我当前的代码中,我有 RadioListTiles
,但它不会在点击时检查,我认为它会让检查不止一个,因为它在 ListView.builder
中,但我不知道因为我是 flutter 的新手,所以它不起作用。
代码如下:
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),
);
},
),
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,
);
}
}
检查下面的代码示例以动态使用单选按钮。
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(),
),