Come fare un ElevatedButton con un gradiente di sfondo in Flutter?

0

Domanda

Ho trovato molti esempi su stack overflow di come utilizzare un RaiseButton con un gradiente di sfondo, ma dal momento che la pubblicazione di quelle risposte, RaiseButton è stato deprecato.

La maggior parte delle soluzioni che ho trovato per un ElevatedButton con un gradiente di sfondo sono state incomplete, ad un certo punto; il gradiente di non coprire l'intero sfondo o lo shadowing è spento.

Questa è stata la risposta più completa che ho trovato, ma il onPress elevazione presenta una stonatura ombra.

Qui sotto ho postato una risposta con la mia migliore tentativo di ElevatedButton con un gradiente di sfondo (Q&A stile). Si prega di commento, come vedi la mia risposta migliore!

button dart flutter
2021-11-23 15:45:52
1

Migliore risposta

0

Dopo un sacco di tentativi ed errori, sono riuscito a ricreare il ElevatedButton.

Risultato finale:

Gradient Button

Di seguito è il mio codice per riutilizzabile gradiente pulsante.

import 'package:flutter/material.dart';

class GradientElevatedButton extends StatelessWidget {
  const GradientElevatedButton({
    Key? key,
    required this.child,
    required this.onPressed,
    required this.linearGradient,
  }) : super(key: key);

  final Widget child;
  final VoidCallback onPressed;
  final LinearGradient linearGradient;

  @override
  Widget build(BuildContext context) {
    return Padding(
      // ElevatedButton has default 5 padding on top and bottom
      padding: const EdgeInsets.symmetric(
        vertical: 5,
      ),
      // DecoratedBox contains our linear gradient
      child: DecoratedBox(
        decoration: BoxDecoration(
          gradient: linearGradient,
          // Round the DecoratedBox to match ElevatedButton
          borderRadius: BorderRadius.circular(5),
        ),
        child: ElevatedButton(
          onPressed: onPressed,
          // Duplicate the default styling of an ElevatedButton
          style: ElevatedButton.styleFrom(
            // Enables us to see the BoxDecoration behind the ElevatedButton
            primary: Colors.transparent,
            // Fits the Ink in the BoxDecoration
            tapTargetSize: MaterialTapTargetSize.shrinkWrap,
          ).merge(
            ButtonStyle(
              // Elevation declared here so we can cover onPress elevation
              // Declaring in styleFrom does not allow for MaterialStateProperty
              elevation: MaterialStateProperty.all(0),
            ),
          ),
          child: child,
        ),
      ),
    );
  }
}

2021-11-23 15:45:52

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................