Kabo

@kaboc.bsky.social

App Developer Dart/Flutter, Go, SQL, PocketBase https://github.com/kaboc https://kaboc.cc/

🚀 Just dropped: Litestream VFS. Query SQLite databases directly from S3 with zero download penalty. It uses HTTP range headers for lazy fetching and LTX for compaction, enabling instant startup even for large databases. 🔗 ➡️ fly.io/blog/litestr...

Bild

I'm curious about the min window size allowed in iPadOS 26's multi-window system. Some of my apps are responsive and look good at 100x100, but likely overflow at 50x50.

Finally solved the Go dependency issue I'd been battling in IntelliJ IDEA for months. It turns out a permission error related to the env file in GOROOT – which should have been a file – had somehow been replaced with a directory of the same name. So bizarre!

I struggled a bit to find out how to scroll to an element smoothly with scrollIntoView() in a website made with Jaspr. Its argument needs to be JSAny, but js_interop doesn't (apparently) have a method to convert a Dart Map to JSObject. Evetually turned out jsify() was the one.

Scrolling obviously stutters in my app. Seems the cost of creating widgets is higher than the benefit of lazy creation in SliverList. Using Column makes it smoother, but the initial build is probably more costly. I wonder whether to fix the cause now. It isn't that noticeable in profile mode.

Asked an AI about things to be cautious about when using the WAL mode in SQLite on a mobile app. I didn't know WAL might not work on an SD card. I'm lucky I'm using Drift for DB operations but also using sqflite's getDatabasesPath() together to get `data/data/xxxx/databases/`, which isn't in SD.

I saw this post just the right time when I was struggling to access ‛window.navigator.language‛ using package:web on a static site created with Jaspr, only to get an incompatibily error. The universal_web package (used together with kIsWeb) solved the issue.

Kilian Schulte@schultek.dev · 2y ago

New 'universal_web' package adds platform compatibility to 'web' package: This wraps the 'web' package and provides stubs for non-web platforms, which makes it directly importable in all environments. No more conditional imports. Used by Jaspr for all web interactions. pub.dev/packages/uni...

Started to migrate my developer website from Svelte to Jaspr. The experience is much better than when I created part of my blog site with it 2.5 years ago. It's impressive that even styling is possible via Dart, which was not possible before IIRC.

Didn't know I can use the the use-named-parameters flag in l10n.yaml. According to the change log, it's been available since Flutter 3.19.

I was looking for a long time for a way to remove granted entitlements on RevenueCat dashboard, and I realised just yesterday that I had to uncheck the "Sandbox data". 1. Customers > Sandbox 2. Choose a customer from the list 3. Uncheck the checkbox at the top right

Drift stores a date and time as an epoch time in seconds by default. To change the precision to milliseconds, it is necessary to either (a) use IntColumn + a converter instead of DateTimeColumn, or (b) configure to store DateTime as a string. Both have pitfalls. Wish it was easier.

Logging in is not required in my app, but it is necessary if a user has purchased a subscription at the Play Store and wanna enable it on iOS without re-purchasing at the App Store. Will the app be rejected if I describe the flow for users and Apple notices it?

Topics of a package seem to affect the order of search results on pub.dev. I recently added "rich-text", "link" and some more topics to one of my packages, which had had only "text" before. A search by "rich text" or "link" now shows the package in the first or second page.

IntrinsicHeight sometimes doesn't align the height of children of a Row (dunno why). CustomMultiChildLayout is another option, but cannot be used if the Row height is unbounded. So I created a custom RenderFlex as a last resort. IMO, this should be possible out of the box in #FlutterDev.

Well I'll be reverting that change. When using workspaces all of the workspaces in the project seem to be bundled with the app, even if not referenced by the app pubspec. Surely that's a bug.

Keeping a tooltip open is possible with TooltipTriggerMode.manual + GestureDetector + TooltipState.ensureTooltipVisible() in Flutter, but a tap on the Tooltip child reopens the tooltip instead of closing it. As a workaround, I had to use Tooltip.dismissAllToolTips() to get the visibility status.

The visibility status (_visible) of a tooltip is private. As a workaround, I had to use Tooltip.dismissAllTooltips() to get the status. The method is actually not for getting the status, so using it is a bit hacky. The API of the Tooltip widget is weird IMO.

It's kind of fun to try opening mobile apps offline and see what happens. X and Mastodon show cached data, and oh, BlueSky... I don't think all kinds of apps should support offline use, but it's definitely bad that an app surprises already logged in users by showing the login page.

Wondering why the current state getter added to go_router several weeks ago returns a nullable type. Neither currentConfiguration, last or buildState() is nullable.

Bild