flutter_app_auto_update_checker 1.0.1 copy "flutter_app_auto_update_checker: ^1.0.1" to clipboard
flutter_app_auto_update_checker: ^1.0.1 copied to clipboard

A lightweight, cross-platform Flutter package that automatically checks for app updates from Google Play Store and Apple App Store, compares versions, and shows customizable update dialogs.

example/lib/main.dart

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

void main() {
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter App Auto Update Checker',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const HomePage(),
    );
  }
}

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

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  AppUpdateInfo? _updateInfo;
  bool _isChecking = false;
  String? _errorMessage;

  @override
  void initState() {
    super.initState();
    // Check for updates when app starts
    _checkForUpdate();
  }

  Future<void> _checkForUpdate() async {
    setState(() {
      _isChecking = true;
      _errorMessage = null;
    });

    try {
      final updateInfo = await UpdateCheckerService.checkForUpdate();

      setState(() {
        _updateInfo = updateInfo;
        _isChecking = false;
      });

      // Show update dialog if update is available
      if (updateInfo.hasUpdate && mounted) {
        _showUpdateDialog();
      }
    } catch (e) {
      setState(() {
        _errorMessage = e.toString();
        _isChecking = false;
      });
    }
  }

  void _showUpdateDialog() {
    if (_updateInfo == null) return;

    UpdateDialog.show(
      context,
      updateInfo: _updateInfo!,
      title: 'Update Available! 🎉',
      message: 'A new version of the app is available. Update now to get the latest features and improvements.',
      updateButtonText: 'Update Now',
      laterButtonText: 'Maybe Later',
      isCritical: false,
    );
  }

  void _showForceUpdateDialog() {
    if (_updateInfo == null) return;

    UpdateDialog.show(
      context,
      updateInfo: _updateInfo!,
      title: 'Update Required! ⚠️',
      message: 'This update includes important security fixes and bug improvements. Please update to continue using the app.',
      updateButtonText: 'Update Now',
      laterButtonText: 'Later',
      showLaterButton: false,
      isCritical: true,
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Auto Update Checker'),
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(24.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              // Icon
              Icon(
                _updateInfo?.hasUpdate == true
                    ? Icons.system_update
                    : Icons.check_circle_outline,
                size: 80,
                color: _updateInfo?.hasUpdate == true
                    ? Colors.orange
                    : Colors.green,
              ),
              const SizedBox(height: 24),

              // Title
              Text(
                _isChecking
                    ? 'Checking for updates...'
                    : _updateInfo?.hasUpdate == true
                        ? 'Update Available!'
                        : 'App is Up to Date',
                style: const TextStyle(
                  fontSize: 24,
                  fontWeight: FontWeight.bold,
                ),
              ),
              const SizedBox(height: 16),

              // Status message
              if (_isChecking)
                const CircularProgressIndicator()
              else if (_errorMessage != null)
                Text(
                  'Error: $_errorMessage',
                  style: const TextStyle(color: Colors.red),
                  textAlign: TextAlign.center,
                )
              else if (_updateInfo != null) ...[
                // Current version
                _buildInfoCard(
                  'Current Version',
                  _updateInfo!.currentVersion,
                  Icons.phone_android,
                ),
                const SizedBox(height: 12),

                // Latest version
                _buildInfoCard(
                  'Latest Version',
                  _updateInfo!.latestVersion,
                  Icons.cloud_download,
                  color: _updateInfo!.hasUpdate ? Colors.green : null,
                ),
                const SizedBox(height: 12),

                // Package name
                _buildInfoCard(
                  'Package Name',
                  _updateInfo!.packageName,
                  Icons.info_outline,
                ),
                const SizedBox(height: 24),

                // Action buttons
                if (_updateInfo!.hasUpdate) ...[
                  ElevatedButton.icon(
                    onPressed: _showUpdateDialog,
                    icon: const Icon(Icons.update),
                    label: const Text('Show Update Dialog'),
                    style: ElevatedButton.styleFrom(
                      padding: const EdgeInsets.symmetric(
                        horizontal: 24,
                        vertical: 12,
                      ),
                    ),
                  ),
                  const SizedBox(height: 12),
                  OutlinedButton.icon(
                    onPressed: _showForceUpdateDialog,
                    icon: const Icon(Icons.warning),
                    label: const Text('Show Force Update Dialog'),
                    style: OutlinedButton.styleFrom(
                      padding: const EdgeInsets.symmetric(
                        horizontal: 24,
                        vertical: 12,
                      ),
                    ),
                  ),
                ],
              ],

              const SizedBox(height: 24),

              // Check again button
              OutlinedButton.icon(
                onPressed: _isChecking ? null : _checkForUpdate,
                icon: const Icon(Icons.refresh),
                label: const Text('Check Again'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Widget _buildInfoCard(String label, String value, IconData icon,
      {Color? color}) {
    return Container(
      padding: const EdgeInsets.all(16),
      decoration: BoxDecoration(
        color: Colors.grey[100],
        borderRadius: BorderRadius.circular(12),
        border: Border.all(
          color: color ?? Colors.grey[300]!,
          width: 2,
        ),
      ),
      child: Row(
        children: [
          Icon(icon, color: color),
          const SizedBox(width: 12),
          Expanded(
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text(
                  label,
                  style: TextStyle(
                    fontSize: 12,
                    color: Colors.grey[600],
                  ),
                ),
                const SizedBox(height: 4),
                Text(
                  value,
                  style: TextStyle(
                    fontSize: 16,
                    fontWeight: FontWeight.bold,
                    color: color,
                  ),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}
0
likes
130
points
40
downloads

Publisher

unverified uploader

Weekly Downloads

A lightweight, cross-platform Flutter package that automatically checks for app updates from Google Play Store and Apple App Store, compares versions, and shows customizable update dialogs.

Repository (GitHub)
View/report issues
Contributing

Documentation

API reference

License

MIT (license)

Dependencies

flutter, http, package_info_plus, url_launcher

More

Packages that depend on flutter_app_auto_update_checker