flutter_skeleton_shimmer 0.1.0 copy "flutter_skeleton_shimmer: ^0.1.0" to clipboard
flutter_skeleton_shimmer: ^0.1.0 copied to clipboard

A hybrid shimmer skeleton loading widget for Flutter. Auto-detects Text, Icon, Image widgets and supports explicit Bone() markers.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_skeleton_shimmer/flutter_skeleton_shimmer.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Shimmerize Demo',
      theme: ThemeData(colorSchemeSeed: Colors.blue, useMaterial3: true),
      home: const DemoPage(),
    );
  }
}

class DemoPage extends StatefulWidget {
  const DemoPage({super.key});

  @override
  State<DemoPage> createState() => _DemoPageState();
}

class _DemoPageState extends State<DemoPage> {
  bool _isLoading = true;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Shimmerize Demo'),
        actions: [
          Switch(
            value: _isLoading,
            onChanged: (v) => setState(() => _isLoading = v),
          ),
          const SizedBox(width: 8),
        ],
      ),
      body: SingleChildScrollView(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            // Auto-detect demo
            Text('Auto-detect (Text, Icon)',
                style: Theme.of(context).textTheme.titleMedium),
            const SizedBox(height: 8),
            Shimmerize(
              enabled: _isLoading,
              child: Card(
                child: Padding(
                  padding: const EdgeInsets.all(16),
                  child: Row(
                    children: [
                      const CircleAvatar(child: Icon(Icons.person)),
                      const SizedBox(width: 16),
                      Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Text('John Doe',
                              style: Theme.of(context).textTheme.titleMedium),
                          const Text('john.doe@example.com'),
                        ],
                      ),
                    ],
                  ),
                ),
              ),
            ),
            const SizedBox(height: 24),

            // Bone marker demo
            Text('Bone markers (explicit)',
                style: Theme.of(context).textTheme.titleMedium),
            const SizedBox(height: 8),
            Shimmerize(
              enabled: _isLoading,
              child: Card(
                child: Padding(
                  padding: const EdgeInsets.all(16),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Row(
                        children: [
                          const Bone.circle(size: 48),
                          const SizedBox(width: 16),
                          Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Bone(width: 150, height: 16),
                              const SizedBox(height: 8),
                              Bone(width: 100, height: 12),
                            ],
                          ),
                        ],
                      ),
                      const SizedBox(height: 16),
                      const Bone(width: double.infinity, height: 120),
                    ],
                  ),
                ),
              ),
            ),
            const SizedBox(height: 24),

            // List demo
            Text('List items',
                style: Theme.of(context).textTheme.titleMedium),
            const SizedBox(height: 8),
            ...List.generate(
              4,
              (i) => Shimmerize(
                enabled: _isLoading,
                child: ListTile(
                  leading: const CircleAvatar(child: Icon(Icons.device_hub)),
                  title: Text('Device ${i + 1}'),
                  subtitle: const Text('192.168.1.x'),
                  trailing: const Icon(Icons.chevron_right),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
1
likes
150
points
135
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A hybrid shimmer skeleton loading widget for Flutter. Auto-detects Text, Icon, Image widgets and supports explicit Bone() markers.

Repository (GitHub)
View/report issues

Topics

#widget #shimmer #skeleton #loading #placeholder

License

MIT (license)

Dependencies

flutter

More

Packages that depend on flutter_skeleton_shimmer