zeba_academy_sorting

pub package License: GPL-3.0 Platform

A lightweight, dependency-free Flutter and Dart package for sorting collections with ease. It provides ascending and descending sorting, multi-field sorting, custom comparators, immutable sorting, in-place sorting, and convenient extension methods.


✨ Features

  • ✅ Ascending sorting
  • ✅ Descending sorting
  • ✅ Multi-field sorting
  • ✅ Custom comparator support
  • ✅ Generic type support
  • ✅ Sort numbers, strings, booleans, and DateTime values
  • ✅ Null-safe implementation
  • ✅ Immutable sorting (returns a new list)
  • ✅ In-place sorting
  • ✅ Extension methods for clean code
  • ✅ Lightweight and dependency-free
  • ✅ Flutter and pure Dart compatible

Installation

Add the package to your pubspec.yaml.

dependencies:
  zeba_academy_sorting: ^1.0.0

Then run:

flutter pub get

Import

import 'package:zeba_academy_sorting/zeba_academy_sorting.dart';

Basic Example

final numbers = [5, 1, 8, 2, 3];

final sorted = Sorting.ascending(
  numbers,
  (e) => e,
);

print(sorted);

// Output:
// [1,2,3,5,8]

Ascending Sorting

final students = [
  Student("John", 21),
  Student("Alice", 19),
  Student("David", 22),
];

final result = Sorting.ascending(
  students,
  (e) => e.age,
);

Descending Sorting

final result = Sorting.descending(
  students,
  (e) => e.age,
);

Sort Strings

final names = [
  "Charlie",
  "Alice",
  "Bob",
];

final sorted = Sorting.ascending(
  names,
  (e) => e,
);

Sort Numbers

final prices = [
  99,
  35,
  150,
  42,
];

final sorted = Sorting.descending(
  prices,
  (e) => e,
);

Sort DateTime

final dates = [
  DateTime(2025, 5, 10),
  DateTime(2023, 8, 15),
  DateTime(2024, 1, 1),
];

final sorted = Sorting.ascending(
  dates,
  (e) => e,
);

Multi-field Sorting

final result = students.sortByFields([
  SortField<Student>(
    selector: (e) => e.age,
  ),
  SortField<Student>(
    selector: (e) => e.marks,
    order: SortOrder.descending,
  ),
]);

The list is first sorted by age and then by marks in descending order when ages are equal.


In-place Sorting

students.sortSelf(
  (e) => e.name,
);

Immutable Sorting

final sorted = students.sortAscending(
  (e) => e.name,
);

The original list remains unchanged.


Custom Comparator

final list = [...students];

list.sort(
  (a, b) => b.name.compareTo(a.name),
);

Extension Methods

students.sortAscending(
  (e) => e.age,
);

students.sortDescending(
  (e) => e.salary,
);

students.sortByFields([
  SortField<Student>(
    selector: (e) => e.department,
  ),
  SortField<Student>(
    selector: (e) => e.salary,
    order: SortOrder.descending,
  ),
]);

students.sortSelf(
  (e) => e.name,
);

API Overview

Sorting

Method Description
Sorting.ascending() Returns a new ascending sorted list
Sorting.descending() Returns a new descending sorted list
Sorting.sortInPlace() Sorts the original list

MultiSorter

Method Description
MultiSorter.sort() Sort using multiple fields

SortField

Represents one sorting rule.

SortField<Student>(
  selector: (e) => e.age,
  order: SortOrder.ascending,
);

ComparatorBuilder

Create reusable comparators.

final comparator = ComparatorBuilder.by<Student>(
  (e) => e.age,
);

students.sort(comparator);

Why zeba_academy_sorting?

  • Clean API
  • Strongly typed
  • Easy to use
  • Highly reusable
  • Generic implementation
  • Zero runtime dependencies
  • Supports Flutter and Dart
  • Production-ready
  • Fully null-safe

Platform Support

Platform Supported
Android
iOS
Web
Windows
macOS
Linux

Roadmap

Future releases may include:

  • Stable sorting algorithms
  • Natural string sorting
  • Locale-aware string comparison
  • Nested property sorting
  • Collection utility helpers
  • Performance optimizations
  • Additional comparator builders

Contributing

Contributions, feature requests, bug reports, and pull requests are welcome.

If you discover an issue or have an idea for improvement, feel free to open an issue or submit a pull request.


License

This project is licensed under the GNU General Public License v3.0 (GPL-3.0).

See the LICENSE file for complete license information.


About Me

✨ I’m Sufyan bin Uzayr, an open-source developer passionate about building and sharing meaningful projects.

You can learn more about me and my work at https://sufyanism.com/ or connect with me on LinkedIn at https://www.linkedin.com/in/sufyanism.


Your all-in-one learning hub!

🚀 Explore courses and resources in coding, tech, and development at Zeba Academy and Code Zeba Academy. Empower yourself with practical skills through curated tutorials, real-world projects, and hands-on experience.

Zeba Academy is a learning platform dedicated to coding, technology, and development.


Support

If you find this package useful, consider:

  • ⭐ Starring the repository
  • 👍 Liking and sharing the project
  • 🐞 Reporting issues
  • 💡 Suggesting new features
  • 🤝 Contributing improvements

Your support helps make open-source software better for everyone.


Thank you for visiting! ❤️