Ako urobiť ElevatedButton s gradientu pozadie v Flutter?

0

Otázka

Našiel som viacero príkladov na pretečenie zásobníka, ako využiť RaiseButton s gradientu pozadie, ale keďže vysielanie tieto odpovede, RaiseButton bolo označené ako zavrhované.

Väčšina riešení, ktoré som našiel na ElevatedButton s gradientu pozadia boli neúplné do určitej miery; buď gradient nepokrýva celé pozadie alebo zatienenia je vypnuté.

To bol najviac úplnú odpoveď som našiel, ale onPress prevýšenie predstavuje nepríjemných tieň.

Nižšie som zverejnil odpoveď môj najlepší pokus o ElevatedButton s gradientu pozadia (Q&A štýl). Prosím komentár na spôsoby, ako vidíte, moja odpoveď zlepšiť!

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

Najlepšiu odpoveď

0

Po mnohých pokusov a omylov, sa mi podarilo znovu ElevatedButton.

Konečný výsledok:

Gradient Button

Nižšie je moja kód pre jedno použitie gradient tlačidlo.

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

V iných jazykoch

Táto stránka je v iných jazykoch

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