{"id":18508542,"url":"https://github.com/roundedinfinity/clever_list","last_synced_at":"2025-05-14T09:35:37.012Z","repository":{"id":200793848,"uuid":"706174012","full_name":"RoundedInfinity/clever_list","owner":"RoundedInfinity","description":null,"archived":false,"fork":false,"pushed_at":"2024-06-25T20:12:35.000Z","size":288,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-17T02:19:23.598Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RoundedInfinity.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-10-17T12:51:21.000Z","updated_at":"2024-11-19T07:37:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"87e6edea-09b5-48b3-9160-34c93aa435aa","html_url":"https://github.com/RoundedInfinity/clever_list","commit_stats":null,"previous_names":["roundedinfinity/clever_list"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RoundedInfinity%2Fclever_list","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RoundedInfinity%2Fclever_list/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RoundedInfinity%2Fclever_list/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RoundedInfinity%2Fclever_list/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RoundedInfinity","download_url":"https://codeload.github.com/RoundedInfinity/clever_list/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254112392,"owners_count":22016751,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T15:14:42.164Z","updated_at":"2025-05-14T09:35:36.846Z","avatar_url":"https://github.com/RoundedInfinity.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Clever List\n\n[![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link]\n[![Powered by Mason](https://img.shields.io/endpoint?url=https%3A%2F%2Ftinyurl.com%2Fmason-badge)](https://github.com/felangel/mason)\n[![License: MIT][license_badge]][license_link]\n\nA ListView widget that implicitly animates changes. CleverLists are built from a list of data objects.\n\n## Usage \n\nUsing CleverList is straightforward. You need to create a list of items, define a builder function for rendering each item, and specify optional animations for insertion and removal.\n\nFirst you need data for your list. The list uses the `==` operator to compare them. You can also set your own comparison by using `equalityChecker`.\n\n```dart\n// Your data that you want to use to build the list.\nvar persons = \u003cString\u003e[\n  'Rick',\n  'Beth',\n  'Jerry'\n];\n```\n\nThen you can use this data for your widget.\n\n```dart\nCleverList\u003cString\u003e(\n  items: persons,\n  builder: (context, value) {\n    return ListTile(\n      title: Text(value),\n    );\n  },\n)\n```\n\nNow when `persons` changes and the state is updated, the list will automatically animate the changes.\n\n### Customization \n\nUse `insertDuration` and `removeDuration` to customize the durations for the insert and remove durations.\n\nYou can use the insertTransitionBuilder and removeTransitionBuilder parameters to create your custom insertion and removal animations.\n\nFor more advanced use cases, you can extend  `CleverListBase` or `CleverListWidget` for your own implementation.\n\n\n## Acknowledgements\n\nThis package is greatly inspired by [diffutil_sliverlist]([https://](https://pub.dev/packages/diffutil_sliverlist)) ❤️.\n\n[flutter_install_link]: https://docs.flutter.dev/get-started/install\n[github_actions_link]: https://docs.github.com/en/actions/learn-github-actions\n[license_badge]: https://img.shields.io/badge/license-MIT-blue.svg\n[license_link]: https://opensource.org/licenses/MIT\n[logo_black]: https://raw.githubusercontent.com/VGVentures/very_good_brand/main/styles/README/vgv_logo_black.png#gh-light-mode-only\n[logo_white]: https://raw.githubusercontent.com/VGVentures/very_good_brand/main/styles/README/vgv_logo_white.png#gh-dark-mode-only\n[mason_link]: https://github.com/felangel/mason\n[very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg\n[very_good_analysis_link]: https://pub.dev/packages/very_good_analysis\n[very_good_cli_link]: https://pub.dev/packages/very_good_cli\n[very_good_coverage_link]: https://github.com/marketplace/actions/very-good-coverage\n[very_good_ventures_link]: https://verygood.ventures\n[very_good_ventures_link_light]: https://verygood.ventures#gh-light-mode-only\n[very_good_ventures_link_dark]: https://verygood.ventures#gh-dark-mode-only\n[very_good_workflows_link]: https://github.com/VeryGoodOpenSource/very_good_workflows\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froundedinfinity%2Fclever_list","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Froundedinfinity%2Fclever_list","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froundedinfinity%2Fclever_list/lists"}