Sign in

Kabo

@kaboc.bsky.social
337 followers 132 following 81 posts

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

PostsRepliesMedia
Reposted by Kabo
Fly.io @fly.io · 12/12/2025
🚀 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...
0101
Kabo @kaboc.bsky.social · 10/06/2025
iOS and iPad used to have a limited variety of screen sizes. It was a developer- and designer-friendly advantage over Android. Is that not as true anymore?
010
Kabo @kaboc.bsky.social · 10/06/2025
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.
100
Kabo @kaboc.bsky.social · 30/05/2025
I think it happens on 3.24 as well, unless you set ThemeData.useMaterial3 to true. It's kind of funny they tried to fix the bug but decided not to merge it because it would introduce a breaking change, despite the fact that the bug itself already introduced one. github.com/flutter/flut...
github.com
TextDecoration doesn't inherit text color in Material3 · Issue #129553 · flutter/flutter
Is there an existing issue for this? I have searched the existing issues I have read the guide to filing a bug Steps to reproduce Create a new Flutter app and set useMaterial3 to true Create a text...
110
Kabo @kaboc.bsky.social · 22/05/2025
My point is, I'd rather see stable versions released less frequently than the current rush to release unstable versions to meet events or quarterly cycles.
010
Kabo @kaboc.bsky.social · 22/05/2025
I'm still on Flutter 3.24.5, which I believe was the last truely stable version. When will critical bugs in 3.27 and 3.29 be fixed? Even then, these versions won't receive backports, so for me, they'll essentially remain untouched forever. E.g. github.com/flutter/flut... github.com/flutter/flut...
github.com
Flutter 3.27.x | Android 10, 11 | Crash: "drawRenderNode called on a context with no surface!" · Issue #162147 · flutter/flutter
Steps to reproduce Issue Summary: Our app uses multiple screens with WebView (flutter_inappwebview). After upgrading Flutter from version 3.24.4 to 3.27.1 to address this issue on iOS 18.2, we star...
140
Kabo @kaboc.bsky.social · 22/05/2025
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!
000
Kabo @kaboc.bsky.social · 11/04/2025
Sadly, just introducing a HoverGestureRecognizer wouldn't make it easier. TextSpan already has onEnter/onExit, with which changing a colour on hover is still hard. Hope it will become as easy as it is with CSS, someday without a third-party package. (I think so as an author of a related package.)
000
Kabo @kaboc.bsky.social · 11/04/2025
An even better/easier way is to use GestureDetector instead of TextSpan + TapGestureRecognizer when there is no specific reason to use TextSpan. This way, you can avoid thinking about how you dispose the recognizer.
Link(
  uri: uri,
  target: LinkTarget.blank,
  builder: (context, followLink) => MouseRegion(
    cursor: SystemMouseCursors.click,
    child: GestureDetector(
      onTap: followLink,
      child: Text(
        '$uri',
        style: TextStyle(
          color: Theme.of(context).colorScheme.primary,
          decoration: TextDecoration.underline,
          decorationColor: Theme.of(context).colorScheme.primary,
        ),
        overflow: overflow,
        maxLines: maxLines,
      ),
    ),
  ),
)
000
Kabo @kaboc.bsky.social · 10/04/2025
Just FYI, the Link widget is usually better on the web. > A widget that renders a real link on the web pub.dev/documentatio...
pub.dev
Link class - link library - Dart API
API docs for the Link class from the link library, for the Dart programming language.
010
Kabo @kaboc.bsky.social · 03/04/2025
030
Kabo @kaboc.bsky.social · 21/03/2025
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.
010
Kabo @kaboc.bsky.social · 20/03/2025
Considered Turso and skipped it recently, but wanna think about using it in the future. I guess it is now one of the most affordable cloud relational database services. Only $4.99 (or 5.99) /month for 1,000 databases and 2.5 billion monthly rows read. turso.tech/blog/turso-c...
turso.tech
Turso Cloud Debuts the New Developer Plan
A new developer plan that offers more generous allowances and a lower price than the Hobby plan.
000
Kabo @kaboc.bsky.social · 14/03/2025
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.
000
Kabo @kaboc.bsky.social · 12/03/2025
I had been a little skeptical that running a lot of queries consecutively wouldn't be a problem in SQLite (and actually haven't measured the performance), but found the document had a dedicated page about it. It says even N+1 Queries are fine. www.sqlite.org/np1queryprob...
sqlite.org
Many Small Queries Are Efficient In SQLite
000
Kabo @kaboc.bsky.social · 10/02/2025
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.
000
Kabo @kaboc.bsky.social · 22/01/2025
So Turso will allow us to create up to 500 databases with 1-day PITR and no cold starts for free, or with 10-day PITR, 3-day audit logs and no archiving for only $4.99 (down from $9). Sounds very affordable and nice! turso.tech/blog/upcomin...
turso.tech
Upcoming changes to the Turso Platform and Roadmap
With a renewed focused on the rewrite of SQLite, we will make some changes to our offering
000
Kabo @kaboc.bsky.social · 13/01/2025
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.
020
Kabo @kaboc.bsky.social · 11/01/2025
Yeah it would be better to stick to the web tech you're already use to. For me, who is not a web person, Jaspr feels straightforward as it is really similar to Flutter, and I don't find it really verbose. Notations used instead of HTML are more concise than they used to be.
000
Kabo @kaboc.bsky.social · 11/01/2025
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.
141
Kabo @kaboc.bsky.social · 28/12/2024
Do you mean the usage? It's as easy as adding `use-named-parameters: true` to l10n.yaml.
020
Kabo @kaboc.bsky.social · 28/12/2024
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.
110
Kabo @kaboc.bsky.social · 27/12/2024
The UI is so unfriendly. The list shows the customer with the "promo" status, but the next page doesn't show promo entitlements. It is also a weird flow that I need to enter the sandbox page and then uncheck the sandbox checkbox.
000
Kabo @kaboc.bsky.social · 27/12/2024
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
100
Kabo @kaboc.bsky.social · 25/12/2024
Merry Christmas
000
Kabo @kaboc.bsky.social · 24/12/2024
Some pitfalls: a - The converter is not used for placeholder variables - Not warned about a wrong type there b - DateTime string contains microseconds. Comparing a value in a column with a millisec timestamp can lead to a bug - QueryRow has DateTimes in UTC, while DataClass has them in local time
000
Kabo @kaboc.bsky.social · 24/12/2024
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.
100
Kabo @kaboc.bsky.social · 23/12/2024
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?
000
Kabo @kaboc.bsky.social · 20/12/2024
Yeah, Google and the likes often show better results, and so I usually do the same as you. But I guess most people probably go to pub.dev first. I hope its search engine will be improved.
010
Kabo @kaboc.bsky.social · 20/12/2024
But it doesn't appear early in the results with slighly different keywords like "richtext", "links" and "linkify".
110
Kabo @kaboc.bsky.social · 20/12/2024
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.
100
Kabo @kaboc.bsky.social · 18/12/2024
Learned `FontFeature.tabularFigures()` (or `FontFeature.enable('tnum')`) as well as other font features from this article several years ago. suragch.medium.com/font-feature... The page now asks me to create an account. This is why I don't like Medium...
suragch.medium.com
Font Features in Flutter
A little extra help for styling your text
010
Kabo @kaboc.bsky.social · 18/12/2024
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.
020
Kabo @kaboc.bsky.social · 12/12/2024
Pocketbase Just Got An SQL Upgrade youtu.be/KOk_Tw8qZYQ?...
youtu.be
Pocketbase Just Got An SQL Upgrade
YouTube video by Early Morning Dev
020
Reposted by Kabo
Josh Burton @josh.app · 12/12/2024
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.
141
Kabo @kaboc.bsky.social · 05/12/2024
google_adsense 0.0.1 Google AdSense plugin for Flutter Web pub.dev/packages/goo... Looks nice as a new way to monetize web sites/apps created with Flutter.
pub.dev
google_adsense | Flutter package
A wrapper plugin with convenience APIs allowing easier inserting Google Adsense HTML snippets withing a Flutter UI Web application
020
Kabo @kaboc.bsky.social · 04/12/2024
Thank you! Arabic seems to have a large number of speakers, so the info about the language is very helpful.
000
Kabo @kaboc.bsky.social · 04/12/2024
TIL: Everything is flipped in RTL (or at least in Persian), more thoroughly than I thought. Even the question mark is not an exception. It feels to me as if they live in a mirror. How interesting!
110
Kabo @kaboc.bsky.social · 04/12/2024
Oh, I was almost sure it was incorrect, but I was wrong😅 Thanks!
000
Kabo @kaboc.bsky.social · 04/12/2024
Flutter automatically flips (most of) the UI horizontally including icons in RTL locales. But is this really correct?
100
Kabo @kaboc.bsky.social · 03/12/2024
- Making repositories in view models and services in repositories private - Use UnmodifiableListView for list getters I like these preventive measures against someone's mistakes in a team. It is probably too much for a small app, but I can understand the intention.
000
Kabo @kaboc.bsky.social · 03/12/2024
Noticed another one is up. Architecture case study docs.flutter.dev/app-architec...
docs.flutter.dev
Architecture case study
A walk-through of a Flutter app that implements the MVVM design pattern.
130
Kabo @kaboc.bsky.social · 02/12/2024
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.
020
Kabo @kaboc.bsky.social · 26/11/2024
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.
050
Kabo @kaboc.bsky.social · 25/11/2024
Wondering why the current state getter added to go_router several weeks ago returns a nullable type. Neither currentConfiguration, last or buildState() is nullable.
010
Kabo @kaboc.bsky.social · 25/11/2024
For those not familiar with PocketBase, it's an open-source self-hosted BaaS, with the official Dart package! pub.dev/packages/poc... You can access the database from a client safely thanks to the API rules (i.e. security rules like RLS). I personally prefer using it as a Go server framework.
010
Kabo @kaboc.bsky.social · 25/11/2024
PocketBase v0.23.0 github.com/pocketbase/p... It is incredible that the author completed so many awesome improvements after announcing the plan nine months ago.
github.com
Release v0.23.0 Release · pocketbase/pocketbase
NoteYou don't have to upgrade to PocketBase v0.23.0 if you are not planning further developing your existing app and/or are satisfied with the v0.22.x features set. There are no identified critical...
1131
Kabo @kaboc.bsky.social · 23/11/2024
Oh, it was already in my Markdown notes... I have a poor memory. By the way, dhttpd is handy. I sometimes use it to serve local images for app development, or other files so that I can view them on another device without sending them from the host PC.
000
Kabo @kaboc.bsky.social · 23/11/2024
I didn't know this either. That's easier than what I usually did, like running "flutter build web" and then starting a server with dhttpd.
121
Kabo @kaboc.bsky.social · 22/11/2024
I often use it too. I don't think the isActive check is necessary. I usually just do `debounce?.cancel();`. Some parts in the SDK do the same, where an existing Timer is cancelled and then a new one is set.
100