df_collection 0.10.0
df_collection: ^0.10.0 copied to clipboard
A package designed to extend Dart collections by offering additional functionality.
Summary #
A package designed to extend Dart collections by offering additional functionality. Every mutating- or merging-style function gives you a result that does not share mutable substructure with the inputs — you can keep working with the output without worrying about corrupting the data you started from. Pure synchronous, no platform deps; works on the VM, Flutter, web, and across isolates.
Example #
// Cartesian product from a list of sets.
{
final items = [
{1, 2},
{3, 4, 5},
];
final batches = items.cartesianProduct((a, b) => a + b);
print(batches); // [4, 5, 6, 5, 6, 7]
}
// Split an iterable into chunks of a maximum size.
{
final items = [1, 2, 3, 4, 5, 6, 7, 8, 9];
final batches = items.chunked(4);
print(batches); // ([1, 2, 3, 4], [5, 6, 7, 8], [9])
}
// Traverse a map using a list of keys and set a new value.
{
var buffer = <dynamic, dynamic>{};
buffer.traverse([1, 2, 3, 4], newValue: 5);
print(buffer); // {1: {2: {3: {4: 5}}}}
print(buffer.traverse([1, 2, 3, 4])); // 5
}
// Read a value from anywhere in a nested structure.
{
final data = {
'users': [
{'name': 'Alice'},
{'name': 'Bob', 'roles': {'editor': true}},
],
};
print(deepGet(data, 'users.1.name')); // Bob
print(deepGet(data, 'users.1.roles.editor')); // true
print(deepGet(data, 'users.99.name')); // null (safe)
}
// Deeply merge two structures. The result is fully disjoint from `a` and
// `b` — mutating it can never corrupt the inputs.
{
final a = {
'patient': {'id': 'P-001', 'flags': ['A']},
};
final b = {
'patient': {'flags': ['B'], 'dose_mg': 5},
};
final merged = mergeDataDeep(a, b);
print(merged);
// {patient: {id: P-001, flags: [B], dose_mg: 5}}
}
// Flatten nested JSON into a single-level map of paths.
{
final flat = JsonUtility.i.flattenJson({
'user': {'name': 'Alice', 'address': {'city': 'Sydney'}},
'tags': ['vip', 'beta'],
});
print(flat);
// {user.name: Alice, user.address.city: Sydney, tags.0: vip, tags.1: beta}
}
🔍 For more information, refer to the API reference.
💬 Contributing and Discussions #
This is an open-source project, and we warmly welcome contributions from everyone, regardless of experience level. Whether you're a seasoned developer or just starting out, contributing to this project is a fantastic way to learn, share your knowledge, and make a meaningful impact on the community.
☝️ Ways you can contribute #
- Find us on Discord: Feel free to ask questions and engage with the community here: https://discord.gg/gEQ8y2nfyX.
- Share your ideas: Every perspective matters, and your ideas can spark innovation.
- Help others: Engage with other users by offering advice, solutions, or troubleshooting assistance.
- Report bugs: Help us identify and fix issues to make the project more robust.
- Suggest improvements or new features: Your ideas can help shape the future of the project.
- Help clarify documentation: Good documentation is key to accessibility. You can make it easier for others to get started by improving or expanding our documentation.
- Write articles: Share your knowledge by writing tutorials, guides, or blog posts about your experiences with the project. It's a great way to contribute and help others learn.
No matter how you choose to contribute, your involvement is greatly appreciated and valued!
☕ We drink a lot of coffee... #
If you're enjoying this package and find it valuable, consider showing your appreciation with a small donation. Every bit helps in supporting future development. You can donate here: https://www.buymeacoffee.com/dev_cetera
LICENSE #
This project is released under the MIT License. See LICENSE for more information.