首页 > 解决方案 > 我想在 RadioListTile 中选择特定的收音机项目,

问题描述

如果我选择第一个索引 RadioListTile,则选择扩展 Tile 中的所有第一个索引这是我的问题,在这里我想选择特定的收音机列表并将索引添加到列表

class Addon extends StatefulWidget {
 @override
_AddonState createState() => _AddonState();
}  class _AddonState extends State<Addon> {
         List addonItem = ["Cool Drinks", "Extra Sauce"];
          int dummy;
      @override
       Widget build(BuildContext context) {
          return Scaffold(
     body: Container(
        child: ListView.builder(
        dragStartBehavior: DragStartBehavior.down,
        physics: ScrollPhysics(),
        shrinkWrap: true,
        itemCount: addonItem.length,
        itemBuilder: (context, index) {
          return ExpansionTile(
            initiallyExpanded: false,
            title: Text(
              addonItem[index],
            ),
            children: [
              for (int i = 0; i < 3; i++)
                RadioListTile(
                  value: i,
                  title: Text("item $i"),
                  groupValue: dummy,
                  activeColor: Theme.of(context).primaryColor,
                  onChanged: (val) {
                    print(val);
                    setState(() {
                      dummy = val;
                    });
                  },
                )
            ],
          );
        }),
  ),
);

} }

标签: flutterdart

解决方案


问题是您正在使用int dummy;两个按钮列表的选定值,您可以使用两个虚拟值并将条件添加到子项的呈现中,ExpansionTile如下所示:

class Addon extends StatefulWidget {
  @override
  _AddonState createState() => _AddonState();
}

class _AddonState extends State<Addon> {
  List addonItem = ["Cool Drinks", "Extra Sauce"];
  int dummy1;
  int dummy2;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: ListView.builder(
          physics: ScrollPhysics(),
          shrinkWrap: true,
          itemCount: addonItem.length,
          itemBuilder: (context, index) {
            return ExpansionTile(
              initiallyExpanded: false,
              title: Text(
                addonItem[index],
              ),
              children: [
                if (addonItem[index] == 'Cool Drinks') 
                  for (int i = 0; i < 3; i++)
                  RadioListTile(
                    value: i,
                    title: Text("item $i"),
                    groupValue: dummy1,
                    activeColor: Theme.of(context).primaryColor,
                    onChanged: (val) {
                      print(val);
                      setState(
                        () {
                          dummy1 = val;
                        },
                      );
                    },
                  ), 
                if (addonItem[index] == 'Extra Sauce') 
                for (int i = 0; i < 3; i++)
                  RadioListTile(
                    value: i,
                    title: Text("item $i"),
                    groupValue: dummy2,
                    activeColor: Theme.of(context).primaryColor,
                    onChanged: (val) {
                      print(val);
                      setState(
                        () {
                          dummy2 = val;
                        },
                      );
                    },
                  )
              ],
            );
          },
        ),
      ),
    );
  }
}

这将检查值是否是您正在访问的索引addonItem,如果该值是'Cool Drinks'您使用其中一个虚拟值,如果索引是'Extra Sauce'您使用另一个值,这确保您不会为两个列表共享相同的值。

这仅在您没有将值动态添加到 addonItem 列表时才有效。


推荐阅读