Jak zrobić przycisk ze wzrostem z градиентным tłem w Flutter?

0

Pytanie

Znalazłem kilka przykładów przepełnienia stosu o tym, jak korzystać z RaiseButton z градиентным tłem, ale od momentu publikacji tych odpowiedzi RaiseButton jest nieaktualny.

Większość rozwiązań, które znalazłem dla przycisku z podwyższonym poziomem z градиентным tłem, w pewnym stopniu były niekompletne; albo gradient nie zakrywa całe tło, albo cieniowanie wyłączone.

To był najbardziej pełną odpowiedź, który znalazłem, ale wysokość onPress jest ostry cień.

Poniżej zamieściłem odpowiedź z moją najlepszą próbą przyciski ze wzrostem z градиентным tłem (styl pytań i odpowiedzi). Proszę, skomentuj, jak widzisz, że moja odpowiedź poprawił!

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

Najlepsza odpowiedź

0

Po długich prób i błędów udało mi się odtworzyć przycisk ze wzrostem.

Efekt końcowy:

Gradient Button

Oto mój kod do wielokrotnego użytku przycisku gradientu.

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

W innych językach

Ta strona jest w innych językach

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