Flutter:NoSuchMethodError:在null上调用了吸气剂“选择”

时间:2019-02-23 09:34:21

标签: flutter

我有一个单独的班级,它在首页上的单选按钮中布置了一个单独的班级。 无线电等级: 以下是来自TYPE枚举的数据,其中包含两个常规和非常规值: TYPE _dtype = TYPE.regular;

Container(
      child: Row(
        children: <Widget>[
          Container(
            width: 180.0,
            child: RadioListTile<TYPE>(
              title: Text(
                'Regular' ,
                style: TextStyle(
                  fontSize: 20.0,
                ),
              ),
              value: TYPE.regular,
              groupValue: _dtype,
              onChanged: (TYPE value) { setState(() { _dtype = value; }); },
            ),
          ),


          Container(
            width: 186.0,

            child:RadioListTile<TYPE>(
              title: const Text('Non Regular',
                style: TextStyle(
                  fontSize: 20.0,
                ),
              ),
              value: TYPE.nonregular,
              groupValue: _dtype,
              onChanged: (TYPE value) { setState(() { _dtype = value; }); },
            ),
          ),
        ],
      ),
    )

我有几个问题:

  1. 是否可以自动调整收音机的尺寸文字在吗?由于没有提供width属性,因此收音机不会出现在屏幕上。

  2. 一旦选择了一个收音机,我想将值..._ dtype传递给主页类以进行一些工作。我该怎么办?

1 个答案:

答案 0 :(得分:0)

  1. Container替换为Expanded,然后删除width属性。这将自动将行的每个子级设置为占用相等的空间。

要说明为什么这样做是必要的,RadioListTile将扩展为占用尽可能多的空间,如果未指定大小,则Container将与其子项一样大。由于Row具有无限的宽度,并且与您的RadioListTile之间没有宽度限制,因此它试图扩展以占据无限的宽度,因此不会呈现。 Expanded会在此处自动计算并应用宽度,因此无论屏幕大小如何,它都能解决问题并正常工作。

  1. 将回调函数传递给新的小部件。 Flutter通常更喜欢沿树发送数据而不是沿树发送数据,因此,向按钮发送向下回调函数比向父窗口小部件处理发送数据要容易得多,并且最终效果相同。
class YourRadioGrid extends StatelessWidget {
  void Function(TYPE) doSomething = (t) {};

  YourRadioGrid({this.doSomething});

  ...

  onPressed: (TYPE value) {
    doSomething(value);
  }
}

// Then wherever in your homepage's build method this gets added:

YourRadioGrid(doSomething: (value) { /*handle the new value*/ })