FlutterGigs (@fluttergigs) 's Twitter Profile
FlutterGigs

@fluttergigs

#1 Flutter job platform by @enthusiastDev
@FlutterDev

ID: 1774762913900765184

linkhttps://fluttergigs.com calendar_today01-04-2024 11:37:30

41 Tweet

42 Followers

8 Following

Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

One subtle mistake I still see in many Flutter codebases is repositories that “play it safe” by swallowing errors and returning defaults. An empty list instead of a failure. A null object instead of an exception. A boolean set to false and the app moves on. It keeps the UI

One subtle mistake I still see in many Flutter codebases is repositories that “play it safe” by swallowing errors and returning defaults.
An empty list instead of a failure. A null object instead of an exception. A boolean set to false and the app moves on.

It keeps the UI
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

Flutter State Management / Concurrency Tip Not every async event in a Flutter BLoC should run in parallel, and not every scenario is about cancelling or ignoring extra events. Sometimes the rule is much stricter: 👉 every event must run 👉 nothing should overlap 👉 and the

Flutter State Management / Concurrency Tip 

Not every async event in a Flutter BLoC should run in parallel, and not every scenario is about cancelling or ignoring extra events.
Sometimes the rule is much stricter:

👉 every event must run
👉 nothing should overlap
👉 and the
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

Whenever we integrate a Stream into a Flutter BLoC, many codebases handle it manually with subscriptions, listeners, cancellations, and cleanup in close(). It works… but it creates a lot of boilerplate and a surprising amount of risk: forgotten cancellations, leaks, and

Whenever we integrate a Stream into a Flutter BLoC, many codebases handle it manually with subscriptions, listeners, cancellations, and cleanup in close().
It works… but it creates a lot of boilerplate and a surprising amount of risk: forgotten cancellations, leaks, and
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

Flutter UI Tip A small distinction in Flutter that quietly improves performance and clarity is when to use read() vs watch(). In callbacks like onPressed, onTap, or async handlers, the widget usually doesn’t need to rebuild. Yet it’s easy to accidentally use watch() and

Flutter UI Tip

A small distinction in Flutter that quietly improves performance and clarity is when to use read() vs watch().

In callbacks like onPressed, onTap, or async handlers, the widget usually doesn’t need to rebuild. Yet it’s easy to accidentally use watch() and
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

You don’t realize how much you copy… until it starts costing you focus. Copying is invisible. Until you lose what you just copied. Until your flow breaks. That friction is why I’m building LucidClip: a local-first, privacy-focused, native desktop clipboard app, built for

You don’t realize how much you copy…
until it starts costing you focus.

Copying is invisible.
Until you lose what you just copied.
Until your flow breaks.

That friction is why I’m building LucidClip:
a local-first, privacy-focused, native desktop clipboard app, built for
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

One pattern that consistently improves perceived performance in Flutter apps is optimistic updates. Instead of waiting for the backend before reflecting a user action, you update the local state immediately, then sync with the server in the background. If the request succeeds,

One pattern that consistently improves perceived performance in Flutter apps is optimistic updates.

Instead of waiting for the backend before reflecting a user action, you update the local state immediately, then sync with the server in the background. If the request succeeds,
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

GDE Membership Renewed — 2026 🚀 Honored to share that my Google Developer Experts membership has been renewed for 2026 ✨ This renewal reflects a year of consistent contribution: building in public 🛠️, sharing practical knowledge 📚, mentoring developers 🤝, and helping the

GDE Membership Renewed — 2026 🚀

Honored to share that my Google Developer Experts membership has been renewed for 2026 ✨

This renewal reflects a year of consistent contribution: building in public 🛠️, sharing practical knowledge 📚, mentoring developers 🤝, and helping the
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

Optimistic updates make Flutter apps feel fast, but they are not always the right tool. For critical or irreversible actions, a pessimistic update is often the safer choice. Instead of updating the UI immediately and rolling back on failure, you wait for backend confirmation

Optimistic updates make Flutter apps feel fast, but they are not always the right tool.

For critical or irreversible actions, a pessimistic update is often the safer choice.
Instead of updating the UI immediately and rolling back on failure, you wait for backend confirmation
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

Flutter - Performance Tip A subtle cause of UI freezes in Flutter apps is doing too much work in the current frame. Navigation, dialogs, heavy computations, analytics calls, scroll jumps, focus requests… When these side effects run synchronously during build or state updates,

Flutter - Performance Tip

A subtle cause of UI freezes in Flutter apps is doing too much work in the current frame.

Navigation, dialogs, heavy computations, analytics calls, scroll jumps, focus requests…
When these side effects run synchronously during build or state updates,
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

