enter image description here

我想用这些白色圆圈做一个凸起的按钮.

推荐答案

尝尝这个!

demo

我已经添加了5个圆,您可以添加更多.用InkResponse代替RaisedButton.

import 'package:flutter/material.dart';

void main() {
  runApp(new MaterialApp(home: new ExampleWidget()));
}

class ExampleWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    Widget bigCircle = new Container(
      width: 300.0,
      height: 300.0,
      decoration: new BoxDecoration(
        color: Colors.orange,
        shape: BoxShape.circle,
      ),
    );

    return new Material(
      color: Colors.black,
      child: new Center(
        child: new Stack(
          children: <Widget>[
            bigCircle,
            new Positioned(
              child: new CircleButton(onTap: () => print("Cool"), iconData: Icons.favorite_border),
              top: 10.0,
              left: 130.0,
            ),
            new Positioned(
              child: new CircleButton(onTap: () => print("Cool"), iconData: Icons.timer),
              top: 120.0,
              left: 10.0,
            ),
            new Positioned(
              child: new CircleButton(onTap: () => print("Cool"), iconData: Icons.place),
              top: 120.0,
              right: 10.0,
            ),
            new Positioned(
              child: new CircleButton(onTap: () => print("Cool"), iconData: Icons.local_pizza),
              top: 240.0,
              left: 130.0,
            ),
            new Positioned(
              child: new CircleButton(onTap: () => print("Cool"), iconData: Icons.satellite),
              top: 120.0,
              left: 130.0,
            ),
          ],
        ),
      ),
    );
  }
}

class CircleButton extends StatelessWidget {
  final GestureTapCallback onTap;
  final IconData iconData;

  const CircleButton({Key key, this.onTap, this.iconData}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    double size = 50.0;

    return new InkResponse(
      onTap: onTap,
      child: new Container(
        width: size,
        height: size,
        decoration: new BoxDecoration(
          color: Colors.white,
          shape: BoxShape.circle,
        ),
        child: new Icon(
          iconData,
          color: Colors.black,
        ),
      ),
    );
  }
}

Flutter相关问答推荐

如何在不使用NULL-check(!)的情况下缩小`FutureBuilder.Builder()`内部的`Snaphot`范围

创建后检索FiRestore文档ID

想更新ListView上的索引点击块Flutter

如何处理Flutter Riverpod异步通知器中的状态和数据库

修复后期变量的抖动皮棉

有没有方法可以从当前时间轻松计算TimeStamp?

在flutter web上渲染多个Youtube视频

从图标启动器打开时,VSCode未检测到Web设备

Flutter - Stripe:类型List 不是类型Map 的子类型? method_channel_stripe.dart 中的错误:263

2023 年如何使用 youtube_explode_dart 包下载 URL?

为 flutter app/firebase 保存 chatgpt api-key 的正确方法是什么

Riverpod 2.3.6:AutoDisposeNotifier和ref.onDispose自动处理

如何与 PostgreSQL 和外部网站交互 flutter apk?

Flutter 分析发现 Gitlab CI/CD 管道中的问题,但它在本地没有

当我使用 Confetti Widget 时,Flutter Android 和 IOS 应用程序崩溃

Flutter ListView 在 Column 中工作但在 Row 中不工作

如何格式化网址?

Flutter :RangeError(索引):无效值:不在包含范围内0..3:4使用IndexedListView.builder

如何从dart 中的当前日期时间中减go 1 天?

Flutter 广告导致延迟