Skip to content

Releases: nylo-core/nylo

v7.2.2

Choose a tag to compare

@agordn52 agordn52 released this 23 Sep 21:57

Nylo v7.2.2

This release moves the boilerplate to nylo_framework: ^7.2.2 (with nylo_support 7.30.1). The headline is Nylo Live: Metro can now reach into your app while it runs in debug mode, so you can inspect it, drive it and put it into a known state from the terminal.

New: Nylo Live

Start your app in debug mode (flutter run), then, from your project folder:

metro live                   # open a shell connected to the running app
metro live:devices           # list this project's running apps
metro live:status            # app, device, route, stack, locale, theme and signed-in user
metro live:run <command>     # run one command, e.g. metro live:run route /profile

Metro finds the app through the Dart Tooling Daemon, with no setup, and only connects to apps built from your project. Nothing is registered in release builds.

The metro live shell

  • Commands drop their prefix: status, route /profile, storage, seed demo_user.
  • Tab completes commands, options, routes, storage keys and seeders, and history is kept between sessions.
  • The prompt shows the device and current route, and the shell reconnects after a hot restart.
  • seed, seed:rollback, export, reload and restart run inside the shell.
  • Pipe a file in to run it as a script, one command per line: metro live < seeds/demo.live.

Built-in commands

Command What it does
data Shows the page on screen: its state, controller, the route data it was opened with, and the state's own fields
routes, route, back List the routes, open a page (with --data), or go back
deeplink Opens a deep link in the app, or shows how deep links are set up in your iOS and Android config
storage, storage:clear Lists local storage, or shows, saves or deletes one value
backpack Lists Backpack, or shows, saves or deletes one value
auth Shows who is signed in, or signs in and out
locale, theme Switches the app's language or theme
state, event, toast Sends data to a state, fires an event, or shows a toast

Every command takes -d <#|name> to pick a device, --all to run on every running app, and --json for machine-readable output.

Live commands

metro make:command seed_cart --live creates a command that runs inside your app, with the same builder/handle shape as a Metro command. Metro registers it in lib/bootstrap/live_commands.dart and wires it into AppProvider for you. Run it with metro app:seed_cart while the app is running.

Seeders

metro make:seeder demo_user creates a Seeder in lib/app/seeders/. Write up() to put the app into a known state: sign a user in, finish onboarding, add sample data. Inside metro live, seed demo_user runs it, and seed:rollback demo_user puts back every storage and Backpack value it changed, even across a hot restart.

Storage snapshots

Inside metro live, export demo_user saves the app's current storage and Backpack as a seeder you can commit and replay, or as a JSON file with --to. seed <file> loads a snapshot back.

New: page actions

Pages created with metro make:page get a static actions, so other code can call them:

HomePage.actions.showToast("hello");
HomePage.actions("shake_the_logo");

Subclass PageStateActions with body-less methods for typed actions that survive --obfuscate builds.

New: built-in text for Nylo's UI

Nylo's toasts, confirm dialogs, validation messages and field labels now resolve through nylo.* translation keys, falling back to built-in English when a key is missing. The boilerplate's lang/en.json and lang/es.json include the new keys.

Also new since v7.0.0

  • Deep linking with Nylo.onIncomingLink, NyDeepLinkHandler and metro make:deep_link_provider
  • NyStateManaged widgets (with multiple instances) and stateAction(action, state:, id:)
  • Str, Number, Arr and Obj helper classes
  • Test helpers: visit, tapText, fillField, scrollTo, assertOnRoute, expectVisible, expectTextVisible, actingAsGuest, expectApiCalledWith and more
  • Subfolders for every make:* command, e.g. metro make:stateless_widget login/BrandPanel
  • Metro commands shipped by packages through a metro_commands.json
  • FormValidator.that(...) and closure validators on InputField
  • Namespaced translation keys and a fallback locale
  • NyConnectivity.hasInternet() and satellite connectivity in Connective
  • .env values can reference other keys, e.g. APP_URL=https://${APP_DOMAIN}

Boilerplate changes

  • nylo_framework ^7.1.29 → ^7.2.2, plus google_fonts ^8.2.1, analyzer ^14.3.0, intl ^0.20.3, cupertino_icons ^1.0.9 and font_awesome_flutter ^11.0.0
  • Android build files use the Kotlin DSL (build.gradle.kts, settings.gradle.kts), and the manifest declares INTERNET and SCHEDULE_EXACT_ALARM
  • The iOS minimum deployment target is 15.0
  • lang/en.json and lang/es.json gain the nylo.* keys
  • NotFoundPage extends NyPage, and the home page's ListTiles sit inside a Material for correct ink and taps
  • Explicit types and small fixes across the app code and tests, unused imports removed, and analysis_options.yaml excludes android/

