| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-09-28 | 5.6 kB | |
| v7.31.0 source code.tar.gz | 2026-09-28 | 735.3 kB | |
| v7.31.0 source code.zip | 2026-09-28 | 928.6 kB | |
| Totals: 3 Items | 1.7 MB | 0 | |
Added
- File storage - Named disks for keeping files, in the style of Laravel's
Storagefacade:disk('documents').put('reports/q3.pdf', bytes), orFileStorage.put('notes.txt', 'Hello')for the default disk. Five disks are ready without any configuration:local(the default, in the app's support folder undernylo/),documents,cache,temp(pruned after a day) andassets(the app bundle underassets/, read-only).nylo.configure(disks: ..., defaultDisk: ...)andnylo.addDisks(...)add or replace disks, built withDiskConfig.local(in aDiskRoot:support,documents,cache,temporary,library,downloadsorexternal),DiskConfig.path,DiskConfig.assets,DiskConfig.memory,DiskConfig.scoped(a folder inside another disk) orDiskConfig.custom(your ownDiskDriver), andFileStorage.build(config)makes one on demand. On the web, local disks live in memory. Everything is exported frompackage:nylo_support/ny_core.dart, along withXFile Disk- Reads files withget,bytes,json<T>(decoding models throughmodelDecoders) andreadStream, and writes them withput(aString, bytes or a byte stream),putJson,appendandprepend.putFilestores anXFilefrom image_picker, file_picker or camera, aFile, a path or bytes under a random 40-character name with the extension its contents show, streaming it rather than loading it into memory;putFileAstakes the name. Alsocopy,move,copyToDisk,moveToDisk,delete(one path or many),download(throughNyApiService, so your interceptors apply, withonProgressandcancelToken; an existing file is replaced only once the download finishes),exists,missing,directoryExists,size,lastModified,mimeType(from the file's first bytes and its extension),checksum(md5by default, orsha1,sha224,sha256,sha384orsha512),pathandurlfor plugins that need a real file,list,files,allFiles,directories,allDirectories,makeDirectory,deleteDirectory,scope(a disk rooted at a folder, e.g. one per user),usageandprune. Paths are relative to the disk, always use/, and..can never climb above the disk's root. Every failure throws aDiskExceptionthat names the disk and path:DiskFileNotFoundException,DiskReadOnlyException,DiskPathTraversalException,DiskCorruptedPathExceptionorDiskNotConfiguredExceptionDiskImage- AnImageProviderfor an image on a disk, e.g.CircleAvatar(backgroundImage: DiskImage('avatars/me.jpg')). It reads through the disk, so it works with every driver and with fakes, and writing the file through its disk evicts the cached image, so the new picture shows on the next frameDiskDriver- The interface behind every disk, withLocalDiskDriver,AssetDiskDriverandMemoryDiskDriverbuilt in.testDiskDriver(description, create)runs the contract every built-in writable driver passes against a driver of your own- File storage fakes -
FileStorage.fake('photos')swaps a disk for an empty in-memoryFakeDiskwithassertExists,assertMissing,assertCount,assertDirectoryEmptyandassertEmpty.FakeFile.image('avatar.png', width: 64, height: 64)makes a real, decodable PNG as anXFile, andFakeFile.create('invoice.pdf', kilobytes: 120)a file of that many zero bytes with the MIME type its name suggests; both live in memory, so they work insidetestWidgets.NyTest.init()makes every writable disk an in-memory fake on first use (read-only disks such asassetsstay real),NyTest.reset()empties them andNyTest.dump()lists their files. All exported frompackage:nylo_support/testing/ny_testing.dart lockRelease(onError:)- AnExceptionthrown byperformgoes toonError(error, stackTrace)once the lock is released, so the caller can react: show what went wrong, undo an optimistic change, or try again. Available onNyBaseState,NyController,StateActionandPageStateActions. WithoutonErrorthe exception is logged as before, now with its stack trace- New dependencies -
cross_file(^0.3.5+5, the line image_picker, file_picker and share_plus depend on),mime,cryptoandpath, for file storage
Fixed
- An empty
Field.datestays empty - The field showed today (or the style'sfirstDate) while its value was still null, so the form submitted nothing for the date on screen. It now shows nothing until a date is chosen, and the picker still opens on today. It also shows a date set after it opened throughsetValue,clearempties both what it shows and its value, and it keeps the field's label under a styledecorationthat has no label or hint of its own Field.pickergrows to fit its text - The box had a fixedcontainerHeight, so a long choice or a large text size was clipped.containerHeightis now the minimum height, and the field name keeps to one line and the choice to two, ending in an ellipsisField.chipsshows which chips are selected in dark mode - Selected and unselected chips were both drawn in the dark surface color. Selected chips now use the selected color (white by default), and a label or checkmark that would be hard to read on its chip (below 4.5:1 contrast) switches to black or white- The password visibility toggle is a labelled button -
InputField's show/hide password icon is now anIconButton, at least 48pt square, with a "Show password" / "Hide password" tooltip that screen readers announce (the newnylo.input_field.show_passwordandnylo.input_field.hide_passwordkeys)