{"id":15516223,"url":"https://github.com/devj3ns/fleasy","last_synced_at":"2025-04-15T01:06:30.774Z","repository":{"id":42173175,"uuid":"358925698","full_name":"devj3ns/fleasy","owner":"devj3ns","description":"Useful and easy to use extensions, helper classes and widgets to create Flutter apps easier.","archived":false,"fork":false,"pushed_at":"2025-03-05T12:50:59.000Z","size":285,"stargazers_count":19,"open_issues_count":4,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-15T01:06:03.815Z","etag":null,"topics":["fleasy","flutter","utils-library"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/fleasy","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devj3ns.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-17T16:16:39.000Z","updated_at":"2025-03-05T12:51:03.000Z","dependencies_parsed_at":"2024-08-22T23:16:56.200Z","dependency_job_id":"4dfffd14-2b9c-43a9-aa86-cd0c18ad15cd","html_url":"https://github.com/devj3ns/fleasy","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devj3ns%2Ffleasy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devj3ns%2Ffleasy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devj3ns%2Ffleasy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devj3ns%2Ffleasy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devj3ns","download_url":"https://codeload.github.com/devj3ns/fleasy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248986311,"owners_count":21194025,"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":["fleasy","flutter","utils-library"],"created_at":"2024-10-02T10:06:10.453Z","updated_at":"2025-04-15T01:06:30.745Z","avatar_url":"https://github.com/devj3ns.png","language":"Dart","funding_links":["https://www.buymeacoffee.com/devj3ns"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003ca href=\"https://pub.dev/packages/fleasy\" target=\"_blank\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/devj3ns/fleasy/main/resources/logo.png\" alt=\"Fleasy Logo\" height=\"120px\"\u003e\u003c/a\u003e\n\u003cbr\u003e\n\u003ca href=\"https://pub.dev/packages/fleasy\"\u003e\u003cimg src=\"https://img.shields.io/pub/v/fleasy?color=green\" alt=\"pub.dev badge\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/devj3ns/fleasy/actions/workflows/ci.yml\"\u003e\u003cimg alt=\"GitHub actions\" src=\"https://github.com/devj3ns/fleasy/actions/workflows/ci.yml/badge.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/devj3ns/fleasy/commits/main\"\u003e\u003cimg alt=\"GitHub commit activity\" src=\"https://img.shields.io/github/commit-activity/m/devj3ns/fleasy?color=blue\u0026label=commits\"\u003e\u003c/a\u003e\n\u003cbr\u003e\n\u003ca href=\"https://www.buymeacoffee.com/devj3ns\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-blue.png\" alt=\"Buy Me A Coffee\" height=\"42px\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\nFleasy helps create Flutter apps easier by providing **useful and easy to use extensions, helper classes and widgets**.\n\nThe goal is that by using this package you have to write less (repeating) and more clean and readable code.\n\n## Overview\n\n\n- [Extensions on `String` and `String?`](#extensions-on-string-and-string)\n- [Extensions on `BuildContext` (Adaptive helpers)](#extensions-on-buildcontext-adaptive-helpers)\n- [Extensions on `BuildContext` (Theme helpers)](#extensions-on-buildcontext-theme-helpers)\n- [Extensions on `BuildContext` (Navigation helpers)](#extensions-on-buildcontext-navigation-helpers)\n- [Extensions on `BuildContext` (Flashbars)](#extensions-on-buildcontext-flashbars)\n- [Extensions on `List?`](#extensions-on-list)\n- [Extensions on `List`](#extensions-on-list-1)\n- [Extensions on `DateTime`](#extensions-on-datetime)\n- [`Date` helper class](#date-helper-class)\n- [`Insets` helper class](#insets-helper-class)\n- [Flutter Widgets](#flutter-widgets)\n- [Analysis Options](#analysis-options)\n\n## Features\n\nAll features with links to their page in the documentation:\n\n- ### Extensions on `String` and `String?`:\n    Note: All getters also do a null check if used on `String?`.\n    - #### [isNotBlank](https://pub.dev/documentation/fleasy/latest/fleasy/StringBlankHelpers/isNotBlank.html)\n      Whether the string contains characters except of whitespace characters.\n    - #### [isBlank](https://pub.dev/documentation/fleasy/latest/fleasy/StringBlankHelpers/isBlank.html)\n      Whether the string is either empty or solely made of whitespace characters.\n    - #### [toNullIfBlank()](https://pub.dev/documentation/fleasy/latest/fleasy/NullableStringExtensions/toNullIfBlank.html)\n      Returns null if the string `isBlank` or it's text if it `isNotBlank`.\n    - #### [isEmail](https://pub.dev/documentation/fleasy/latest/fleasy/StringValidators/isEmail.html)\n      Whether the string is a valid email.\n    - #### [isUrl](https://pub.dev/documentation/fleasy/latest/fleasy/StringValidators/isUrl.html)\n      Whether the string is a valid url.\n    - #### [isEasyPassword](https://pub.dev/documentation/fleasy/latest/fleasy/StringValidators/isEasyPassword.html)\n      Whether the string is a valid easy password.\n    - #### [isMediumPassword](https://pub.dev/documentation/fleasy/latest/fleasy/StringValidators/isMediumPassword.html)\n      Whether the string is a valid medium password.\n    - #### [isStrongPassword](https://pub.dev/documentation/fleasy/latest/fleasy/StringExtensions/isStrongPassword.html)\n      Whether the string is a valid strong password.\n    - #### [addHttps()](https://pub.dev/documentation/fleasy/latest/fleasy/StringValidators/addHttps.html)\n        Adds https:// to the link if it does not contain https:// or http:// already. This is helpful to make a link openable when using the [url_launcher](https://pub.dev/packages/url_launcher) package for example.\n  \n  \n- ### Extensions on `BuildContext` (Adaptive helpers):\n    - #### [screenSize](https://pub.dev/documentation/fleasy/latest/fleasy/AdaptiveHelpers/screenSize.html)\n      The `MediaQueryData.size` from the nearest `MediaQuery` ancestor.\n    - #### [screenWidth](https://pub.dev/documentation/fleasy/latest/fleasy/AdaptiveHelpers/screenWidth.html)\n      The horizontal extent of the screen size.\n    - #### [screenHeight](https://pub.dev/documentation/fleasy/latest/fleasy/AdaptiveHelpers/screenHeight.html)\n      The vertical extent of the screen size.\n    - #### [screenOrientation](https://pub.dev/documentation/fleasy/latest/fleasy/AdaptiveHelpers/screenOrientation.html)\n      The `MediaQueryData.orientation` from the nearest `MediaQuery` ancestor.\n    - #### [screenIsLandscape](https://pub.dev/documentation/fleasy/latest/fleasy/AdaptiveHelpers/screenIsLandscape.html)\n      Whether the device is in landscape mode.\n    - #### [screenIsPortrait](https://pub.dev/documentation/fleasy/latest/fleasy/AdaptiveHelpers/screenIsPortrait.html)\n      Whether the device is in portrait mode.\n    - #### [formFactor()](https://pub.dev/documentation/fleasy/latest/fleasy/AdaptiveHelpers/formFactor.html)\n      Returns the correct [FormFactor](https://pub.dev/documentation/fleasy/latest/fleasy/FormFactor-class.html) based on the [ScreenWidthBreakpoints](https://pub.dev/documentation/fleasy/latest/fleasy/ScreenWidthBreakpoints-class.html).\n    - #### [byFormFactor\u003cT\u003e(...)](https://pub.dev/documentation/fleasy/latest/fleasy/AdaptiveHelpers/byFormFactor.html)\n      Returns either onMobile, onTablet or onDesktop depending on the current [formFactor](https://pub.dev/documentation/fleasy/latest/fleasy/AdaptiveHelpers/formFactor.html).\n      Example:\n      ```dart\n      int columns = context.byFormFactor\u003cint\u003e(onMobile: 1, onTablet: 2, onDesktop: 4);\n      ```   \n\n- ### Extensions on `BuildContext` (Theme helpers):\n    - #### [theme](https://pub.dev/documentation/fleasy/latest/fleasy/ThemeHelpers/theme.html)\n      The data from the closest Theme instance that encloses the given context.\n    - #### [isDarkTheme](https://pub.dev/documentation/fleasy/latest/fleasy/ThemeHelpers/isDarkTheme.html)\n      Whether the theme brightness is dark.\n    - #### [isLightTheme](https://pub.dev/documentation/fleasy/latest/fleasy/ThemeHelpers/isLightTheme.html)\n      Whether the theme brightness is light.\n \n- ### Extensions on `BuildContext` (Navigation helpers):\n    - #### [pushPage(...)](https://pub.dev/documentation/fleasy/latest/fleasy/NavigationHelpers/pushPage.html)\n      Push the given page onto the navigator.\n    - #### [pushRoute(...)](https://pub.dev/documentation/fleasy/latest/fleasy/NavigationHelpers/pushRoute.html)\n      Push the given route onto the navigator.\n    - #### [popPage(...)](https://pub.dev/documentation/fleasy/latest/fleasy/NavigationHelpers/popPage.html)\n      Pop the top-most route off the navigator and dismiss the keyboard.\n    - #### [canPopPage()](https://pub.dev/documentation/fleasy/latest/fleasy/NavigationHelpers/canPopPage.html)\n      Whether the navigator can be popped.\n    - #### [dismissKeyboard()](https://pub.dev/documentation/fleasy/latest/fleasy/NavigationHelpers/dismissKeyboard.html)\n      Dismisses the keyboard.\n      \n- ### Extensions on `BuildContext` (Flashbars):\n    The extensions use the awesome [flash](https://pub.dev/packages/flash) package:\n    - #### [showSuccessFlashbar(...)](https://pub.dev/documentation/fleasy/latest/fleasy/FlashbarHelpers/showSuccessFlashbar.html)\n      Shows a success flashbar/toast with a customizable text.\n    - #### [showInfoFlashbar(...)](https://pub.dev/documentation/fleasy/latest/fleasy/FlashbarHelpers/showInfoFlashbar.html)\n      Shows an info flashbar/toast with a customizable text.\n    - #### [showErrorFlashbar(...)](https://pub.dev/documentation/fleasy/latest/fleasy/FlashbarHelpers/showErrorFlashbar.html)\n      Shows an error flashbar/toast with a customizable text (optional).\n    - #### [showNoConnectionFlashbar()](https://pub.dev/documentation/fleasy/latest/fleasy/FlashbarHelpers/showNoConnectionFlashbar.html)\n      Shows a no connection flashbar/toast with a customizable text (optional).\n      \n  \n- ### Extensions on `List?`:\n    - #### [isNotBlank](https://pub.dev/documentation/fleasy/latest/fleasy/ListBlankHelpers/isNotBlank.html)\n      Whether the list is not empty nor null.\n    - #### [isBlank](https://pub.dev/documentation/fleasy/latest/fleasy/ListBlankHelpers/isBlank.html)\n      Whether the list is empty or null.\n  \n  \n- ### Extensions on `List`:\n    - #### [find(...)](https://pub.dev/documentation/fleasy/latest/fleasy/ListFindHelper/find.html)\n      Returns either the first element of the list which satisfies the provided test or null if there is none.\n\n\n- ### Extensions on `DateTime`:\n    - #### [copyWith(...)](https://pub.dev/documentation/fleasy/latest/fleasy/DateTimeHelpers/copyWith.html)\n      Returns a copy with the overridden (given) attributes.\n    - #### [format(...)](https://pub.dev/documentation/fleasy/latest/fleasy/DateTimeHelpers/format.html)\n      Returns a String which represents the date formatted by the given pattern.\n    - #### [isToday](https://pub.dev/documentation/fleasy/latest/fleasy/DateTimeHelpers/isToday.html)\n      Whether the date is today.\n    - #### [isYesterday](https://pub.dev/documentation/fleasy/latest/fleasy/DateTimeHelpers/isYesterday.html)\n      Whether the date is yesterday.\n    - #### [isTomorrow](https://pub.dev/documentation/fleasy/latest/fleasy/DateTimeHelpers/isTomorrow.html)\n      Whether the date is tomorrow.\n    - #### [isFutureDay](https://pub.dev/documentation/fleasy/latest/fleasy/DateTimeHelpers/isFutureDay.html)\n      Whether the date is a day in the future.\n    - #### [isSameDay(...)](https://pub.dev/documentation/fleasy/latest/fleasy/DateTimeHelpers/isSameDay.html)\n      Whether the date is on the same day (regardless of the time) as the given date.\n    - #### [timeIsZero](https://pub.dev/documentation/fleasy/latest/fleasy/DateTimeHelpers/timeIsZero.html)\n      Whether the time of the date is zero/empty.\n    - #### [copyWithEmptyTime()](https://pub.dev/documentation/fleasy/latest/fleasy/DateTimeHelpers/copyWithEmptyTime.html)\n      Returns a copy with time set to zero/empty.\n\n- ### `Date` helper class: \n    - #### [today()](https://pub.dev/documentation/fleasy/latest/fleasy/Date/today.html)\n      `DateTime.now()` without time (time set to zero).\n    - #### [tomorrow()](https://pub.dev/documentation/fleasy/latest/fleasy/Date/tomorrow.html)\n      The `DateTime` of tomorrow (without time (time set to zero)).\n    - #### [yesterday()](https://pub.dev/documentation/fleasy/latest/fleasy/Date/yesterday.html)\n      The `DateTime` of yesterday (without time (time set to zero)).\n \n\n- ### `Insets` helper class: \n    A single source of truth for styling values like padding, spacing, corner shape, font sizes, and so on.\n    These constants can then be used in place of hard-coded numeric values.\n    - #### [xxs](https://pub.dev/documentation/fleasy/latest/fleasy/Insets/xxs-constant.html)\n      An extra extra small inset of 2.0.\n    - #### [xs](https://pub.dev/documentation/fleasy/latest/fleasy/Insets/xs-constant.html)\n      An extra small inset of 4.0.\n    - #### [s](https://pub.dev/documentation/fleasy/latest/fleasy/Insets/s-constant.html)\n      A small inset of 6.0.\n    - #### [m](https://pub.dev/documentation/fleasy/latest/fleasy/Insets/m-constant.html)\n      A medium inset of 8.0.\n    - #### [l](https://pub.dev/documentation/fleasy/latest/fleasy/Insets/l-constant.html)\n      A large inset of 10.0.\n    - #### [xl](https://pub.dev/documentation/fleasy/latest/fleasy/Insets/xl-constant.html)\n      An extra large inset of 12.0.\n    - #### [xxl](https://pub.dev/documentation/fleasy/latest/fleasy/Insets/xxl-constant.html)\n      An extra extra large inset of 16.0.\n  \n    \n- ### Flutter Widgets: \n    - #### [Gap](https://pub.dev/documentation/fleasy/latest/fleasy/Gap-class.html)\n      A wrapper around `SizedBox` for making consistent gaps. Example: Instead of `SizedBox(width: 4.0)` you can just write `Gap.w4()`.\n    - #### [EasyFutureBuilder\u003cT\u003e](https://pub.dev/documentation/fleasy/latest/fleasy/EasyFutureBuilder-class.html)\n      A wrapper around `FutureBuilder` which makes it easy to display the various states of fetching data from the given `Future`. See [example](https://github.com/devj3ns/fleasy/blob/main/example/lib/main.dart).\n    - #### [EasyStreamBuilder\u003cT\u003e](https://pub.dev/documentation/fleasy/latest/fleasy/EasyStreamBuilder-class.html)\n      A wrapper around `StreamBuilder` which makes it easy to display the various states of streaming data from the given `Stream`. See [example](https://github.com/devj3ns/fleasy/blob/main/example/lib/main.dart).\n\n- ### Analysis options: \n    You can use the same analysis options which this package uses by simply including them in your `analysis_options.yaml` file:\n    ```yaml\n    include: package:fleasy/analysis_options.yaml\n    ```\n   They are based on:\n    - [package:flutter_lints](https://pub.dev/packages/flutter_lints) (therefore also [package:lints](https://pub.dev/packages/lints))\n    - my favorite lint rules which are not present in [package:flutter_lints](https://pub.dev/packages/flutter_lints)\n      \n   For more details, have a look at the `analysis_options.yaml` file [here](https://github.com/devj3ns/fleasy/blob/main/lib/analysis_options.yaml).\n \n## Note:\n**This package is still in early stages**. If you notice any bugs not present in issues, please file a [new issue](https://github.com/devj3ns/fleasy/issues). If you are willing to fix or enhance things yourself, **you are very welcome to make a [pull request](https://github.com/devj3ns/fleasy/pulls)**.  \n\nAlso: **Feedback and suggestions are very welcome**. Just [open an issue](https://github.com/devj3ns/fleasy/issues).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevj3ns%2Ffleasy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevj3ns%2Ffleasy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevj3ns%2Ffleasy/lists"}