Upgrading an existing app

  1. Set nylo_framework: ^7.2.2 in pubspec.yaml and run flutter pub get.
  2. If you use skeletonizer's API directly, it's now on 3.0: SkeletonizerConfigData is no longer a ThemeExtension (wrap your app in SkeletonizerConfig(data: ..., child: ...)), SkeletonizerConfigData.light() and .dark() are gone, and BoneButtonType.elevated/filled/text are now prominent/prominent/plain. LoadingStyle.skeletonizer() needs no changes.
  3. metro make:page now generates bool get stateManaged => true. To call an existing page through actions, add static final actions = path.actions; and stateManaged => true to it.
  4. New live commands and seeders need a hot restart before a running app can run them.

v7.0.0

Choose a tag to compare

@agordn52 agordn52 released this 06 Feb 14:15

Nylo v7.0.0

Nylo v7.0.0 is a major release with significant architectural improvements, a streamlined project structure, and modernized APIs. This release focuses on simplifying configuration, improving the developer experience, and bringing the framework up to date with the latest Dart and Flutter standards.

Breaking Changes

Boot Sequence Rewrite

  • Boot class now returns BootConfig instead of using separate nylo() and finished() static methods. The new BootConfig pattern consolidates setup and boot into a single configuration object.
  • Nylo.init() API changed - now accepts env, setup (a BootConfig), and appLifecycle parameters instead of setup/setupFinished callbacks.
  • _setup() renamed to _init() in boot.dart for clarity.
  • Removed lib/bootstrap/app.dart - the Main widget has moved to lib/resources/widgets/main_widget.dart.

Provider API Changes

  • AppProvider.boot() renamed to AppProvider.setup() - the primary provider method is now setup().
  • afterBoot() renamed to boot() - runs after initialization is complete.
  • New nylo.configure() method replaces the previous chain of nylo.addX() calls. All configuration (themes, decoders, controllers, localization, toast notifications, etc.) is now passed through a single configure() method.

Configuration File Reorganization

  • config/decoders.dart moved to bootstrap/decoders.dart
  • config/events.dart moved to bootstrap/events.dart
  • config/providers.dart moved to bootstrap/providers.dart
  • config/theme.dart moved to bootstrap/theme.dart
  • config/keys.dart renamed to config/storage_keys.dart - Keys class renamed to StorageKeysConfig.
  • config/toast_notification_styles.dart replaced by config/toast_notification.dart - now uses ToastNotificationConfig class with a styles map.

Removed Files

  • config/form_casts.dart - form casts configuration removed.
  • config/validation_rules.dart - validation rules configuration removed.
  • app/forms/login_form.dart - login form removed from boilerplate.
  • app/forms/style/form_style.dart - form style class removed.
  • resources/widgets/safearea_widget.dart - safe area widget removed.

Theme System Overhaul

  • ColorStyles now extends ThemeColor (previously BaseColorStyles) and uses structured color groups (GeneralColors, AppBarColors, BottomTabBarColors) instead of flat color properties.
  • Theme files reorganized into light/ and dark/ subdirectories under resources/themes/.
  • New shared base_theme.dart - buildAppTheme() function provides a shared theme builder for both light and dark themes, eliminating duplicate theme code.
  • ThemeColor helper renamed to ThemeColorResolver in bootstrap/helpers.dart.
  • Theme functions now accept ColorStyles and Brightness instead of just ColorStyles.

Networking Changes

  • ApiService constructor simplified - no longer accepts BuildContext. Constructor is now parameterless.
  • PrettyDioLogger removed - replaced with built-in useNetworkLogger: true option.
  • Interceptors now use spread syntax with ...super.interceptors for proper inheritance.
  • url_launcher dependency removed - replaced with framework-provided openUrl() helper.

Asset Directory Change

  • public/ directory replaced with assets/ - all assets (fonts, images, app icons) moved from public/ to assets/.
  • public/postman/ directory removed entirely.

SDK Requirements

  • Dart SDK requirement updated to ^3.10.7 (previously >=3.4.0 <4.0.0).
  • Flutter version constraint removed from pubspec (previously >=3.24.0 <4.0.0).

Dependency Changes

  • nylo_framework updated to ^7.0.0 (from ^6.9.2).
  • google_fonts updated to ^8.0.1 (from ^6.3.3).
  • analyzer updated to ^10.0.0 (from ^9.0.0).
  • Removed: url_launcher, pretty_dio_logger, path_provider, flutter_local_notifications, scaffold_ui, rename.

Added

New AppConfig Class

  • New lib/config/app.dart provides a centralized AppConfig final class with static fields for appName, version, environment, apiBaseUrl, assetPath, and showSplashScreen.

New Main Widget

  • lib/resources/widgets/main_widget.dart - a dedicated Main widget that serves as the app shell with routing, theme mode, and lifecycle management.

New LocalAsset Widget

  • lib/resources/widgets/local_asset_widget.dart - convenience widget for displaying local image assets with support for width, height, fit, opacity, and border radius.

Bottom Sheet Modals System

  • lib/resources/widgets/bottom_sheet_modals/bottom_sheet_modals.dart - new BottomSheetModal class extending NyBaseModal for displaying modal bottom sheets.
  • lib/resources/widgets/bottom_sheet_modals/modals/logout_modal.dart - pre-built logout confirmation modal.

