Jonathan Simon

Jonathan Simon

@jsimon.dev

✦ Flutter Developer ✦ Passionate about technology, science and philosophy. 🇨🇺 in 🇩🇴 Portfolio: https://jsimon.dev Github: https://github.com/JSimonDev

90 followers151 following47 posts

Pinned

Micro-interactions turn boring forms into memorable experiences 🏠✨ I designed this interactive bedroom counter using @rive.app The goal: give immediate visual feedback on the property's scale, rather than just showing a number. Buttery smooth and production-ready.

🤯 Just had a massive Eureka moment revisiting Design Patterns. We often treat #Flutter’s BuildContext as some sort of "magic" variable, but while reading about the Strategy Pattern on refactoring.guru today, everything just clicked. Flutter applies this pattern beautifully. 🧵👇

View full thread

This explains exactly why Widgets must be final and immutable. In the Strategy Pattern, you often don't mutate the active strategy; you simply replace it with a new one to change behavior. Flutter does exactly this: it swaps the Strategy (Widget) to update the UI state.

Sometimes we get obsessed with learning the latest framework features and forget that fundamental Software Engineering concepts (like Design Patterns) run the show under the hood. Understanding the pattern = Understanding the tool. 🛠️ #FlutterDev #SoftwareEngineering #Dart #DesignPatterns

🤯 Just had a massive Eureka moment revisiting Design Patterns. We often treat #Flutter’s BuildContext as some sort of "magic" variable, but while reading about the Strategy Pattern on refactoring.guru today, everything just clicked. Flutter applies this pattern beautifully. 🧵👇

View full thread

If we map this directly to Flutter's internal architecture, it fits perfectly: 1️⃣ The Context: It represents the Element (accessed via BuildContext). It persists in the tree. 2️⃣ The Strategy: It represents the Widget. It is the immutable configuration of "how" something should behave or look.

The Element (Context) acts as a generic container, it doesn't know how to paint or layout on its own. In every build() method, we (the Client) pass a NEW "Strategy" (a new Widget) to the Context. "Here Element, this is your new configuration. Run it."

🤯 Just had a massive Eureka moment revisiting Design Patterns. We often treat #Flutter’s BuildContext as some sort of "magic" variable, but while reading about the Strategy Pattern on refactoring.guru today, everything just clicked. Flutter applies this pattern beautifully. 🧵👇

I was reading the definition of "Context" in the Strategy Pattern and found this: "The context isn’t responsible for selecting an appropriate algorithm... the client passes the desired strategy to the context. In fact, the context doesn’t know much about strategies." Sound familiar? 🤔

Micro-interactions turn boring forms into memorable experiences 🏠✨ I designed this interactive bedroom counter using @rive.app The goal: give immediate visual feedback on the property's scale, rather than just showing a number. Buttery smooth and production-ready.

All the logic is encapsulated within the Rive State Machine. The frontend code stays clean, it simply passes numeric input trigger "Rooms" to drive the transitions and State Machine handle the rest. No complex animation code required in the app.

Visualizing how a product will look in your home at different times of day completely transforms the shopping experience. 🏠->💡 A short demo of how we can use AI to transform the lighting and mood in the Frescomax app. What do you think of the visual result?

I usually see life as a series of elements that need to be balanced to achieve a certain harmony, making life more like a serene and manageable journey.

View full thread

This is where I begin to reflect on the role money plays in this analogy, and the best fit I see for money is that it determines the size of our rod. If we have a lot of money, the rod will be longer, and as a result, it will be harder for things beyond our control to disturb our balance.

I usually see life as a series of elements that need to be balanced to achieve a certain harmony, making life more like a serene and manageable journey.

View full thread

Certainly, the balance depends on what we place on the rod; sometimes it will sway or teeter more to one side than the other, making our life a bit more unstable, but… that’s just how it is! Life fluctuates and is constantly changing, like the weights we place on each side of the rod.

Many times, we don’t even place these weights ourselves; most of the time, I’d dare say, they are weights beyond our control. Sometimes it rains, and the small drops cause the rod to wobble; other times, the wind blows hard and disturbs that delicate balance that keeps our life in order.

I usually see life as a series of elements that need to be balanced to achieve a certain harmony, making life more like a serene and manageable journey.

Many people believe that money is everything and brings happiness, and I often imagine it metaphorically as if the balance of life were a rod with a support point right at its center of mass.

One of my favorite quotes by Nietzsche is: “He who has much to proclaim one day, stays silently much immersed within himself: he who has to kindle the lightning one day, must for a long time--be a cloud.” I like it so much because I see it reflected in almost everything. When you want to achieve

something specific, you must first undergo that “metamorphosis” into the being or state that enables the creation of what you want to accomplish.

Just had one of those ‘reinventing the wheel’ moments in Flutter: 🤯 Did you know that Spacer is literally just an Expanded with a SizedBox.shrink as its child? That’s it. I never thought about how simple its implementation could be until I checked the source code.

View full thread

I’m amazed by how much you can achieve in Flutter by combining basic widgets. It’s like the entire framework is designed to encourage creativity with minimal building blocks.

If you already knew this, just pretend you didn’t and let me enjoy my 'discovery moment' 😅😂 What about you? Are there other widgets with equally simple implementations that I’m overlooking? 👀

Just had one of those ‘reinventing the wheel’ moments in Flutter: 🤯 Did you know that Spacer is literally just an Expanded with a SizedBox.shrink as its child? That’s it. I never thought about how simple its implementation could be until I checked the source code.

Essentially, Spacer uses Expanded to occupy flexible space in a Row, Column, or Flex, and the SizedBox.shrink ensures it doesn’t take up any visual space. Simple and brilliant.

Jonathan Simon reposted

La Luna no siempre nos muestra la misma cara. Su inclinación y órbita hacen que la veamos desde ángulos diferentes cada mes. Este aparente tambaleo se puede apreciar en animaciones aceleradas como esta que recreó la NASA y tiene un nombre: libración.

You are up to date.