The Evolving Icon package is a pub package that provides utilities and components for creating adaptive icons in Flutter applications. With this package, you can easily generate and display adaptive icons that dynamically adapt to different launcher styles and themes.

Features

  • Generate adaptive icons for Android launcher apps
  • Support for adaptive icons with foreground and background layers
  • Customize adaptive icon shapes and sizes
  • Seamlessly adapt to different launcher styles and themes
  • Easily integrate with existing Flutter projects

Installation

To use the Evolving Icon package in your Flutter project, add the following line to your pubspec.yaml file:

dependencies:
  evolving_icon: ^1.0.0

Getting started

The Evolving Icon package is a pub package that provides utilities and components for creating adaptive icons in Flutter applications. With this package, you can easily generate and display adaptive icons that dynamically adapt to different launcher styles and themes.

//create your own custom pack
import 'package:evolving_icon/evolving_icon.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';

class CustomIcons {
  static const logo = SvgIconData(
    SvgAssetLoader("assets/icons/logo.svg"),
  );
  static const logo_alt = ImgIconData(
    AssetImage("assets/icons/logo.png"),
  );
}

Usage

This package allows you to create a dynamic and adaptive icon pack from different source such as asset file, network inclusive svg,png,jpeg formats with no limitation.

import 'package:evolving_icon/evolving_icon.dart';
import 'package:example/custom_icons.dart';
import 'package:flutter/material.dart';

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

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

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Evolving Icon Demo',
      theme: ThemeData(
        // This is the theme of your application.
        //
        // Try running your application with "flutter run". You'll see the
        // application has a blue toolbar. Then, without quitting the app, try
        // changing the primarySwatch below to Colors.green and then invoke
        // "hot reload" (press "r" in the console where you ran "flutter run",
        // or simply save your changes to "hot reload" in a Flutter IDE).
        // Notice that the counter didn't reset back to zero; the application
        // is not restarted.
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Evolving Icon Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  // This widget is the home page of your application. It is stateful, meaning
  // that it has a State object (defined below) that contains fields that affect
  // how it looks.

  // This class is the configuration for the state. It holds the values (in this
  // case the title) provided by the parent (in this case the App widget) and
  // used by the build method of the State. Fields in a Widget subclass are
  // always marked "final".

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    // This method is rerun every time setState is called, for instance as done
    // by the _incrementCounter method above.
    //
    // The Flutter framework has been optimized to make rerunning build methods
    // fast, so that you can just rebuild anything that needs updating rather
    // than having to individually change instances of widgets.
    return Scaffold(
      appBar: AppBar(
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: Text(widget.title),
      ),
      body: Center(
        // Center is a layout widget. It takes a single child and positions it
        // in the middle of the parent.
        child: ListView(
          children: const <Widget>[
            // this is a svg image icon
            EvolvingIcon(
              CustomIcons.logo,
              height: 256,
              width: 256,
              color: Colors.red,
            ),
            //  this is a png image icon
            EvolvingIcon(
              CustomIcons.logo_alt,
              height: 256,
              width: 256,
              color: Colors.red,
            ),
          ],
        ),
      ),
      // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}
EvolvingIcon{
   double? height;
   double? width;
   Color? color;
   ColorFilter? colorFilter;
   SvgIcon|ImgIcon iconData;
   BlendMode colorBlendMode;
   dynamic theme;
   BoxFit? fit;
}

Additional information

Compatibility with Launcher Styles and Themes The Evolving Icon package seamlessly adapts to different launcher styles and themes. It automatically adjusts the appearance of the adaptive icon based on the launcher's requirements and the user's chosen theme.

Contribution

Contributions to the Evolving Icon package are welcome! If you encounter any issues or have suggestions for improvements, please open an issue or submit a pull request.

License

This package is released under the MIT License.