如何创建一个渐变按钮的图像和文字在Flutter?

h7appiyu  于 2023-02-25  发布在  Flutter
关注(0)|答案(2)|浏览(208)

我正在做一个Flutter项目,我想创建一个渐变背景的按钮,包括图像和文本。但是,我不知道如何实现这一点。
我试着把它做成这个样子:

我试过使用MaterialButton小部件并将其shape属性设置为带有渐变颜色的RoundedRectangleBorder,但我不知道如何将图像和文本添加到按钮中。
有人可以请给我一个例子,如何创建一个渐变按钮的图像和文本在Flutter?另外,有没有办法自定义按钮的渐变颜色?

lnvxswe2

lnvxswe21#

只需使用Stack小部件和3个子部件(从最低到最高):

  1. Image
  2. Containerdecoration.gradient的半透明颜色
  3. Text
    如果您愿意,可以将整个Stack包裹在ClipRRect中以添加圆角。
    要添加按钮行为,可以使用自定义GestureDetectorInkWell
mpbci0fu

mpbci0fu2#

所需代码:

class ReusableButton extends StatelessWidget {
  const ReusableButton({
    super.key,
    required this.onTap,
    required this.imageUrl,
    required this.title,
    required this.gradientColors,
  });

  final void Function() onTap;
  final String imageUrl;
  final String title;
  final List<Color> gradientColors;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.only(left: 16),
      child: GestureDetector(
        onTap: onTap,
        child: Stack(
          children: [
            SizedBox(
              width: 200,
              height: 120,
              child: Image.network(
                imageUrl,
                fit: BoxFit.cover,
              ),
            ),
            Container(
              decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(5),
                gradient: LinearGradient(
                  colors: gradientColors,
                ),
              ),
              width: 200,
              height: 120,
              alignment: Alignment.center,
              child: Text(
                title,
                style: const TextStyle(
                  fontSize: 20,
                  color: Colors.white,
                  fontWeight: FontWeight.bold,
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

用法:

Row(
  children: [
    ReusableButton(
      onTap: () {},
      imageUrl: 'Your image URL...',
      title: 'Your title...',
      gradientColors: <Color>[
        Colors.red.withOpacity(0.7),
        Colors.green.withOpacity(0.7),
        Colors.blue.withOpacity(0.7),
      ],
    ),
    ReusableButton(
      onTap: () {},
      imageUrl: 'Your image URL...'',
      title: 'Your title...',
      gradientColors: <Color>[
        Colors.red.withOpacity(0.7),
        Colors.green.withOpacity(0.7),
      ],
    ),
    ReusableButton(
      onTap: () {},
      imageUrl: 'Your image URL...'',
      title: 'Your title...',
      gradientColors: <Color>[
        Colors.blue.withOpacity(0.7),
        Colors.blue.withOpacity(0.7),
      ],
    ),
  ],
),

相关问题