如何在Flutter中禁用RadioListTile小部件

11

我正在使用RadioListTile小部件,希望在满足某些条件后禁止更改值。但是,与Radio小部件不同,没有isButtonDisabled属性。如何禁用此小部件(停止更改值)?

在我撰写上述声明时,我想到了解决方法,它很容易。因此,我将发布问题并在下面回答。

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,
          isThreeLine: false,
          title: Text(
            'radio 2',
            style: TextStyle(
              fontWeight: FontWeight.bold,
            ),
          ),
          groupValue: value,
          onChanged: (value) => evaluate ? null : value = 1,
          activeColor: Colors.green,
        ),
        InkWell(
          onTap: () {
            evaluate = true;
          },
          child: Container(
            child: Center(
              child: Text(
                'Submit answer',
              ),
            ),
          ),
        )
      ],
    );
  }
}
2个回答

14

onChange 为 null 时,该组件将变为禁用状态。您可以像这样进行替代:

onChange 为空时,组件将变为禁用状态。您可以尝试这样的替代方式:

onChanged: evaluate ? null : (value) => value = 0,

我还会将evaluate重命名为更容易理解的名称,比如alreadyProvidednotAlloweddisabled或其他有意义的名称。最重要的是要真正代表它不能被更改的原因。

最终可能看起来像这样:

onChanged: alreadyProvided ? null : (value) => value = 0,

1
我想你已经从代码中得出了答案。解决方案是在我的情况下声明一个布尔值evaluate,然后在按钮点击时将该值设置为true并使用该值进行setstate,在RadioListTileonChanged属性中添加以下代码:
onChanged: (value) => evaluate ? null : value = 0,

希望这对您有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接