问题描述
我在我的应用程序中使用 RadioListTile
小部件,我想在满足某些条件后禁用更改值。并且没有 isButtondisabled
道具,就像在 Radio
小部件中一样。如何禁用此小部件(停止更改值)?
当我写下上面的语句时,我想通了,这很容易。 所以我会发布问题并在下面回答。
import 'package:Flutter/material.dart';
class Body extends StatefulWidget {
@override
_BodyState createState() => _BodyState();
}
class _BodyState extends State<Body> {
bool evaluate = false;
int value;
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,mainAxisAlignment: MainAxisAlignment.start,children: [
RadioListTile<int>(
value: 0,isThreeLine: false,title: Text(
'radio 1',style: TextStyle(
fontWeight: FontWeight.bold,),groupValue: value,onChanged: (value) => evaluate ? null : value = 0,activeColor: Colors.green,RadioListTile<int>(
value: 1,title: Text(
'radio 2',onChanged: (value) => evaluate ? null : value = 1,InkWell(
onTap: () {
evaluate = true;
},child: Container(
child: Center(
child: Text(
'Submit answer',)
],);
}
}
解决方法
每当 onChange
为空时,组件将被禁用。你应该可以做点什么来链接这个:
onChanged: evaluate ? null : (value) => value = 0,
我还会重命名 evaluate
以使其更易于理解,例如 alreadyProvided
、notAllowed
、disabled
或任何有意义的东西,最重要的是真正代表为什么它不能改变。
最后它可能看起来像:
onChanged: alreadyProvided ? null : (value) => value = 0,
,
我想你已经从代码中找到了答案。
解决方案是在我的情况下声明 bool 值 evaluate
然后单击按钮使该值变为 true 并使用该值设置状态并在 onChanged
的 RadioListTile
道具上添加以下代码:>
onChanged: (value) => evaluate ? null : value = 0,
希望这对您有帮助!