Nesse primeiro posto vamos criar um cartão com um efeito Glassmorphism, ou efeito de vidro fosco
Implementação
Você vai criar um widget BackdropFilter.
De acordo com a documentação, BackdropFilter é
Um widget que aplica um filtro ao conteúdo pintado existente e, em seguida, pinta o child.
O filtro será aplicado a toda a área dentro do clipe do widget pai ou ancestral. Se não houver clip, o filtro será aplicado em tela inteira.
Adicione o import 'dart:ui';
, para importar o ImageFilter.blur(sigmaX: 8, sigmaY: 16)
ele cria um filtro de imagem que aplica um desfoque gaussiano. Vamos adicionar um LinearGradient no decoration do Container:
BackdropFilter( filter: ImageFilter.blur(sigmaX: 8, sigmaY: 16), child: Container( decoration: BoxDecoration( gradient: LinearGradient( colors: [ Colors.grey.withAlpha(20), Colors.grey.withAlpha(20), ], begin: Alignment.topLeft, end: Alignment.bottomRight, ), borderRadius: const BorderRadius.all( Radius.circular(20), ), border: Border.all( width: 1.5, color: Colors.white.withAlpha(20), ), ), child: child, ), )
Pronto, temos o efeito vidro fosco
! 🎉
Agora vamos criar o widget de Cartão de crédito, e adicionar ele como child no Container que criamos acima.
Implementação
Container( padding: const EdgeInsets.all(8), height: 220, width: double.infinity, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.only( left: 16, top: 32, ), child: Row( children: [ Image.asset( 'assets/images/chip.png', scale: 1, ), const SizedBox(width: 12), Image.asset( 'assets/images/nfc.png', height: 22, color: Colors.white, scale: 1, ), ], ), ), const Spacer(), Align( alignment: Alignment.topRight, child: Image.asset( 'assets/images/mastercard.png', height: 48, ), ), ], ), const Spacer(), Padding( padding: const EdgeInsets.only(left: 16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: const [ Text( '4111 1111 1111 1111', style: TextStyle( fontSize: 20, color: Colors.white, fontWeight: FontWeight.w600, letterSpacing: 2, ), ), SizedBox(height: 20), Text( 'John Doe', style: TextStyle( fontSize: 16, color: Colors.white, fontWeight: FontWeight.w600, letterSpacing: 1.5, ), ), ], ), ), ], ), )
Código completo:
import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class CardScreen extends StatelessWidget { const CardScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light); return Scaffold( body: Stack( children: [ Image.asset( 'assets/images/background1.jpeg', height: MediaQuery.of(context).size.height, width: MediaQuery.of(context).size.width, fit: BoxFit.cover, ), Padding( padding: const EdgeInsets.symmetric(horizontal: 8), child: Center( child: GlassContainer( child: Container( padding: const EdgeInsets.all(8), height: 220, width: double.infinity, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.only( left: 16, top: 32, ), child: Row( children: [ Image.asset( 'assets/images/chip.png', scale: 1, ), const SizedBox(width: 12), Image.asset( 'assets/images/nfc.png', height: 22, color: Colors.white, scale: 1, ), ], ), ), const Spacer(), Align( alignment: Alignment.topRight, child: Image.asset( 'assets/images/mastercard.png', height: 48, ), ), ], ), const Spacer(), Padding( padding: const EdgeInsets.only(left: 16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: const [ Text( '4111 1111 1111 1111', style: TextStyle( fontSize: 20, color: Colors.white, fontWeight: FontWeight.w600, letterSpacing: 2, ), ), SizedBox(height: 20), Text( 'John Doe', style: TextStyle( fontSize: 16, color: Colors.white, fontWeight: FontWeight.w600, letterSpacing: 1.5, ), ), ], ), ), ], ), ), ), ), ), ], ), ); } } class GlassContainer extends StatelessWidget { const GlassContainer({ Key? key, required this.child, }) : super(key: key); final Widget child; @override Widget build(BuildContext context) { return ClipRRect( borderRadius: BorderRadius.circular(20), child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 8, sigmaY: 16), child: Container( decoration: BoxDecoration( gradient: LinearGradient( colors: [ Colors.grey.withAlpha(20), Colors.grey.withAlpha(20), ], begin: Alignment.topLeft, end: Alignment.bottomRight, ), borderRadius: const BorderRadius.all( Radius.circular(20), ), border: Border.all( width: 1.5, color: Colors.white.withAlpha(20), ), ), child: child, ), ), ); } }
Resultado
Conclusão
Neste artigo, criamos um cartão com efeito Glassmorphism, estilo vidro fosco, que você pode modificar e experimentar de acordo com o seu.
Espero que este blog forneça informações suficientes sobre como experimentar esse efeito em seu projeto de flutter. Mostrei a você o que é o efeito Glassmorphism em Flutter, criando um cartão de crédito com esse efeito, então, por favor, experimente.
Link do repositório glassmorphism_card
Top comments (0)