AuthenticatedEvent

  • lib/app/events/authenticated_event.dart - new event that calls routeToAuthenticatedRoute() for handling post-authentication navigation.

Download Fonts Metro Command

  • lib/app/commands/download_fonts.dart - new Metro CLI command (metro app:download_fonts) that downloads Google Fonts, auto-detects the font from design.dart, updates pubspec.yaml with font families, and updates the design configuration.

Spanish Localization

  • lang/es.json - added Spanish language translation file.

New Test Files

  • test/example_test.dart and test/home_page_test.dart replace the previous test/widget_test.dart.

Environment Configuration

  • Nylo.init() now accepts an env parameter for environment variable resolution (using generated Env.get).
  • .env and lib/bootstrap/env.g.dart added to .gitignore.

Changed

Simplified Metro Command Usage

  • Commands now use the shorter metro CLI format (e.g., metro app:current_time) instead of the longer dart run nylo_framework:main prefix.
  • Custom commands file renamed from custom_commands.json to commands.json.

Home Page Redesigned

  • Complete UI overhaul of the home page with a links-based layout, skeletonizer loading style, and improved structure.

Router Simplified

  • Removed boilerplate comments and example code from lib/routes/router.dart.

Toast Notifications

  • Toast notification styling now uses ToastAnimation.springFromTop() and ToastAnimation.fadeOut() for entrance and exit animations.

Loading Style Default

  • Default loading style changed to LoadingStyle.skeletonizer() (from LoadingStyle.normal()).

Model Improvements

  • User.key is now static final instead of static.

Documentation Links

  • All documentation links updated from 6.x to 7.x across the entire codebase.

Upgrade Guide

To upgrade from Nylo v6.x to v7.0.0:

  1. Update pubspec.yaml to use nylo_framework: ^7.0.0
  2. Move config files: decoders.dart, events.dart, providers.dart, theme.dart from config/ to bootstrap/
  3. Rename config/keys.dart to config/storage_keys.dart and update the class name to StorageKeysConfig
  4. Rewrite AppProvider to use setup() and boot() methods with nylo.configure()
  5. Update Boot class to use the new BootConfig pattern
  6. Move assets from public/ to assets/
  7. Restructure theme files into light/ and dark/ subdirectories with the new ColorStyles interface
  8. Remove unused dependencies (url_launcher, pretty_dio_logger, etc.)
  9. Create lib/config/app.dart with AppConfig class
  10. Add lib/resources/widgets/main_widget.dart

v6.10.6

Choose a tag to compare

@agordn52 agordn52 released this 13 Dec 09:52
  • Update android config
  • pubspec.yaml update

v6.10.5

Choose a tag to compare

@agordn52 agordn52 released this 14 Nov 18:00
  • Fix NyLanguageSwitcher AssetManifest.json
  • Added NyRichText.template to construct rich text from a template string
  • Update pubspec.yaml

v6.10.4

Choose a tag to compare

@agordn52 agordn52 released this 12 Oct 02:42
  • added repeatOn to PushNotification class to allow repeating notifications
  • pubspec.yaml update

v6.10.3

Choose a tag to compare

@agordn52 agordn52 released this 15 Sep 01:51
  • Update pubspec.yaml

v6.10.2

Choose a tag to compare

@agordn52 agordn52 released this 31 Aug 01:43
  • Remove cxx debug files from Android
  • Pubspec.yaml update

v6.10.1

Choose a tag to compare

@agordn52 agordn52 released this 17 Aug 00:14
  • Fix controller stub
  • Update state managed stub
  • Fix stateData in NyState to return the correct data type
  • pubspec.yaml updates

v6.10.0

Choose a tag to compare

@agordn52 agordn52 released this 17 Jul 06:09
  • Added appLifecycle to Nylo.init. This will allow you to globally handle your app's lifecycle.
  • Added excludeKeys to NyStorage.deleteAll. This will allow you to exclude certain keys from being deleted when calling deleteAll.
  • Added hasExecutedTaskOnce in NyScheduler. This will allow you to check if a task has been executed.
  • Add missing annotations
  • pubspec.yaml updates

v6.9.3

Choose a tag to compare

@agordn52 agordn52 released this 24 Jun 07:06
  • Added set to NySession class. This will allow you to set a value in the session.
  • Added onFailure parameter to isSuccessful method in NyValidator.
  • Fix getInitialRouteName to return the correct initial route name when, when is used.
  • Added PullableConfig to pullable widget.
  • Added new visibleWhen extension to Widget class. This will allow you to show or hide a widget based on a condition.
  • Added onPop to the pushTo method. This will allow you to receive a callback when the page is popped.
  • Added removeFromIndex to NyPullToRefresh. This will allow you to remove an item from the list at a specific index.
  • Bug fix for NyTextField onChanged method.
  • Fix analysis_options.yaml