{"id":20850097,"url":"https://github.com/sofluffyos/fluda","last_synced_at":"2026-01-11T13:34:53.968Z","repository":{"id":129364981,"uuid":"269135224","full_name":"SoFluffyOS/fluda","owner":"SoFluffyOS","description":"Fluda is a library which makes FLUtter application development faster and easier. It makes your DArt code clean and easy to read.","archived":false,"fork":false,"pushed_at":"2023-03-11T07:22:46.000Z","size":304,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-01T00:26:46.915Z","etag":null,"topics":["dart","flutter","flutter-dart","flutter-package","flutter-plugin","flutter-ui","flutter-widget"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/fluda","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SoFluffyOS.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-06-03T16:10:54.000Z","updated_at":"2023-08-06T00:44:48.000Z","dependencies_parsed_at":"2023-07-27T19:45:12.754Z","dependency_job_id":null,"html_url":"https://github.com/SoFluffyOS/fluda","commit_stats":null,"previous_names":["simonpham/fluda"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoFluffyOS%2Ffluda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoFluffyOS%2Ffluda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoFluffyOS%2Ffluda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SoFluffyOS%2Ffluda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SoFluffyOS","download_url":"https://codeload.github.com/SoFluffyOS/fluda/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253775037,"owners_count":21962272,"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":["dart","flutter","flutter-dart","flutter-package","flutter-plugin","flutter-ui","flutter-widget"],"created_at":"2024-11-18T03:08:00.675Z","updated_at":"2026-01-11T13:34:53.933Z","avatar_url":"https://github.com/SoFluffyOS.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Fluda\n\nFluda is a library which makes Flutter application development faster and easier. It makes your code clean and easy to read.\n\n*Note*: Fluda is still under development.\n[Feedback](https://github.com/simonpham/fluda/issues) and [Pull Requests](https://github.com/simonpham/fluda/pulls) are most welcome!\n\n## Usage\n\n### Extensions\n\n#### BuildContext\n\n| Extension                      | Example Usage       | Original Equivalent      |\n|--------------------------------|---------------------|--------------------------|\n| `MediaQueryData get query`     | `context.query`     | `MediaQuery.of(context)` |\n| `FocusScopeNode get focus`     | `context.focus`     | `FocusScope.of(context)` |\n| `ThemeData get theme`          | `context.theme`     | `Theme.of(context)`      |\n| `NavigatorState get navigator` | `context.navigator` | `Navigator.of(context)`  |\n\n#### FocusScopedNode\n\n| Extension        | Example Usage                  | Original Equivalent                                                             |\n|------------------|--------------------------------|---------------------------------------------------------------------------------|\n| `hideKeyboard()` | `context.focus.hideKeyboard()` | `if (!FocusScope.of(context).hasPrimaryFocus) FocusScope.of(context).unfocus()` |\n\n#### Boolean\n\n| Extension           | Example Usage                                    | Original Equivalent                         |\n|---------------------|--------------------------------------------------|---------------------------------------------|\n| `ifTrue(yes, [no])` | `someBool.ifTrue(Text(\"Hello\"))`                 | `someBool ? Text(\"Hello\") : SizedBox()`     |\n|                     | `someBool.ifTrue(firstVariable, secondVariable)` | `someBool ? firstVariable : secondVariable` |\n\n#### Number\n\n| Extension                                   | Example Usage  | Original Equivalent |\n|---------------------------------------------|----------------|---------------------|\n| `bool get isEven`                           | `5.isEven`     | `(5 % 2 == 0)`      |\n| `bool get isOdd`                            | `5.isOdd`      | `(5 % 2 != 0)`      |\n| `bool get isPositive`                       | `5.isPositive` | `(5 \u003e 0)`           |\n| `bool get isNegative`                       | `5.isNegative` | `(5 \u003c 0)`           |\n| `Iterable\u003cint\u003e to(int end, {int step = 1})` | `2.to(5)`      | `[2, 3, 4, 5]`      |\n\n#### String\n\n| Extension                   | Example Usage                            | Original Equivalent                                                                 |\n|-----------------------------|------------------------------------------|-------------------------------------------------------------------------------------|\n| `bool get isEmptyOrNull`    | `\"Hello\".isEmptyOrNull`                  | `\"Hello\" == null ⎮⎮ \"Hello\".isEmpty`                                                |\n| `bool get isNotEmptyOrNull` | `\"Hello\".isNotEmptyOrNull`               | `\"Hello\" != null \u0026\u0026 \"Hello\".isNotEmpty`                                             |\n| `int toInt()`               | `\"23\".toInt()`                           | `int.parse(\"23\")`                                                                   |\n| `double toDouble()`         | `\"23.3\".toDouble()`                      | `double.parse(\"23.3\")`                                                              |\n| `bool validate()`           | `\"Simon Pham\".validate(RegexUtils.name)` | `RegExp(nameRegex).hasMatch(\"Simon Pham\")`                                          |\n| `bool validateEmail()`      | `\"email@email.com\".validateEmail()`      | `RegExp(emailRegex).hasMatch(\"email@email.com\")`                                    |\n| `Future launch()`           | `\"https://some.url\".launch()`            | `if (await url.canLaunch(\"https://some.url\")) url.launch(\"https://some.url\")`       |\n| `Future dial()`             | `\"0987654321\".dial()`                    | `if (await url.canLaunch(\"tel:0987654321\")) url.launch(\"tel:0987654321\")`           |\n| `Future sendMail()`         | `\"me@email.com\".sendMail()`              | `if (await url.canLaunch(\"mailto:me@email.com\")) url.launch(\"mailto:me@email.com\")` |\n\n#### PageController\n\n| Extension                     | Example Usage            | Description                                 |\n|-------------------------------|--------------------------|---------------------------------------------|\n| `Future\u003cvoid\u003e goTo(int page)` | `pageController.goTo(2)` | Animate PageView to page index `2` smoothly |\n\n#### ScrollController\n\n| Extension                            | Example Usage                   | Description                                         |\n|--------------------------------------|---------------------------------|-----------------------------------------------------|\n| `Future\u003cvoid\u003e goTo(double position)` | `scrollController.goTo(233.99)` | Animate Scroll widget to position `233.99` smoothly |\n\n#### TextEditingController\n\n| Extension          | Example Usage                       | Description                       |\n|--------------------|-------------------------------------|-----------------------------------|\n| `void selectAll()` | `textEditingController.selectAll()` | Select all text in the text field |\n\n#### Constants\n\n| Constant      | Value  |\n|---------------|--------|\n| `FludaX.x0_5` | `4.0`  |\n| `FludaX.x`    | `8.0`  |\n| `FludaX.x2`   | `16.0` |\n| `FludaX.x3`   | `24.0` |\n| `FludaX.x4`   | `32.0` |\n| `FludaX.x5`   | `40.0` |\n| `FludaX.x6`   | `48.0` |\n| `FludaX.x7`   | `56.0` |\n| `FludaX.x8`   | `64.0` |\n\n| Constant (`Duration`) | Value   |\n|-----------------------|---------|\n| `FludaDuration.ms`    | `100ms` |\n| `FludaDuration.ms2`   | `200ms` |\n| `FludaDuration.ms3`   | `300ms` |\n| `FludaDuration.ms4`   | `400ms` |\n| `FludaDuration.ms5`   | `500ms` |\n| `FludaDuration.ms6`   | `600ms` |\n| `FludaDuration.ms7`   | `700ms` |\n| `FludaDuration.ms8`   | `800ms` |\n\n\n## Issues\n\nPlease file Fluda specific issues, bugs, or feature requests in our [issue tracker](https://github.com/simonpham/fluda/issues/new).\n\nPlugin issues that are not specific to Fluda can be filed in the [Flutter issue tracker](https://github.com/flutter/flutter/issues/new).\n\n## Contributing\n\nIf you wish to contribute a change to any of the existing plugins in this repo,\nplease review our [contribution guide](https://github.com/simonpham/fluda/blob/master/CONTRIBUTING.md),\nand send a [pull request](https://github.com/simonpham/fluda/pulls).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsofluffyos%2Ffluda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsofluffyos%2Ffluda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsofluffyos%2Ffluda/lists"}