Flutter embossed button test

Date: 2021-04-03 15:09:33

Download macOS

I was inspired by a Neumorphic UI Design and wanted to see if I could do something like it in Flutter. I managed to do it with a couple drop shadows, and a gradient background. The look of the drop shadows are heavily dependent on the gradient color; meaning that if I change the color of the gradient, the emboss might not look right. I suspect even the position would be effected.

I did get something I liked, and thought I would test distributing a Flutter app. I developed on Windows, then build on macOS.

See below to see what it looks like on each OS, and the source at the end.




// Copyright 2018 The Flutter team. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(title: 'Fuel Calculator', home: FormApp()));

/// Just shows the field and button.
class FormApp extends StatelessWidget {
  Widget build(BuildContext context) {
    return Scaffold(
        // appBar: AppBar(
        //   title: Text('Form Sample'),
        // ),
        body: GreetButtonTwo());

class GreetButtonTwo extends StatelessWidget {
  Widget build(BuildContext context) {
    return Container(
        decoration: BoxDecoration(
            gradient: RadialGradient(
          radius: 1.3,
          center: Alignment(-0.5, -0.5),
          colors: [Colors.white, Colors.grey],
        child: Center(
            child: Container(
                decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(40),
                    boxShadow: [
                          color: Colors.white,
                          blurRadius: 10.0,
                          spreadRadius: 7.0,
                          offset: Offset(-5.0, -5.0) //keep shadow centered
                          color: Colors.grey,
                          blurRadius: 10.0,
                          spreadRadius: 7.0,
                          offset: Offset(5.0, 5.0) //keep shadow centered
                child: ElevatedButton(
                    style: ButtonStyle(
                        foregroundColor: MaterialStateProperty.all<Color>(
                        backgroundColor: MaterialStateProperty.all<Color>(
                                    borderRadius: BorderRadius.circular(18.0),
                                    side: BorderSide(
                                        color: Colors.grey, width: 3)))),
                    child: Padding(
                        padding: EdgeInsets.all(10), child: Text('Greet')),
                    onPressed: () {
                        context: context,
                        builder: (context) {
                          return AlertDialog(
                            content: Text('Greetings'),

Copyright © 2020, Lee Patterson