Flutter 如何在颤振中为CustomRadioButton赋予形状?

Flutter 如何在颤振中为CustomRadioButton赋予形状?,flutter,dart,Flutter,Dart,如何在颤振中为CustomRadioButton赋予形状? 我发现它有一个customshape属性,它将采用布尔值。但我想给一个形状根据我的要求,也希望按钮应该是一个颜色和图标填充。我该怎么做?请给我任何建议 您可以使用两个容器,并使用boxdecorator为其指定形状,通过在墨水池上包装容器并为逻辑设置属性onTap,为逻辑部分使用自定义侦听器,而不是使用自定义单选按钮。如第一个答案中所述。下面是一个示例小部件 import 'package:flutter/material.dart';

如何在颤振中为CustomRadioButton赋予形状? 我发现它有一个customshape属性,它将采用布尔值。但我想给一个形状根据我的要求,也希望按钮应该是一个颜色和图标填充。我该怎么做?请给我任何建议


您可以使用两个容器,并使用boxdecorator为其指定形状,通过在墨水池上包装容器并为逻辑设置属性onTap,为逻辑部分使用自定义侦听器,而不是使用自定义单选按钮。

如第一个答案中所述。下面是一个示例小部件

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        body: Center(
          child: GenderSwitch(
            onToggle: (Gender gender) {
              print('>>>>>>>>>> Gender = $gender');
            },
          ),
        ),
      ),
    );
  }
}

enum Gender {
  MALE,
  FEMALE,
}

class GenderSwitch extends StatefulWidget {
  GenderSwitch({
    @required this.onToggle,
    this.initialState = Gender.MALE,
    this.backgroundColor = Colors.black38,
    this.selectedColor = Colors.blue,
    this.selectedTextColor = Colors.white,
    this.unselectedTextColor = Colors.black87,
  });

  final ValueChanged<Gender> onToggle;
  final Gender initialState;
  final Color backgroundColor;
  final Color selectedColor;
  final Color selectedTextColor;
  final Color unselectedTextColor;

  @override
  _GenderSwitch createState() => _GenderSwitch();
}

class _GenderSwitch extends State<GenderSwitch> {
  Gender _gender;

  @override
  void initState() {
    super.initState();
    _gender = widget.initialState;
  }

  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisSize: MainAxisSize.min,
      children: <Widget>[
        _buildButton(Gender.MALE, Icons.add, 'MALE'),
        const SizedBox(width: 10),
        _buildButton(Gender.FEMALE, Icons.ac_unit, 'FEMALE'),
      ],
    );
  }

  Widget _buildButton(
    Gender value,
    IconData icon,
    String text,
  ) =>
      FlatButton(
        onPressed: () {
          setState(() => _gender = value);
          widget.onToggle(value);
        },
        shape: const RoundedRectangleBorder(
          borderRadius: BorderRadius.all(Radius.circular(10)),
          side: BorderSide(
            color: Colors.black45,
            width: 1,
          ),
        ),
        color: _gender == value ? widget.selectedColor : null,
        child: Row(
          children: <Widget>[
            Icon(icon),
            const SizedBox(width: 10),
            Text(
              text,
              style: TextStyle(
                color: _gender == value
                    ? widget.selectedTextColor
                    : widget.unselectedTextColor,
              ),
            ),
          ],
        ),
      );
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主题:主题数据(
主样本:颜色。蓝色,
),
家:脚手架(
正文:中(
孩子:性别女巫(
onToggle:(性别){
打印(“>>>>>性别=$SEXT”);
},
),
),
),
);
}
}
枚举性别{
男,,
女,,
}
类GenderSwitch扩展StatefulWidget{
性别女巫({
@需要这一点,
this.initialState=Gender.MALE,
this.backgroundColor=Colors.black38,
this.selectedColor=Colors.blue,
this.selectedTextColor=Colors.white,
this.unselectedTextColor=Colors.black 87,
});
最终价值因变更而变更;
最终性别国家;
最终颜色背景色;
最终颜色选择颜色;
选择最终颜色TEXTCOLOR;
最终颜色未选择TextColor;
@凌驾
_GenderSwitch createState();
}
类_GenderSwitch扩展状态{
性别(性别);;
@凌驾
void initState(){
super.initState();
_性别=widget.initialState;
}
@凌驾
小部件构建(构建上下文){
返回行(
mainAxisSize:mainAxisSize.min,
儿童:[
_buildButton(Gender.MALE,Icons.add,'MALE'),
常量大小框(宽度:10),
_buildButton(Gender.FEMALE,Icons.ac_单位,“FEMALE”),
],
);
}
小部件构建按钮(
性别价值,
Iconda图标,
字符串文本,
) =>
扁平按钮(
已按下:(){
设置状态(()=>_性别=值);
widget.onToggle(值);
},
形状:const RoundedRectangleBorder(
borderRadius:borderRadius.all(半径圆形(10)),
边线(
颜色:颜色。黑色45,
宽度:1,
),
),
颜色:_性别==值?小部件。selectedColor:null,
孩子:排(
儿童:[
图标(图标),
常量大小框(宽度:10),
正文(
文本,
样式:TextStyle(
颜色:_性别==值
?widget.selectedTextColor
:widget.unselectedTextColor,
),
),
],
),
);
}

你能提供你的单选按钮设计吗?@rickimaru,我已经分享了。你可以听从@Jay Dangar的建议。如果你不知道怎么做。我可以给你一个示例代码。如果你能给出@rickimaru@abhipsabiswal,那将是我的荣幸。祝你好运