如何在 Flutter 中创建圆形 CheckBox?或者更改 CheckBox 的样式,例如 Flutter 中的选定图像?

W.Y*_*.YJ 22 checkbox flutter

我想创建一个像这样的圆形 CheckBox

在此处输入图片说明

我已经尝试了多种变体,但它们似乎都不起作用。包括我尝试使用 ClipRRect 。

因为代码比较多,这里只选取一部分展示。

new Row(
      children: <Widget>[
        //new ClipRRect(
        // borderRadius: BorderRadius.all(Radius.circular(90.0)),
        //  child:
          new Checkbox(
              tristate: true,
              value: true,
              onChanged: (bool newValue){
                setState(() {

                });
              },
            activeColor: Color(0xff06bbfb),
          ),
       // ),

        new Expanded(
            child: new Text('???????QQ????????????',
              style: new TextStyle(
                  color: Color(0xff797979)
              ),
            )
        ),

      ],
    ),
Run Code Online (Sandbox Code Playgroud)

我是 Flutter 的新手。提前致谢。

Pai*_*d23 51

Flutter 2.2.0开始,Checkbox Material Class中引入了shape属性。

向复选框添加圆角的示例:

Checkbox(
  shape: RoundedRectangleBorder(
    borderRadius: BorderRadius.circular(10)),
)
Run Code Online (Sandbox Code Playgroud)

  • “CheckboxListTile”怎么样?它不会改变复选框的形状,但会改变外衬 (3认同)
  • 这应该是正确的答案 (2认同)

anm*_*ail 28

您可以尝试使用此代码:Round CheckBox

 bool _value = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Circle CheckBox"),
      ),
      body: Center(
          child: InkWell(
        onTap: () {
          setState(() {
            _value = !_value;
          });
        },
        child: Container(
          decoration: BoxDecoration(shape: BoxShape.circle, color: Colors.blue),
          child: Padding(
            padding: const EdgeInsets.all(10.0),
            child: _value
                ? Icon(
                    Icons.check,
                    size: 30.0,
                    color: Colors.white,
                  )
                : Icon(
                    Icons.check_box_outline_blank,
                    size: 30.0,
                    color: Colors.blue,
                  ),
          ),
        ),
      )),
    );
  }
Run Code Online (Sandbox Code Playgroud)

  • 有没有其他方法可以保持CheckBox的原始动画? (7认同)
  • 您的示例未实现可访问性,因此不应在生产应用程序中使用它。 (4认同)

小智 18

Material Design 复选框有一个shape属性,您可以将CircleBorder()设置为它,它将是圆形的。

Checkbox(
      checkColor: Colors.white,
      fillColor: MaterialStateProperty.resolveWith(getColor),
      value: isChecked,
      shape: CircleBorder(),
      onChanged: (bool? value) {
        setState(() {
          isChecked = value!;
        });
      },
    );
Run Code Online (Sandbox Code Playgroud)


Pab*_*rra 14

复制 Material Checkbox 的代码并创建新的 Checkbox 小部件。

在这个小部件中,将变量更改const Radius _kEdgeRadius = Radius.circular(1.0)Radius.circular(100)

在此处输入图片说明

  • 如果有人需要现有的[代码](https://github.com/mashnoon33/circular_check_box/blob/master/lib/circular_check_box.dart),只需复制它或将其添加为插件即可。我不是作者,但我发现如果复制[源代码](https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/material /checkbox.dart) 直接。 (2认同)
  • 这应该作为属性公开。无论如何,不​​错的解决方案。 (2认同)

Dhr*_*rma 13

我很难构建它并想出了这个解决方案。我想有一天像我这样的人会需要它。所以在这里。

ClipRRect(
      clipBehavior: Clip.hardEdge,
      borderRadius: BorderRadius.all(Radius.circular(5)),
      child: SizedBox(
        width: Checkbox.width,
        height: Checkbox.width,
        child: Container(
          decoration: new BoxDecoration(
            border: Border.all(
              width: 1,
            ),
            borderRadius: new BorderRadius.circular(5),
          ),
          child: Theme(
            data: ThemeData(
              unselectedWidgetColor: Colors.transparent,
            ),
            child: Checkbox(
              value: isWinnerTakesAll,
              onChanged: (state) =>
                  setState(() => isWinnerTakesAll = !isWinnerTakesAll),
              activeColor: Colors.transparent,
              checkColor: CommonColors.checkBoxColor,
              materialTapTargetSize: MaterialTapTargetSize.padded,
            ),
          ),
        ),
      ),
    ),
Run Code Online (Sandbox Code Playgroud)

我希望这能解决你的问题!欢迎提出任何问题。

使用主题小部件的原因 如果没有主题小部件,复选框的原始方框处于未选中状态,我将其删除并使其透明。


gg1*_*g11 9

请注意:此软件包已停产!

您可以添加一个简单的包来保留复选框的功能和动画:https : //pub.dev/packages/circular_check_box

安装导入包后的实现:

CircularCheckBox(
          value: someBooleanValue,
          materialTapTargetSize: MaterialTapTargetSize.padded,
          onChanged: (bool x) {
          someBooleanValue = !someBooleanValue;
          }
        ),
Run Code Online (Sandbox Code Playgroud)


Ham*_*bah 8

像这样设置主题:

 Theme(
  data: ThemeData(
    checkboxTheme: CheckboxThemeData(
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(25),
      ),
    ),
  ),
);      
Run Code Online (Sandbox Code Playgroud)


Has*_*jmi 5

Flutter 2.2.1添加了 shape 属性。所以很容易添加改变复选框的形状。

在这里我创建了一个圆形复选框小部件:

import 'package:flutter/material.dart';

class CircularCheckbox extends StatelessWidget {
  final bool? value;
  final ValueChanged<bool?>? onChanged;
  const CircularCheckbox({Key? key, required this.value, required this.onChanged}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Transform.scale(
      scale: 1.3,
      child: Checkbox(
        value: value,
        onChanged: onChanged,
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以根据您的设计缩放复选框。

对于主题复选框:更新 MaterialApp 的 themeData,如下所示:

MaterialApp(
theme: ThemeData(toggleableActiveColor: colorScheme.primary,
             checkboxTheme: Theme.of(context).checkboxTheme.copyWith(
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(20),
              ),
              side: BorderSide(
                  width: 1.5, color:
                  Theme.of(context).unselectedWidgetColor),
              splashRadius: 0),)
)
Run Code Online (Sandbox Code Playgroud)

通过应用主题,您将获得一个漂亮的圆形复选框:

在此输入图像描述

  • 不,这是不可能的。唯一的解决方案是使用“Checkbox”小部件源代码并将其用于您自己的带有内部填充的自定义复选框,我不推荐这样做。 (2认同)