Your clipboard is broken. I’m fixing it. We copy more than we realize. And we lose our best snippets every single day. Code. Commands. Links. Ideas. Gone the moment we switch context. I’m building LucidClip — a snippet-first clipboard that understands what you copy: • snippet

Your clipboard is broken. I’m fixing it.

We copy more than we realize.
And we lose our best snippets every single day.

Code. Commands. Links. Ideas.
Gone the moment we switch context.

I’m building LucidClip — a snippet-first clipboard that understands what you copy:
• snippet
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

🔹 Use HydratedCubit to Persist State Automatically A lot of Flutter apps lose their context on restart: filters reset, last selected tab disappears, drafts vanish, onboarding starts over. It’s not a big crash, but it feels sloppy. HydratedCubit fixes this cleanly. Instead of

🔹 Use HydratedCubit to Persist State Automatically

A lot of Flutter apps lose their context on restart: filters reset, last selected tab disappears, drafts vanish, onboarding starts over. It’s not a big crash, but it feels sloppy.

HydratedCubit fixes this cleanly.

Instead of
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

🔹 Always Dispose Stream Subscriptions in close() (Avoid Silent Leaks) A subtle issue in @flutterDev apps using Cubit/BLoC is resource leakage from streams. Repositories often expose streams (DB watchers, websocket updates, realtime sync). Cubits subscribe to them—and if those

🔹 Always Dispose Stream Subscriptions in close() (Avoid Silent Leaks)

A subtle issue in @flutterDev apps using Cubit/BLoC is resource leakage from streams.

Repositories often expose streams (DB watchers, websocket updates, realtime sync). Cubits subscribe to them—and if those
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

Flutter Performance Tip 🔹 Rebuild ≠ Repaint: Isolate Both (with BlocSelector + RepaintBoundary) When a Flutter screen feels janky, many devs immediately look at rebuilds. That’s valid but it’s only half the story. Two key ideas to keep in mind: Selective rebuilds

Flutter Performance Tip
🔹 Rebuild ≠ Repaint: Isolate Both (with BlocSelector + RepaintBoundary)

When a Flutter screen feels janky, many devs immediately look at rebuilds. That’s valid but it’s only half the story.

Two key ideas to keep in mind:

Selective rebuilds
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

Building LucidClip taught me more than I expected. Not about Flutter. Not about macOS. But about product engineering. A few hard lessons 👇 • Shipping is a system, not a feature • Desktop apps force you to earn user trust • Most bugs are product decisions, not code • Manual

Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

Building LucidClip taught me more than I expected. Not about Flutter. Not about macOS. But about product engineering. A few hard lessons 👇 • Shipping is a system, not a feature • Desktop apps force you to earn user trust • Most bugs are product decisions, not code • Manual

Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

Passing analytics through endless components? There’s a better way. Just shared a new Medium post on building scalable analytics in Flutter with DI + a static facade, no more constructor bloat. 👇 Read here medium.com/@ethiel97/reth… #Flutter #MobileDev #CleanArchitecture #DX

Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

Flutter Tip 🔹 Don’t Await What Doesn’t Matter to the User Not every Future should block your flow. Analytics, logging, observability tools, non-critical telemetry, these are side effects. They shouldn’t delay navigation, slow down app startup, or block a UI transition. If

Flutter Tip

🔹 Don’t Await What Doesn’t Matter to the User

Not every Future should block your flow.

Analytics, logging, observability tools, non-critical telemetry, these are side effects.
They shouldn’t delay navigation, slow down app startup, or block a UI transition.

If
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

🔹 Eliminate Constructor Bloat with a Static Facade + Service Locator As Flutter apps grow, cross-cutting concerns start creeping into every layer: analytics, logging, crash reporting, feature flags… And suddenly your constructors look like flight itineraries. There’s a

🔹 Eliminate Constructor Bloat with a Static Facade + Service Locator

As Flutter apps grow, cross-cutting concerns start creeping into every layer:

analytics, logging, crash reporting, feature flags…

And suddenly your constructors look like flight itineraries.

There’s a
Ethiel (FlutterGigs) (@enthusiastdev) 's Twitter Profile Photo

Most Flutter apps accidentally duplicate their own data pipelines. This happens when multiple orchestrators (Cubits, Blocs, controllers) subscribe independently to the same repository stream. At first glance, it looks harmless: // user_cubit.dart repo.watchUser().listen(...)

Most Flutter apps accidentally duplicate their own data pipelines.

This happens when multiple orchestrators (Cubits, Blocs, controllers) subscribe independently to the same repository stream.

At first glance, it looks harmless:

// user_cubit.dart
repo.watchUser().listen(...)