Con Flutter podemos hacer uso de una infinidad de widgets o combinarlos para lograr el diseño deseado. Aqui hay 5 formas para crear botones circulares con icono en su interior.

#1: Usando ElevatedButton + Icon (recomendado)

      ElevatedButton(
        style: ElevatedButton.styleFrom(
            shape: const CircleBorder(), padding: const EdgeInsets.all(30)),
        child: const Icon(
          Icons.add,
          size: 50,
        ),
        onPressed: () {},
      ),

#2: Usando MaterialButton

      MaterialButton(
        shape: const CircleBorder(),
        color: Colors.red,
        padding: const EdgeInsets.all(20),
        onPressed: () {},
        child: const Icon(
          Icons.star,
          size: 50,
          color: Colors.yellow,
        ),
      ),

#3: Combinando ClipOval + Material + InkWell + Padding + Icon

      ClipOval(
        child: Material(
          color: Colors.blue,
          child: InkWell(
            onTap: () {},
            child: const Padding(
              padding: EdgeInsets.all(20),
              child: Icon(
                Icons.plus_one,
                size: 50,
                color: Colors.white,
              ),
            ),
          ),
        ),
      ),

#4: Combinando IconButton + CircleAvatar

      CircleAvatar(
        radius: 50,
        backgroundColor: Colors.amber,
        child: IconButton(
            color: Colors.black,
            padding: const EdgeInsets.all(20),
            iconSize: 50,
            icon: const Icon(Icons.shop),
            onPressed: () {
              // do something
            }),
      ),

#5: Combinando Ink + IconButton

      Ink(
        decoration:
            const ShapeDecoration(shape: CircleBorder(), color: Colors.purple),
        child: IconButton(
          icon: const Icon(Icons.arrow_back),
          iconSize: 30,
          color: Colors.white,
          onPressed: () {},
        ),
      )

Descargar proyecto desde nuestro repositorio Github.com listo para probar.

Fuente: kindacode.com