如何在 flutter 中禁用 RadioListTile 小部件

How to make RadioListTile widget disabled in flutter

我在我的应用程序中使用 RadioListTile 小部件,我想在满足某些条件后禁用更改值。并且没有像 Radio 小部件中那样的 isButtonDisabled 道具。我怎样才能禁用这个小部件(阻止值改变)?

当我写上面的语句时,我想通了,而且很简单。 所以我 post 这个问题会在下面回答。

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',
              ),
            ),
          ),
        )
      ],
    );
  }
}

我想你已经从代码中找到了答案。 解决方案是在我的例子中声明 bool 值 evaluate 然后单击按钮使该值变为真并使用该值设置状态并在 RadioListTileonChanged 道具上添加此代码:

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

希望对您有所帮助!

只要 onChange 为空,组件就会被禁用。你应该可以做一些事情 link 这个:

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

我也会重命名 evaluate 以使其更容易理解,例如 alreadyProvidednotAlloweddisabled 或任何有意义的东西,最重要的是真正代表为什么它不能改变。

最后它可能看起来像:

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