En Flutter, Shimmer se usa para agregar hermosas animaciones mientras el contenido se carga desde los servidores en una aplicación. Esto hace que la interfaz de usuario parezca más receptiva y evita que los usuarios abandonen una interacción lenta en Internet. Se puede usar en lugar de ProgressBar convencional o de los cargadores habituales disponibles en el marco Flutter.
En este artículo, analizaremos su implementación mediante la creación de una aplicación simple. para hacerlo siga los siguientes pasos:
- Agregue la dependencia en el archivo pubspec.yaml
- Importe la dependencia en el archivo main.dart
- Use StatefulWidget para estructurar la aplicación
- Agregue una pantalla de carga, que no se carga para mostrar el efecto de brillo
Veamos los pasos en detalle.
Agregar la dependencia:
Para agregar la dependencia al archivo pubspec.yaml , agregue shimmer como una dependencia en la parte de dependencias del archivo pubspec.yaml como se muestra a continuación:
Importación de la dependencia:
Use la siguiente línea de código en el archivo main.dart para importar la dependencia de brillo:
import 'package:shimmer/shimmer.dart';
Estructuración de la aplicación:
Un StatefulWidget se puede ampliar para crear una barra de aplicaciones y un cuerpo . Esta es la página de inicio que navegará a una pantalla de carga con solo hacer clic en un botón. La pantalla de carga tendrá una representación brillante. para hacerlo sigue lo siguiente:
Dart
class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'GeeksForGeeks', routes: { 'loading': (_) => LoadingListPage(), }, theme: ThemeData( primarySwatch: Colors.green, ), home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Shimmer'), backgroundColor: Colors.green, ), body: Column( children: [ ListTile( title: const Text('Loading List'), onTap: () => Navigator.of(context).pushNamed('loading'), ), ], ), ); } }
Creando la pantalla de carga:
La pantalla de carga será una extensión de StatefulWidget . Dentro del cuerpo de la pantalla de carga, sus elementos secundarios tendrán las columnas en las que se implementará el efecto de destellos, como se muestra a continuación:
Dart
Shimmer.fromColors( baseColor: Colors.grey[300], highlightColor: Colors.grey[100], enabled: _enabled, child: ListView.builder( itemBuilder: (_, __) => Padding( padding: const EdgeInsets.only(bottom: 8.0), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: ) ], ), ), itemCount: 6, ),
Código fuente completo:
Dart
import 'package:flutter/material.dart'; import 'package:shimmer/shimmer.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'GeeksForGeeks', routes: { 'loading': (_) => LoadingListPage(), }, theme: ThemeData( primarySwatch: Colors.green, ), home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Shimmer'), backgroundColor: Colors.green, ), body: Column( children: [ ListTile( title: const Text('Loading List'), onTap: () => Navigator.of(context).pushNamed('loading'), ), ], ), ); } } class LoadingListPage extends StatefulWidget { @override _LoadingListPageState createState() => _LoadingListPageState(); } class _LoadingListPageState extends State<LoadingListPage> { bool _enabled = true; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Loading List'), ), body: Container( width: double.infinity, padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 16.0), child: Column( mainAxisSize: MainAxisSize.max, children: <Widget>[ Expanded( child: Shimmer.fromColors( baseColor: Colors.grey[300], highlightColor: Colors.grey[100], enabled: _enabled, child: ListView.builder( itemBuilder: (_, __) => Padding( padding: const EdgeInsets.only(bottom: 8.0), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( width: 48.0, height: 48.0, color: Colors.white, ), const Padding( padding: EdgeInsets.symmetric(horizontal: 8.0), ), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Container( width: double.infinity, height: 8.0, color: Colors.white, ), const Padding( padding: EdgeInsets.symmetric(vertical: 2.0), ), Container( width: double.infinity, height: 8.0, color: Colors.white, ), const Padding( padding: EdgeInsets.symmetric(vertical: 2.0), ), Container( width: 40.0, height: 8.0, color: Colors.white, ), ], ), ) ], ), ), itemCount: 6, ), ), ), Padding( padding: const EdgeInsets.symmetric(vertical: 8.0), child: FlatButton( onPressed: () { setState(() { _enabled = !_enabled; }); }, child: Text( _enabled ? 'Stop' : 'Play', style: Theme.of(context).textTheme.button.copyWith( fontSize: 18.0, color: _enabled ? Colors.redAccent : Colors.green), )), ) ], ), ), ); } }
Producción:
Publicación traducida automáticamente
Artículo escrito por ddeevviissaavviittaa y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA