目前,我想使用SwitchListTile Widget分成1个单独的Widget多次重复使用,但当我点击它时,什么也没有发生。
下面是我的代码:
class SwitchScreen extends StatefulWidget {
const SwitchScreen({super.key});
@override
State<SwitchScreen> createState() => _SwitchScreenState();
}
class _SwitchScreenState extends State<SwitchScreen> {
bool check = false;
Widget _buildSwitchListTile(String title, String description, bool currentValue) {
return SwitchListTile(
title: Text(title),
value: currentValue,
subtitle: Text(description),
onChanged:(newValue) {setState(() { currentValue = newValue; });},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Filters'),
),
body: Column(
children: [
Container(
padding: const EdgeInsets.all(20),
child: Text(
'select',
),
),
Expanded(
child: ListView(
children: [
_buildSwitchListTile(
'text',
'description',
check,
),
],
),
)
],
),
);
}
}
我尝试修复它,并成功地通过传递一个函数到我的自定义Widget,如下面的代码:
class SwitchScreen extends StatefulWidget {
const SwitchScreen({super.key});
@override
State<SwitchScreen> createState() => _SwitchScreenState();
}
class _SwitchScreenState extends State<SwitchScreen> {
bool check = false;
Widget _buildSwitchListTile(String title, String description, bool currentValue, Function(bool) updateValue) {
return SwitchListTile(
title: Text(title),
value: currentValue,
subtitle: Text(description),
onChanged: updateValue,
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Filters'),
),
body: Column(
children: [
Container(
padding: const EdgeInsets.all(20),
child: Text(
'select',
),
),
Expanded(
child: ListView(
children: [
_buildSwitchListTile(
'text',
'description',
check,
(newValue) {
setState(() {
check = newValue;
});
},
),
),
],
),
)
],
),
);
}
}
它按我想的那样工作了,但我真的不知道它为什么会这样。谁能给我解释一下!
2条答案
按热度按时间epggiuax1#
您可以在新的
Stateful class
中使用SwitchListTile
并传递3个参数。如果你想知道每个SwitchListTile
中currentValue
的状态,也可以添加typedef
回调。并调用父Widget中的
SwitchClass
。x0fgdtte2#
更新代码:
使用此代码可使用多个SwitchListTile