Flutter : Custom Radio Button

前端 未结 4 1219
挽巷
挽巷 2020-12-08 05:44

How can I create a custom radio button group like this in flutter

4条回答
  •  隐瞒了意图╮
    2020-12-08 06:05

    import 'package:flutter/material.dart';
    class CustomRadio extends StatefulWidget {
      @override
      createState() {
        return new CustomRadioState();
      }
    }
    
    class CustomRadioState extends State {
      List sampleData = new List();
    
      @override
      void initState() {
        // TODO: implement initState
        super.initState();
        sampleData.add(new RadioModel(true, 'A',0xffe6194B));
        sampleData.add(new RadioModel(false, 'B',0xfff58231));
        sampleData.add(new RadioModel(false, 'C',0xffffe119));
        sampleData.add(new RadioModel(false, 'D',0xffbfef45));
      }
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            title: new Text("ListItem"),
          ),
          body: new ListView.builder(
            itemCount: sampleData.length,
            itemBuilder: (BuildContext context, int index) {
              return new InkWell(
                splashColor: Colors.blueAccent,
                onTap: () {
                  setState(() {
                    sampleData.forEach((element) => element.isSelected = false);
                    sampleData[index].isSelected = true;
                  });
                },
                child: new RadioItem(sampleData[index]),
              );
            },
          ),
        );
      }
    }
    
    class RadioItem extends StatelessWidget {
      final RadioModel _item;
      RadioItem(this._item);
      @override
      Widget build(BuildContext context) {
        return new Container(
          margin: new EdgeInsets.all(15.0),
          child: new Row(
            mainAxisSize: MainAxisSize.max,
            children: [
              new Container(
                height: 25.0,
                width: 25.0,
                alignment: Alignment.center,
                child:Container(
                height: 15.0,
                width: 15.0,
                  decoration: new BoxDecoration(
                  color:Color(_item.colorCode),
                  borderRadius: const BorderRadius.all(const Radius.circular(15)),
                )
    
                ),
                decoration: new BoxDecoration(
                  color: Colors.transparent,
                  border: new Border.all(
                      width: 3.0,
                      color: _item.isSelected
                          ? Color(_item.colorCode)
                          : Colors.transparent),
                  borderRadius: const BorderRadius.all(const Radius.circular(25)),
                ),
              ),
              new Container(
                margin: new EdgeInsets.only(left: 10.0)
              )
            ],
          ),
        );
      }
    }
    
    class RadioModel {
      bool isSelected;
      final String buttonText;
      final int colorCode;
    
      RadioModel(this.isSelected, this.buttonText,this.colorCode);
    }
    void main() {
      runApp(new MaterialApp(
        home: new CustomRadio(),
      ));
    }
    

    Click here to check out put-> Here

提交回复
热议问题