shimmer_pacage 0.0.1
shimmer_pacage: ^0.0.1 copied to clipboard
A Flutter package that provides shimmer loading placeholder effects for any widget.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:shimmer_pacage/shimmer_pacage.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Shimmer Package Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
useMaterial3: true,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _isLoading = true;
@override
void initState() {
super.initState();
// Simulate loading data
Future.delayed(const Duration(seconds: 3), () {
if (mounted) {
setState(() {
_isLoading = false;
});
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Shimmer Package Demo'),
actions: [
IconButton(
icon: const Icon(Icons.refresh),
onPressed: () {
setState(() {
_isLoading = true;
});
Future.delayed(const Duration(seconds: 3), () {
if (mounted) {
setState(() {
_isLoading = false;
});
}
});
},
),
],
),
body: _isLoading ? _buildLoadingState() : _buildLoadedState(),
);
}
Widget _buildLoadingState() {
return ListView.builder(
padding: const EdgeInsets.all(16),
itemCount: 5,
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.only(bottom: 16),
child: ShimmerContainer(
borderRadius: 8,
baseColor: const Color(0xFFE0E0E0),
highlightColor: const Color(0xFFF5F5F5),
duration: const Duration(milliseconds: 1500),
child: Container(
height: 120,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
),
),
),
);
},
);
}
Widget _buildLoadedState() {
return ListView.builder(
padding: const EdgeInsets.all(16),
itemCount: 5,
itemBuilder: (context, index) {
return Card(
margin: const EdgeInsets.only(bottom: 16),
child: Container(
height: 120,
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: 200,
height: 20,
color: Colors.blue[100],
),
const SizedBox(height: 8),
Container(
width: 150,
height: 16,
color: Colors.grey[200],
),
const SizedBox(height: 8),
Container(
width: 100,
height: 16,
color: Colors.grey[200],
),
],
),
),
);
},
);
}
}