本站已进行升级,老用户可以通过找回密码登录。

24h Intel · 83 條

Flutter 24小時情報 GitHub 熱門倉庫與技術資訊

每日彙總 Flutter / Dart GitHub 熱門倉庫,以及 Dev.to、freeCodeCamp、Hacker News、Medium、Reddit 的近期技術資訊,追蹤 24 小時 Stars 增量與社群討論。

更新於 10/09 下午06:516 個來源

GitHub

20 條

Dart 與 Flutter 相關倉庫熱度

Dev.to

12 條

開發者文章與專案分享

Native vs Cross-Platform App Development: How I'd Actually Decide
10/09 下午03:18

Native vs Cross-Platform App Development: How I'd Actually Decide

Mittal Technologies

Every few months, someone online declares native apps dead. A few weeks later, someone else declares cross-platform a mistake. Both are wrong, and both get plenty of likes. Native means separate apps for each platform: Swift and SwiftUI for iPhone, Kotlin and Jetpack Compose for Android. Two codebases, two sets of specialists. Cross-platform means one codebase serving both, usually built with Flutter or React Native. Flutter draws its own interface, while React Native maps to real native components. Kotlin Multiplatform sits in between, sharing business logic but keeping native screens. Native wins when the device is the product. Think games with heavy graphics, AR experiences, advanced camera or sensor work, or anything that needs new OS features the day they ship, like widgets, Live Activities, or watch integrations. Cross-platform frameworks usually catch up, but there's a lag, and that lag can matter. iOS App Development team can obsess over details like haptics and gesture feel, which cross-platform tools approximate but rarely nail. Android App Development is often the safer route, because you aren't waiting on a plugin to catch up with the platform. Most apps I see aren't games. They're marketplaces, booking tools, learning platforms, delivery apps, internal dashboards. For these, one codebase means one set of bugs, one release cycle, and typically 30–40% less spend. Feature parity between iPhone and Android stops being a weekly argument. App Development Company can tell you early whether Flutter or React Native suits your team's skills and roadmap, rather than letting you find out at month five. Start with the user, not the technology. If your idea works without anything platform-specific, go cross-platform and ship sooner. If the device's capabilities are the pitch, go native. If you honestly can't tell, prototype the riskiest feature both ways. Two weeks of that beats two months of debate. Mobile App Development Company questions your assumptions, and that friction is worth paying for. App Development Services cover native and cross-platform builds, so the advice isn't tilted toward one.

reactnativeflutterapilowcode
Building Reliable Workforce Apps: Lessons From ShiftPilot and Three Companies to Evaluate
10/09 下午02:58

Building Reliable Workforce Apps: Lessons From ShiftPilot and Three Companies to Evaluate

Harsha

A shift-management app becomes difficult to engineer when a single action affects scheduling, payroll, notifications, and an external reporting system. A failed request creates an uncomfortable question: did the operation fail, or did its confirmation simply never arrive? GeekyAnts’ published ShiftPilot workforce management case study provides a useful starting point. The engagement strengthened an existing Flutter and Firebase application, covering recurring schedules, worker validation, payroll, and Belgian DIMONA employment declarations. The practical lessons concern how teams model failure, preserve existing functionality, and evaluate engineering partners. The case study describes Cloud Tasks and Firestore state management supporting retries and recovery, with idempotency controls intended to prevent duplicate declarations. For similar applications, an architecture review should distinguish between a failed operation and an unknown outcome. Consider a hypothetical submission that reaches an external service just before the connection drops. Automatically creating another submission could duplicate the original action. Treating it as completed could conceal a genuine failure. Useful review questions include: What identifies the original business operation across retries? Where is its latest confirmed status stored? How are uncertain outcomes investigated? When does automated recovery stop and human review begin? These are proposed evaluation questions, not a description of ShiftPilot’s internal implementation. ShiftPilot’s published challenges include unreliable venue connectivity, long shifts, and time-zone-sensitive scheduling. Those constraints suggest several useful test scenarios for workforce products: Scenario Behavior to verify Connection drops after submission The interface distinguishes pending confirmation from confirmed failure The same action is submitted twice Duplicate processing is detected or safely prevented A shift crosses a daylight-saving change Duration follows the agreed scheduling and payroll rules A background task repeatedly fails An operator can identify the failure and its recovery path A successful screen interaction is only one part of acceptance. The associated business operation needs an observable, explainable outcome. In this engagement, GeekyAnts extended the existing Flutter and Firebase architecture rather than introducing another backend stack. The case study also describes stronger review, staging, and release controls. For another product, the same decision should follow an assessment of its actual constraints. Teams can ask whether the current stack prevents a required capability or whether unclear workflow ownership, insufficient testing, or weak recovery mechanisms cause the problem. That distinction helps define a modernization scope before committing to a replacement. The following companies offer relevant engineering services. This is a capability-based shortlist, not a verified performance ranking or a claim that all three have equivalent workforce-platform experience. GeekyAnts provides the directly relevant ShiftPilot example discussed here. Evaluation should examine its proposed responsibilities for mobile workflows, integrations, failure recovery, and ongoing support. The published case study does not provide independently verified reliability benchmarks. thoughtbot offers mobile product design and development. It is a candidate for teams evaluating application workflows and mobile experiences. Buyers should separately establish experience with payroll integrations, scheduling rules, and operational recovery. 10Pearls offers application modernization and enterprise application development. Its services make it relevant to evaluations involving existing systems and integration work. A proposal should clarify migration scope, testing responsibilities, and support after release. Each candidate should work through the same failure scenario: an operation reaches an external system, its acknowledgement disappears, and the user retries. The explanation should identify persisted state, duplicate handling, operator visibility, and recovery ownership. That discussion offers a concrete way to assess engineering judgment beyond a technology checklist. Which failure scenario has been hardest to handle in a scheduling or workforce application?

forumflutterfirebasearchitecture
Offline-First Mobil Mimari: Isar, SQLite ve REST API ile Kusursuz Senkronizasyon
10/09 下午02:25

Offline-First Mobil Mimari: Isar, SQLite ve REST API ile Kusursuz Senkronizasyon

Nuh Mehmet Demirkol

Offline-First Mobil Mimari: Isar, SQLite ve REST API ile Kusursuz Senkronizasyon Günümüz mobil uygulama ekosisteminde kullanıcı deneyimini (UX) belirleyen en kritik unsurlardan biri, uygulamanın ağ bağlantısından bağımsız olarak ne kadar kararlı çalıştığıdır. Tünelde giden bir metroda, sinyalin zayıf olduğu kırsal bir bölgede ya da uçak modunda bile uygulamanızın çökmeden, takılmadan ve veri kaybetmeden çalışması gerekir. Bu makalede, modern mobil uygulamalarda Offline-First (Önce Çevrimdışı) mimariyi kurmanın teorik temellerini, yerel veri tabanı (Local DB) seçim kriterlerini ve yerel verileri bir REST API ile kusursuz bir şekilde senkronize etmenin mühendislik pratiklerini ele alacağız. Offline-First, uygulamanın birincil veri kaynağı (Single Source of Truth) olarak yerel veri tabanını (Local Database) kabul ettiği bir tasarım örüntüsüdür. Uygulama ağ isteklerinin sonucunu beklemek yerine, doğrudan cihaz üzerindeki yerel veriyi okur ve yazar. Arka planda çalışan bir Senkronizasyon Motoru (Sync Engine), bu yerel verileri uzak sunucuyla (Cloud/REST API) asenkron olarak eşitler. Ultra Düşük Gecikme (Low Latency): UI, ağ gecikmesine (network latency) takılmadan yerel veri tabanından anında beslenir. Kesintisiz Çalışabilirlik: İnternet bağlantısı koptuğunda dahi tam fonksiyonellik sunulur. Daha Az Pil ve Veri Tüketimi: Ağ istekleri optimize edilerek paketler halinde (batching) gönderilir. Kusursuz bir Offline-First mimari, katmanlı bir yapıda tasarlanmalıdır. İş mantığı (Business Logic), veri tabanı motorundan ve ağ katmanından tamamen izole edilmelidir. +-------------------------------------------------------------+ Özellik SQLite (Drift / Moor) Isar (NoSQL) Tür İlişkisel (SQL) Doküman / Nesne Tabanlı (NoSQL) Hız Orta / İyi Çok Hızlı (Asenkron & Çoklu İzlek) Reaktivite Stream desteği var (Üçüncü parti kütüphanelerle) Doğal reaktif (Query Watchers) Şema Göçü (Migration) Manuel SQL sorguları ile zorlayıcı Otomatik şema yönetimi ile kolay Öneri: Eğer uygulamanız karmaşık çoklu tablolara ve ilişkisel ACID işlemlerine yoğun şekilde ihtiyaç duyuyorsa SQLite (Drift); performans, reaktivite, kolay geliştirme ve Flutter ile mükemmel uyum arıyorsanız modern Isar Database tercih edilmelidir. Verilerin senkronize edilebilmesi için veri modellerimizde bazı meta-verilere (meta-fields) ihtiyacımız vardır. Her tablo/doküman şu alanları barındırmalıdır: dart Kullanıcı çevrimdışıyken bir işlem gerçekleştirdiğinde, bu işlem doğrudan sunucuya gönderilemediği için bir Outbox tablosuna kuyruğa alınır. dart part 'outbox_action.g.dart'; @collection @Index(unique: true) late String entityName; // 'Task', 'User', 'Order' vb. @enumerated late String payload; // Değişikliğin JSON hali late DateTime createdAt; enum ActionType { create, update, delete } Senkronizasyon motoru iki yönlü çalışır: Upstream (Yerelden Sunucuya) ve Downstream (Sunucudan Yerelle). dart SyncEngine(this._localDb, this._apiClient); Future syncUpstream() async { for (var action in pendingActions) { try { bool isSuccess = false; switch (action.actionType) { case ActionType.create: isSuccess = await _apiClient.post( '/api/${action.entityName.toLowerCase()}', action.payload, ); break; case ActionType.update: isSuccess = await _apiClient.put( '/api/${action.entityName.toLowerCase()}/${action.entityId}', action.payload, ); break; case ActionType.delete: isSuccess = await _apiClient.delete( '/api/${action.entityName.toLowerCase()}/${action.entityId}', ); break; } if (isSuccess) { // İşlem başarılı, kuyruktan sil await _localDb.writeTxn(() async { await _localDb.outboxActions.delete(action.id!); }); } } catch (e) { // Hata durumunda loglama yap ve bir sonraki senkronizasyon döngüsünü bekle print("Senkronizasyon hatası: $e"); break; } } } } Çakışmaları önlemek için sunucu tarafındaki güncel veriler çekilirken en son başarılı senkronizasyon zaman damgası (lastSyncTimestamp) parametre olarak gönderilir. dart // Sadece son senkronizasyondan sonra değişen verileri iste if (response.statusCode == 200) { await _localDb.writeTxn(() async { for (var change in remoteChanges) { // Çakışma Kontrolü: Eğer yerelde isDirty true ise yerel veriyi ezme (Conflict Resolution) final localEntity = await _localDb.tasks.filter().idEqualTo(change['id']).findFirst(); if (localEntity == null || !localEntity.isDirty) { // Yerelde değişiklik yoksa veya kayıt yeniyse güncelle await _localDb.tasks.put(Task.fromJson(change)); } } }); await _saveLastSyncTimestamp(DateTime.now()); } } Çevrimdışı dünyada aynı veri hem sunucuda hem de yerelde güncellenmiş olabilir. Bu durumlar için şu stratejilerden biri seçilmelidir: Last-Write-Wins (LWW): Son güncelleyen kazanır. Zaman damgası (Timestamp) en büyük olan veri kabul edilir. Server-Wins: Sunucudaki

databasemobileflutterarchitecture
Shaving Latency Off Real-Time Speech Translation: What Actually Worked in Our Flutter App
10/09 下午12:39

Shaving Latency Off Real-Time Speech Translation: What Actually Worked in Our Flutter App

Mr.x

In a chat app, a slow reply is mildly annoying. In a spoken conversation, it breaks the exchange. Silence feels longer than a spinner does, and people judge the delay from the moment they stop speaking, not from when a request reaches a server. We build Owll Translator, a real-time interpretation app. You wear earbuds, speak normally, and the app translates live. It can also speak the translation in a clone of your own voice. Most of our latency work over the past months hasn't been about making any single model faster. It has been about perceived latency: hiding the unavoidable waits, cutting the avoidable ones, and getting sound into the listener's ear as early as we responsibly can. This post covers what worked, what didn't, and what we still don't know. One caveat before we start: we don't have trustworthy end-to-end mic-to-ear numbers yet, so there are no millisecond claims here. The last section explains why and what we're doing about it. We run more than one backend path, and the server picks one per session. Here is a simplified view of both: (a) Client-orchestrated path ---------------------------- Phone mic -> native recorder (PCM 16 kHz, 16-bit, mono) -> local VAD (prob threshold 0.5) + noise suppression -> cloud speech SDK: continuous recognition + translation (push stream; "recognizing" partials, "recognized" finals) -> client clause splitter (complete clauses only) -> cloud TTS (cloned voice) -> synthesis queue -> playback queue -> local player -> earbuds (b) Server-orchestrated RTC path -------------------------------- Phone mic -> WebRTC audio track (LiveKit) -> server agent: ASR -> translate -> TTS -> translated audio track ------------> earbuds -> captions / events via data channel -> UI For path (a) we use the Microsoft Azure Speech SDK for continuous recognition and translation. For path (b) we use LiveKit on top of WebRTC. Voice synthesis and cloning go through cloud providers. We support Azure neural voices with speaker embeddings, as well as Cartesia and MiniMax. Most of the techniques below apply to path (a), where the client has the most control. A few apply to both. The first delay a user notices is between tapping the button and the app actually listening. In the naive version, that gap is a chain of network round trips: fetch an auth token, create a conversation session, receive connection details, connect, then start capture. None of those steps depend on what the user is about to say, so we moved them earlier. While the user is on the home screen, we: prefetch the auth token, pre-create the session using a small "create conversation" preloader that refreshes periodically and dedupes in-flight requests, for the RTC path, call prepareConnection() ahead of time and enable pre-connect audio when the session starts, so capture can begin before the room is fully joined. A simplified version of the preloader: // Simplified for illustration. class SessionPreloader { Future<SessionGrant>? _inFlight; SessionGrant? _ready; Future<SessionGrant> warm() { // Dedupe: concurrent callers share one request. return _inFlight ??= _api.createSession().then((grant) { _ready = grant; _inFlight = null; return grant; }); } /// Grants are single-use. Hand it out once, then forget it. SessionGrant? take() { final grant = _ready; _ready = null; return grant; } } The take() method is the result of a bug we caused ourselves. Our first version cached the session response and reused it. Sometimes that produced the worst kind of failure: the UI showed "connected", audio flowed, and no translation ever came back. The cached grant was stale, and the backend treated it as already used. We now treat preloaded grants as single-use. They're consumed once and invalidated, and we recorded that rule in an architecture decision record so nobody "optimizes" it back later. Lesson: prewarming is free latency only if the thing you prewarm is safe to hold. Anything with session semantics needs an explicit lifecycle. Prewarming narrows the startup gap but doesn't close it. The recognizer may still be initializing when the user starts talking, and people tend to start talking the moment they tap. If capture only starts once the SDK reports it is ready, the first syllables are gone, and recognition of a clipped first word is often wrong, which forces the user to repeat the sentence. That is far worse than a short delay. So the recorder starts immediately and pushes PCM continuously. If the speech SDK isn't ready yet, we buffer the audio and flush it as soon as the push stream exists: // Simplified for illustration. void onPcmFrame(Uint8List frame) { final stream = _pushStream; if (stream == null) { _pending.add(frame); // SDK not ready yet: keep it return; } if (_pending.isNotEmpty) { for (final f in _pending) stream.write(f); _pending.clear(); } stream.write(frame); } The recognizer gets a s

flutterwebrtcaiperformance
Llama Village: a virtual world powered by local AI with llamadart
10/09 上午06:34

Llama Village: a virtual world powered by local AI with llamadart

Jhin Lee

Llama Village in motion. The characters’ dialogue is generated by an on-device model. Watch the full trailer on GitHub I wanted to try building a 3D game with flutter_scene. I was already working on llamadart, so I thought it would be fun to use local AI in the game too. My starting idea was fairly loose: make it look good, keep it simple, and put Dash, the Flutter mascot, in a scene with some llamas. I wanted to show different kinds of AI working together, including multiple characters acting on their own. But I did not have a game concept I liked yet. I spent quite a while on the visuals. I tried a hand-drawn look, asked for something closer to Borderlands, and eventually switched to a softer film style because the earlier renders kept looking glitchy. Meanwhile, we tried several game ideas. I was not happy with how they played. These were two of my messages in the Claude Code session: “Btw the game isn't fun.” “What's the point of ai?” Eventually I asked for a village where the llamas would live and interact on their own. I wanted to give them personalities, see their thoughts and conversations, and control Dash to interact with them. That was the idea we went ahead with. The village at golden hour, with the bakery in the centre and the festival stage in the foreground. Pip, Mo, June, Bramble, and Clover each have a personality, needs, relationships, goals, and things they know. They make plans, walk around the village, and stop to talk. A missing scarf, a bread rumour, a secret crush, and the upcoming Berry Festival give them things to care about. June and Bramble talking. Each line is written from the speaker’s situation and the conversation so far. They do not all know the same things. In the inspector below, June knows that Mo knocked Pip’s scarf into the pond because she heard it from Mo. Other entries are things she saw herself. The game keeps track of both the information and how she got it. This is what I mean by a multi-agent system in this game. Each llama has its own knowledge, goals, and relationships. They use the same underlying language model, with different context for each character. The inspector shows what June knows and who told her. I wanted to try more than one kind of AI. The language model writes dialogue and thoughts. Embeddings help compare the meaning of the dialogue with facts the listener could have learned. An optional Laya decision model helps choose casual conversation topics from the options the game allows. Movement, needs, knowledge tracking, and endings are handled in code. After a conversation, the model reports which facts were mentioned and suggests changes to mood and friendship. The game checks the fact claims before accepting them. A llama knows → they talk → the game checks → a neighbour learns. Secrets require explicit keyword evidence; embedding similarity alone is not enough. For example, imagine one llama passing along news. The speaker needs to know it first. The model writes the exchange, and the game checks whether the words support transferring that information. If accepted, it becomes something the listener knows and may discuss later. The llamas can keep walking and going about their day while the model is busy writing. You play as Dash. Click a llama and he flies over to visit. The game generates four things he could say while he is on the way. I specifically wanted selectable options here, so you can play without stopping to type a message. Dash can tell Pip the bread rumour is false, or start another rumour about Mo. The game chooses the available intentions and facts; the model words the options for the character. You can encourage someone, help them, pass along news, or stir up gossip. The llama’s reaction and the resulting changes to trust or mood are governed by rules, while the model gives the reply its voice. Passing along a correction can help. Gossip can leave a llama believing something false. Those changes carry into later interactions and count toward the ending. I had a lot of fun building this with flutter_scene. I kept asking for changes to the characters, especially making the llamas look different from one another and getting Dash’s face right. Then came the weather, animals, music, and cutscenes for skipping the night. Fireflies and lamps around the pond at night. Clover and Bramble heading home during the storm. The models and the 3D renderer share the same machine, which makes performance a concern. The scene needs to keep running while text is generated. Some work can happen ahead of time, like writing Dash’s options during his flight. Llamadart provides the cross-platform local AI foundation. The game shown here is the macOS preview, running inference locally with the model files already on the machine. Bringing the same experience to other devices still requires working through their memory, inference, and rendering budgets. When I started thinking about mobile, I even asked whether we could make a version without an LLM.

flutteraigamedevshowdev
10/09 上午01:12

A true story of a girl who is still battling her hellish life

Muskan Sharma

lucknow call girl my mother: - I never saw my mother because she died when I was one year old. My name Muskaan was given to me by her. my dad: -My father is the biggest hero of my life who never let me feel the absence of my mother. my friend: -I have a friend who always stands by me. It is important to have a friend in life who may or may not be there for you in your happiness, but he stands alone in your bad times. my better half: -You know, in our life, a person comes who, despite not being our own, becomes our own, just like the person we have known since birth. my life: -My life was like hell after my father left. Now let's start my complete story paragraphs:- My life started like this when my mom was pregnant, the first time when I was saw my mother my father and mother did not have enough money to get my delivery done in a private hospital, so I went to a government hospital and you know the condition of government hospitals in India. When I was one year old, my mother died of cancer. She knew from the very beginning that she had cancer, and she kept fighting that pain alone. She never let Papa realize that she had cancer. Papa came to know about it when one day Papa saw blood coming out of her nose. At that time Mummy fainted, and Papa took Mummy to the hospital.In the hospital, the doctor said that they have very little time. Papa's eyes filled with tears. I was in Papa's lap. Seeing Papa, I also started crying. When Mummy regained consciousness, Papa and I met Mummy. Papa asked Mummy one thing, do you consider me a stranger, that is why you hid such a big thing from me. Mummy said crying, no ji.I know how hard you work to earn money, you work day and night and you had a dream that you want to educate Muskaan and make her a doctor, so how could I come in the middle of that dream of yours. Life is like this for us poor people, we live only to vote and fill out texts and all we get is this government hospital which has neither doctors nor medicines. We are just insects for these leaders who get only monthly ration, we are farmers, we don't want monthly ration, we want good education and good infrastructure. My mother's last words were to take care of my Muskan and she blessed me and closed her eyes forever. My father told me all this when I was 10 years old. Everyone's father is the first hero of their life because we know that if any trouble comes upon us, our real hero is our father. These days girls are saying this - one Kachori, two Samosas. How can you trust these men? Look into your father's eyes and say this. I don't say that all men are good, but don't say anything to those who are good. My father raised me single-handedly. He cooked food for me, got me ready for school, and after returning from work, he would take me for walks. My father would make me sit on the cot and take me for walks around the village. In this way, I turned 20 playing with Papa. He plays like this, when bad times come, it never ends. One day Papa did not return home. I told my neighbor uncle that my father has not come home since yesterday. We both searched for father, but he was not found. The next day the news came that he had met with an accident And he is no more in this world. Hearing this, the ground slipped from under my feet. I felt as if I too had died. I and uncle quickly went to the hospital where he was kept. I cried a lot with my head on my father's chest and lost consciousness. I regained consciousness after 10 days, by which time the villagers had performed my father's last rites. The doctors told me that the last time he remembered me was when Papa wrote my name on a paper with his blood, which a nurse gave me after Papa passed away and doll which he was bringing for me from the market . My hellish life had begun. I had to go to other people's houses and work. Sweeping and cleaning their houses, taking care of their children, it was a matter of one day in the house where I worked. There was only one owner, his wife had gone to her home and was doing household chores as usual and the owner was drinking and started looking at me with dirty eyes, I ignored him. I was working in his room when suddenly he caught hold of me and made me lie on the bed. I tried hard to push him away but his grip was very strong and he hit me a lot and he placed his hands on me, pulled off my clothes and touched me in a very bad way, he put his private part in my private part, I screamed a lot, I cursed God to him but he did not agree. He raped me for 3 days and tried to kill me. He asked me if I told anyone he would kill me. I told him I wouldn't tell anyone. Just let me go from here, I will go far away from here. He also had a gun which he had placed on me. I saved my life and ran away from there to Lucknow and started living on the footpath. They say that God sends someone or the other to help you. I met a girl who used to see me every day and used to give me something to eat every day. Her name was Pooja Yadav. We slowly beca

marketingprivacybitcoinflutter
Building DevFeed — Part 1: MVVM Architecture Before Writing a Single Screen
10/08 下午09:00

Building DevFeed — Part 1: MVVM Architecture Before Writing a Single Screen

Yadnesh Teli

Series 2 of 2 — Part 1 of 4 Series: Building DevFeed — A Proper Flutter MVVM App from Day One When I started DevFeed, I had just finished the painful MVVM refactor of the shopping app. I knew what proper architecture looked like. I knew the difference between a repository and a ViewModel. I had felt the cost of not having that separation. So this time I set up the entire architecture before I wrote a single screen. DevFeed is a Hacker News reader app built as a Flutter MVVM practice project during my internship. This series documents how I built it — from a properly structured first commit all the way to shipping v1.0.1 with a GitHub Actions release workflow. Before opening the first Dart file, I mapped out the layers: Model: ArticleModel to represent a Hacker News story — id, title, url, score, author, and comment count. Repository: HackerNewsRepository responsible for fetching stories from the API. Returns a list of ArticleModel. ViewModel: FeedViewModel using Riverpod AsyncNotifier. Calls the repository, exposes AsyncValue state to the UI. View: FeedScreen that watches the ViewModel. Renders loading, error, and data states. No API knowledge. This is the same structure I eventually reached in the shopping app. The difference in development experience because of starting with it is the main story of this series. The first commit was a full scaffold — all 35 files. Models, repositories, ViewModels, screens, widgets, routing, theming, and a basic test file. Nothing was fully implemented but the skeleton of every layer was in place. This approach felt strange at first. You write a lot of boilerplate before you can see anything on screen. But it paid off immediately when I started filling in implementations — because I always knew exactly which file to open and what it should contain. I used AsyncNotifier for the feed ViewModel. AsyncNotifier is the right choice when your state is the result of an async operation — it handles loading, error, and data states out of the box. class FeedViewModel extends AsyncNotifier<List<ArticleModel>> { @override Future<List<ArticleModel>> build() async { return ref.read(hackerNewsRepositoryProvider).fetchTopStories(); } Future<void> refresh() async { state = const AsyncLoading(); state = await AsyncValue.guard( () => ref.read(hackerNewsRepositoryProvider).fetchTopStories(), ); } } I used go_router from day one. In the shopping app I had used Navigator.push directly, which scattered navigation logic across screens. go_router centralises routing in a single config file and supports declarative navigation, deep links, and route guards. Adding a new route later was a two-line change instead of a hunt through multiple screens. The most noticeable difference compared to the shopping app was the absence of confusion. When I needed to add a feature, I knew where it should go. When I needed to fix a bug, I knew which layer was responsible. The shopping app taught me what MVVM is. DevFeed taught me what it feels like to work in a well-structured codebase. You need both lessons. Next: Part 2 — Building the Feed: Hacker News API, AsyncNotifier, and Parallel Fetching

flutterarchitectureriverpoddart
Let's Talk About Mobile App Developer Salary in India, Honestly
10/08 下午07:04

Let's Talk About Mobile App Developer Salary in India, Honestly

Justacademy IT Institute

Why I Keep Seeing This Question Every few weeks, somebody in a developer community drops the same message: "What is the mobile app developer salary in India, and is it still worth learning?" The replies are always a mess. One person quotes a number that sounds like a lottery win. Another says the market is dead. A third asks for the college name first. If you are the person who asked, you walk away more confused than when you arrived. So here is my attempt at a calmer answer. I will give you ranges, explain why they swing so much, walk through three composite case studies, and share the habits that seem to separate developers who grow quickly from those who stall. A quick honesty note: the salary ranges below are indicative and based on commonly reported market patterns, and the case studies are composites built to illustrate common situations, not real named individuals. Treat the numbers as a compass, not a contract. The Short Answer, Before the Long One If you only have thirty seconds, here it is. A mobile app developer in India typically starts somewhere between three and six lakh rupees a year. With one to three years of experience, that often moves to five to ten lakh. Around three to five years, many developers sit between nine and eighteen lakh. Senior developers with five to eight years commonly earn sixteen to thirty lakh, and leads or architects can go beyond that. Variable pay, bonuses and stock options change the picture, and so do the company, the city and your negotiation. That is the answer search engines and AI assistants will usually summarise. The interesting part is why two developers with the same years of experience can sit at opposite ends of those ranges, and that is where the next sections go. Three Composite Case Studies Stories stick better than spreadsheets, so here are three of them. Ishaan, the Tutorial Collector Ishaan spends eight months finishing courses. He completes four of them, earns three certificates and builds the same to do app in three different frameworks. When he applies for jobs, his portfolio looks impressive at a glance and identical to a hundred other portfolios on closer inspection. In interviews, he can recite how a widget tree works but struggles when asked what he did when his own app crashed on a budget phone. He eventually lands a first job near the lower end of the fresher band, after many rejections. Naina, the Shipper Naina also spends eight months, but she does it differently. She learns one language and builds one real app, a neighbourhood tool lending tracker that her housing society actually uses. She publishes it, collects honest feedback and fixes problems she did not expect, like notifications arriving late on certain phones. In interviews, she tells that story, including the mistakes. Her offer lands near the upper edge of the fresher band, and she negotiates a review after six months. Same effort, same time, different evidence. The Noida Agency That Hired Slowly A small app development agency in Noida, three people at the start, grows to eleven over four years. Their founder describes hiring in a simple way: she reads the readme, opens the app on her own phone and asks the candidate to explain one decision they regret. She says the best hires were rarely the most impressive on paper, but they could explain trade offs plainly and wanted to keep learning. This is also a composite, yet anyone who has sat on a hiring panel will recognise the pattern. Teams pay for people who reduce risk, and clear thinking reduces a lot of risk. What the Job Actually Involves Before pay, understand the work. A mobile app developer takes a loose idea and turns it into something a stranger can install and use without a manual. That means reading screen designs, writing the logic behind every tap, connecting the app to servers through APIs, testing on many devices, fixing the bug that only appears on one brand of phone, and packaging the build for the Play Store or App Store. Anyone who has tried building a mobile app, even a tiny one, knows how many decisions hide inside one screen. Titles That Confuse Everyone Job listings use application developer, app programmer, android dev, ios developer, android app developer and plain app dev, often for overlapping work. An application developer can work on desktop, web or mobile software, while mobile development specifically covers phones and tablets. An app programmer is a label some smaller teams use for someone who mostly writes code. When you compare application developer pay between two offers, read the responsibilities, not the title, because a modest label can hide real ownership and a fancy one can hide a narrow job. Tools of the Trade Modern mobile application development usually involves Android Studio or Xcode, version control, design handoff tools and a testing setup. I often get asked whether you can learn everything on a phone. Phones are useful for reading docs, revising concepts and trying quick experiments

mobileflutterdartproductivity
Bringing Flutter’s hot reload experience to the full stack
10/08 下午05:14

Bringing Flutter’s hot reload experience to the full stack

Jamiu Okanlawon

You’re testing a form a few screens into your Flutter app, with the fields already filled in. The spacing looks cramped, so you adjust it in the code and trigger a hot reload. The app picks up the change, and the form is still on screen with your values in it. That’s the loop Flutter developers rely on. You change the code and see the result right where you were looking, so your attention stays on the feature instead of on getting back to it. Now suppose the form books appointments, and you change the booking rule so appointments need at least 24 hours’ notice. That validation lives on the server, so Flutter’s hot reload doesn’t reach it. If your server restarts to pick up new code, each edit to the rule looks like this. You save it, restart and wait for the server to come back up, and then try the booking. Do that for every tweak, and your usual Flutter rhythm of save and see becomes save, restart, wait, then see. And the wait might be enough to break your creative flow. What if a server edit worked just like a Flutter one? You save it and try the booking again, without waiting for a restart. Serverpod, an open-source backend written in Dart for Flutter, works that way. During development, serverpod start runs your server, Flutter app, and database together in one session. Because the server is written in Dart, Serverpod uses Dart’s hot-reload support to update it. When you edit the booking rule and save, the running server picks up the change without restarting. And by using an embedded PostgreSQL database, that experience extends to the database layer as well. With Serverpod, you go straight from saving the rule to trying it out in the form you already have open. Want 48 hours’ notice instead? Change it, save, and try again. Each edit to the rule now fits the same save-and-see rhythm as a UI change. When something goes wrong Hot reload also helps when something doesn’t behave as expected. Say a booking that should be accepted keeps getting rejected. You add a log line inside the server method that checks availability. Then you save and submit the booking again. The output shows what the method received, so you can make an informed decision about what to change next. Each time you add or adjust a log line in that method, the running session reloads it, so there’s no restart to wait for between tries. You keep debugging without losing your place. A coding assistant can work the same way. Through Serverpod’s Model Context Protocol (MCP) server, it can read the server and Flutter logs from the running session and use what they show to decide its next step. Its edits to the availability method are hot reloaded too. If you’re choosing a backend for a Flutter app, it’s worth trying this before you decide. Start with the official Serverpod Quickstart. Its agent-assisted guide helps you create a Serverpod project and run it locally with serverpod start. Once your project is running, change something on the server, save, and check the result from the app you already have open.

flutterhotreloadserverpodfullstack
I gave an AI my first app spec. It cut half of it and took the other half too literally
10/08 下午03:58

I gave an AI my first app spec. It cut half of it and took the other half too literally

Cesare Bramante

A native app on both stores, in five languages, built by one person with an AI as the developer. This is how it started: the day an AI took my first spec apart. "Computers are good at following instructions, but not at reading your mind." Donald Knuth, 1984 Forty years later, it turns out this is still true when the computer is an AI. I'm a solo developer. I didn't write the app the classic way: a general-purpose AI was my developer, and FlutterFlow was my compiler. This series is how that went, from the first prompt to the stores, including the parts that didn't work. This first episode is about the idea, and about what the AI did to it. Who I am, briefly I'm 56 and I come from IT. I started as a computer technician, then worked as an IT security consultant, then spent years building web portals. For a while I also taught at university as a subject expert, without a degree. So I'm not new to software, but I had never built a mobile app. I work alone, and the app is meant for people a lot younger than me. Where the idea came from Having kids, and looking around me, I had the feeling that people see each other less. Not because they don't want to, but because organizing anything takes a group chat, fifty messages and a decision nobody wants to make. And most social apps push the other way. They are built to keep you on the phone, and they reward showing a life other people can't reach. I wanted an app you open in order to put the phone down: you see where something is happening, you go. I looked for an app that did this. Some had been born, had an early success and then closed. Others were very niche: only parties, only sports, only public events. Nothing for the simple case: a few friends who want to meet tonight. So I installed a bunch of these apps, used them for a while, and in January I wrote my first prompt, to Gemini. The first prompt My original prompt to Gemini, January 2026 (in Italian). The first line says "share your current and future position". It was a full spec. Contacts imported from the phone and turned into tags. Three states for every event: "I'm here", "I'll be there", "I'd like to go". Email invites for people without the app. A cloud backup. Five languages to pick from at install. A color palette, a font, even the ad banner position. Reading it today, it's a wish list. And the first line has a problem I didn't see at the time. What the AI told me The beginning of the AI's answer (in Italian). The bold line at the end is the rule I still use. The answer started kindly and then went straight to the point: the idea was clear, but too complex for the value people would perceive. The user had to understand too much before getting anything back. And then one sentence that I still use as a test for every new feature: In 30 seconds I must be able to say "I'm here" and invite someone. Then it went through everything. Onboarding in three steps at most. The map as the home screen, not as a feature. Tags that look like groups with an emoji, not like a database field. Invites through a link you can paste in any chat, with email only as a fallback. Cut the manual backup, cut the advanced history, use the system language. It also took my first line at face value. I had written "share your position", and it built on that: friends' avatars visible on the map, a "social map" where you see who is going where, a live "I'm here" position with a two hour timer. To be fair, that is exactly what my words said. It wasn't what I meant. What survived, and what didn't Looking at the app that is on the stores today: Kept: the map as the home screen, with different pins for different kinds of plans. The invite link, which became the most important feature: whoever opens it sees the place, the time and who's coming, even without installing anything. Tags became groups, and you can filter the map by group. Every event got a QR code. A ghost mode, although today it means something else: the event is visible only to the people you invited. And "I'd like to go", which became the Wish: you post an idea and see who's in before organizing anything. The cuts were the easy part. The real lesson was in the first line. "Share your position" is what location sharing apps do, so the AI gave me the most common version of that idea, and every following answer built on it. What I wanted was almost the opposite: show where things happen, not where people are. The AI read my words, not my intent. It took me months, and a lot of rewriting, to make the spec say what I meant. What I took from it Next episode: the revision loop, and the day a generated spec put my friends' live position on the map every ten seconds.

aifluttermobilebeginners
2026 Mobil Uygulama Geliştirme Yol Haritası: Flutter, Mimari ve Sıfır Hata Prensipleri
10/08 下午03:37

2026 Mobil Uygulama Geliştirme Yol Haritası: Flutter, Mimari ve Sıfır Hata Prensipleri

Nuh Mehmet Demirkol

2026 Mobil Uygulama Geliştirme Yol Haritası: Flutter, Mimari ve Sıfır Hata Prensipleri Mobil ekosistemi 2026 yılında artık sadece çalışan bir uygulama sunmayı değil; sıfır çökme (0% crash rate), 120 FPS akıcılık, pil ve bellek dostu mimarileri şart koşmaktadır. Bir Bilgisayar Mühendisi olarak hem kurumsal firmalara hem de yenilikçi girişimlere geliştirdiğim anahtar teslim mobil projelerde uyguladığım temel mühendislik ilkelerini bu makalede derledim. Çapraz platform (Cross-platform) geliştirme süreçlerinde Flutter (Impeller Render Engine) günümüzde yerel (native) performansı yakalamış durumdadır. Ancak yanlış durum yönetimi (State Management) projenin ilerleyen aşamalarında teknik borca (Technical Debt) yol açar. Domain Katmanı: İş mantığı (Use Cases) ve arayüz bağımsız kurallar. Data Katmanı: Repository pattern, API istemcileri (Dio, Retrofit) ve yerel önbellekleme (Isar, Hive, SQLite). Presentation Katmanı: BLoC / Cubit veya Riverpod ile reaktif, test edilebilir UI durumu. // Temiz Repository Kullanım Örneği abstract class UserRepository { Future<Either<Failure, UserProfile>> getUserProfile(String userId); } Uygulama mağazalarında ret almamak için şu 3 kurala sıkı sıkıya bağlıyız: Apple Human Interface & Guideline 2.1: Başlatma esnasında gereksiz izin istememek ve tam ekran yükleme kilitlerini engellemek. Kişisel Verilerin Korunması (KVKK & GDPR): Şifreli yerel depolama (Flutter Secure Storage / Keychain). Pil ve Ağ Verimliliği: Arka plan görevlerinde akıllı batching ve WebSocket optimizasyonu. Mobil uygulama yaptırırken en sık yapılan hata, yazılım ajanslarının kaynak kodları teslim etmemesi veya fahiş aylık bakım ücretleri talep etmesidir. Güvenilir bir yazılım işbirliğinde: %100 Açık Kaynak Kod ve Git Deposu müşteriye eksiksiz teslim edilmelidir. En az 1 Yıllık Teknik Bakım ve Hata Garantisi sözleşmeye bağlanmalıdır. Canlı Mağaza Hesapları (App Store & Google Play) müşterinin kendi kurumsal hesabında açılmalıdır. Fikir aşamasındaki veya mevcut mobil projeniz için ücretsiz mimari değerlendirme ve teklif almak için bana ulaşabilirsiniz: Mühendis: Nuh Mehmet Demirkol (Bilgisayar Mühendisi) Resmi Web Sitesi: nmdemirkol.com WhatsApp / Telefon: +90 507 823 68 11 Maliyet Hesaplayıcı: Mobil Uygulama Maliyet Hesaplama Aracı Ofis / Konum: Ankara, Türkiye

flutteriosandroidmobile
Flutter Video Conference App for iOS, Android, Web and Desktop.
10/08 下午02:43

Flutter Video Conference App for iOS, Android, Web and Desktop.

Malti Thakur

Originally published on the Ant Media blog. By the end of this guide you'll have a working Flutter video conference app running on your iPhone, with people joining the same call from their browsers. Because it's built with Flutter, the same code also runs on Android, the web, Windows, macOS and Linux, and the sample project and the Ant Media Flutter SDK give you everything you need to shape the app to your own product. Flutter lets you write the video conference app once and run it almost everywhere. One Dart codebase builds native apps for iOS and Android, a web app, and desktop apps for Windows, macOS and Linux. The Ant Media Flutter SDK handles the WebRTC connection to Ant Media Server on top of that, so the call screen you set up in this guide is the same one your Android, web and desktop users get, with around 0.5 seconds of latency. This guide uses an iPhone because iOS has the most setup steps: code signing, Developer Mode and device trust. Once the app runs there, running it on an Android phone is a single flutter run. You need four things: A Mac with the latest Xcode and the Flutter SDK installed An iPhone and a USB cable An Apple ID: a free account is enough A running Ant Media Server Enterprise Edition. Conferencing is an Enterprise Edition feature; with Community Edition, the Flutter SDK supports WebRTC publishing only. If you don't have a server yet, pick one of these: 14-day free trial (self-hosted): fill in the trial request form, get the license key by email, then follow the installation guide. No credit card required. Buy a license: monthly or annual subscription, or a one-time perpetual license. See Ant Media Server pricing. Throughout this guide, AMS_HOST is the server address: an IP address (for example 192.168.1.20) or a domain name. Open Safari on the iPhone and load the Ant Media Server web panel: http://AMS_HOST:5080 Result: the Ant Media Server page loads in Safari. Every later step depends on this connection, so fix it first when the page does not load. When Ant Media Server runs on the Mac, use the Mac's IP address, never localhost. The command ipconfig getifaddr en0 prints the Mac's IP address. Clone the Ant Media Flutter SDK repository and install the SampleProject dependencies. SampleProject bundles all 5 modes (Publish, Play, Peer to Peer, Conference and Data Channel) in one app. git clone https://github.com/ant-media/WebRTC-Flutter-SDK.git cd WebRTC-Flutter-SDK/example/SampleProject flutter pub get cd ios && pod install && cd .. Result: the terminal prints Pod installation complete! iOS installs only apps signed with an Apple ID. Open the Xcode workspace: open ios/Runner.xcworkspace In Xcode, complete these 5 actions in order: Click the blue Runner icon in the left sidebar. Select Runner under TARGETS. Open the Signing & Capabilities tab. Tick Automatically manage signing and choose your Apple ID under Team. Change Bundle Identifier to a unique value, such as com.yourname.conferencedemo. Result: the Signing section shows no red errors. Developer Mode lets Xcode and Flutter install debug builds on the iPhone. Complete these 3 actions: Connect the iPhone to the Mac and tap Trust on the phone. Open Settings → Privacy & Security → Developer Mode on the iPhone, turn Developer Mode on and restart. The option appears only after the phone has connected to Xcode. Run the device list command on the Mac: flutter devices Result: the iPhone appears in the device list. Copy the iPhone's device ID for Step 5. Build and launch the SampleProject on the iPhone with the copied device ID: flutter run -d YOUR_DEVICE_ID iOS blocks the first launch as an untrusted developer. Open Settings → General → VPN & Device Management on the iPhone, trust your Apple ID, and run the command again. Result: the app lists 5 modes: Play, Publish, Peer to Peer, Conference and Data Channel. Tap the settings icon (top right) and enter the WebSocket URL of the WebRTCAppEE application, the default Enterprise Edition application: ws://AMS_HOST:5080/WebRTCAppEE/websocket Servers with SSL on a domain use wss://AMS_HOST:5443/WebRTCAppEE/websocket instead. Result: the server indicator turns green. Join room demo from the iPhone with these 4 actions: Tap Conference. Enter a Stream ID, for example iphone. Enter the Room ID demo. Tap Connect, then allow camera, microphone and local network access. Result: the iPhone camera appears in the first tile. Open the multitrack conference sample page in three browser tabs to add three more people to room demo. Browsers allow camera access over http:// only on localhost, so choose the URL that matches the server setup. Option A — browser on the machine running Ant Media Server: http://localhost:5080/WebRTCAppEE/multitrack-conference.html?roomId=demo Option B — any computer, server with SSL: https://AMS_HOST:5443/WebRTCAppEE/multitrack-conference.html?roomId=demo Option C — any computer, server without SSL (development only): add http://AMS_HOST:5080 to chrome://flags/#u

flutterwebrtcioswebdev

freeCodeCamp

15 條

教學、指南與實踐文章

How to Build a Dart Package Analytics Tool with the pub.dev API: Beyond the 30-Day Window
09/24 上午05:01

How to Build a Dart Package Analytics Tool with the pub.dev API: Beyond the 30-Day Window

Oluwaseyi Fatunmole

When I published my package on pub.dev, the first few days were exciting as the number of downloads climbed. 201 downloads in a few days! Then something strange happened. The number dropped: 120, then

pub.devFluttermobileDart
How to Implement LEGO Architecture in Flutter [Full Handbook]
09/11 下午11:08

How to Implement LEGO Architecture in Flutter [Full Handbook]

Atuoha Anthony

Almost everyone has snapped two LEGO bricks together at some point, even without owning a single set as an adult. You press one brick down onto another, feel it click, and it holds. You likely never o

FlutterDartflutter-awarehandbook
How to Use Skills in Agentic Flutter Development: A Handbook for Devs
09/03 下午11:40

How to Use Skills in Agentic Flutter Development: A Handbook for Devs

Atuoha Anthony

One of the biggest misconceptions about AI-assisted development is that using AI means giving up the engineering experience you've built over the years. It doesn't. You can take the architecture patte

FlutterDartAIflutter-aware
How to Test Flutter Apps: Unit, Widget, Golden, and Integration Tests Explained
08/27 下午11:34

How to Test Flutter Apps: Unit, Widget, Golden, and Integration Tests Explained

Gidudu Nicholas

The first time I was asked "what's your test coverage?" in a technical interview, I didn't have a good answer. I had shipped a couple of real Flutter apps by then. They worked and users were using the

FlutterDartTestingwidget-testing
Mobile Background Execution: iOS Background Modes, Android WorkManager, and Background Services in Dart
08/25 上午01:45

Mobile Background Execution: iOS Background Modes, Android WorkManager, and Background Services in Dart

Oluwaseyi Fatunmole

Every mobile developer eventually hits the same wall: the app works perfectly when the user is looking at it. But the moment they press the home button, everything stops. A sync that should have compl

DartFluttermobileMobile Development
Chain of Responsibility Design Pattern: Decoupling Complex Business Rules, One Handler at a Time
08/22 上午04:45

Chain of Responsibility Design Pattern: Decoupling Complex Business Rules, One Handler at a Time

Oluwaseyi Fatunmole

Every system, at some point, ends up with a function that nobody wants to touch. It starts small: a simple validation check, an if statement here, another there. Then requirements grow and more condit

design patternsBehavioral Design PatternDartFlutter
How to Work with Material and Cupertino Decoupling in Flutter [Full Handbook]
08/19 上午12:05

How to Work with Material and Cupertino Decoupling in Flutter [Full Handbook]

Atuoha Anthony

Earlier this year, I published Decoupling Material and Cupertino in Flutter, which covered what was then a preview feature: Flutter's plan to separate the Material and Cupertino design libraries from

FlutterDartflutter-aware
How to Automate Flutter Releases with Fastlane and GitHub Actions for Firebase App Distribution, Google Play, TestFlight, and App Store Connect
08/12 上午12:47

How to Automate Flutter Releases with Fastlane and GitHub Actions for Firebase App Distribution, Google Play, TestFlight, and App Store Connect

Atuoha Anthony

Picture this: it's 4pm on a Friday, and your team has just merged the last feature for the sprint. But your product manager asks for a new build on TestFlight by the end of the day so the client can r

FlutterDartflutter-aware
Flutter Frontend Systems Design: How to Think Like a Senior Engineer in the AI Age
08/10 下午10:14

Flutter Frontend Systems Design: How to Think Like a Senior Engineer in the AI Age

Jesutoni Aderibigbe

Systems design has always been treated as a backend problem. Ask a group of Flutter engineers what systems design means, and most will describe server architecture: load balancers, databases, and micr

FlutterSystem Designmobile app developmentDart
How to Test AI Features in Flutter [Full Handbook]
08/08 上午12:05

How to Test AI Features in Flutter [Full Handbook]

Atuoha Anthony

You've spent two weeks building an AI assistant. The streaming chat looks beautiful, the system prompt is tight, and safety filters are configured. You demoed it to the team, and everyone was impresse

Fluttergeminiflutter-awareDart
A Deep Dive into Behavioral Patterns: The Visitor Design Pattern and its Clean Operations Across Complex Object Structures
08/07 上午12:11

A Deep Dive into Behavioral Patterns: The Visitor Design Pattern and its Clean Operations Across Complex Object Structures

Oluwaseyi Fatunmole

There's a problem that shows up in almost every growing software system, and most developers don't even realize they're hitting it until the damage is already done. You have a set of objects: differen

Designdesign patternsdesign principlesDart
Bluetooth Low Energy in Flutter: A Handbook for Devs
08/06 上午01:25

Bluetooth Low Energy in Flutter: A Handbook for Devs

Nikheel Vishwas Savant

Most Flutter tutorials stop at network calls and REST APIs. The moment you need to talk to a physical device, a heart rate monitor, a smart bulb, a fitness tracker, an industrial sensor, or your own c

bluetoothBluetooth Low EnergyFlutterFlutter SDK
From RPC to gRPC: Understanding Remote Procedure Calls, Protocol Buffers, and Modern Distributed Systems Communication
07/23 上午06:36

From RPC to gRPC: Understanding Remote Procedure Calls, Protocol Buffers, and Modern Distributed Systems Communication

Oluwaseyi Fatunmole

Every application, at some point, needs to talk to another system. A mobile app talks to a backend. A backend service talks to a payment gateway. An authentication service talks to a user service. A d

gRPCRPCDartFlutter
The Observer Design Pattern Handbook: Event-Driven Architecture & Domain-Driven Design in Dart
07/17 上午06:20

The Observer Design Pattern Handbook: Event-Driven Architecture & Domain-Driven Design in Dart

Oluwaseyi Fatunmole

Every application, at some point, has to deal with a fundamental challenge: something happens, and several other things need to react to it. A user logs in, and the app needs to save a token, cache th

#Domain-Driven-DesignDartMobile DevelopmentFlutter
How to Fix App Jank: A Practical Guide to Profiling Flutter Apps with DevTools
07/08 下午11:47

How to Fix App Jank: A Practical Guide to Profiling Flutter Apps with DevTools

Gidudu Nicholas

Flutter makes it fast to build beautiful UIs. That speed is one of the framework's greatest strengths, but it also creates a subtle problem: performance issues are easy to introduce and difficult to f

Flutterjankdevtoolsperformance

Hacker News

20 條

技術社群討論與專案連結

PomoPlan – Local-first Pomodoro, task, and habit tracker in Flutter
10/08 下午10:22

PomoPlan – Local-first Pomodoro, task, and habit tracker in Flutter

bentamara

Article URL: https://play.google.com/store/apps/details?id=com.pomoplan.pomoplan&hl=en_US Comments URL: https://news.ycombinator.com/item?id=50006163 Points: 2 # Comments: 0

10/08 下午04:09

Ask HN: Preferred state management for enterprise Flutter in 2026?

nmdemirkol

When scaling Flutter mobile apps to enterprise level, what state management approach (BLoC, Riverpod, Signals, etc.) have you found most maintainable over time? Interested in experiences regarding testability and onboarding. Comments URL: https://news.ycombinator.com/item?id=50003115 Points: 2 # Comments: 0

Friday – A voice-activated personal AI companion built with Flutter
10/07 下午11:34

Friday – A voice-activated personal AI companion built with Flutter

ddhruv2424

Article URL: https://github.com/dj2313/jarvis_assistant Comments URL: https://news.ycombinator.com/item?id=49994302 Points: 2 # Comments: 0

Show HN: Vynody – Cross-platform music player written in Flutter and Rust
10/01 下午08:13

Show HN: Vynody – Cross-platform music player written in Flutter and Rust

axel10

Article URL: https://github.com/axel10/vynody Comments URL: https://news.ycombinator.com/item?id=49920648 Points: 5 # Comments: 0

09/29 上午01:57

Ask HN: React Native or Flutter when the back end is Node?

rearview

Really confused between React Native and Flutter. I’ve mostly worked with Flutter and a little bit with React Native, but that was quite a while back, so I’m not sure how things stand today. I’m building a project with a Node.js + tRPC backend, so React Native is looking really tempting cause of that Typescript. While researching I've seen mixed reviews about performance in React Native like people saying they've spend weeks finding and managing performance issue which does makes me worry. The app I wanna build doesn't have complex canvas work or crazy animations. For a typical production app, what’s the performance situation with React Native vs Flutter now? Are there any major concerns which I should know before looking in React Native? Comments URL: https://news.ycombinator.com/item?id=49881846 Points: 5 # Comments: 15

Show HN: I compiled FreeRDP into a Flutter app so my phone can do RDP and SSH
09/19 上午02:14

Show HN: I compiled FreeRDP into a Flutter app so my phone can do RDP and SSH

neil_thomas

Hi HN, I'm the developer. XConnect is an SSH/SFTP client for iOS and Android that also has a real RDP client built in, so one app covers my Linux and Windows machines when I'm away from my desk. No account needed: tap "Continue Offline" and everything stays on the phone. I built it because fixing things from my phone meant switching between an SSH app, a file app and Microsoft's RDP app, and on a small screen the switching was the worst part. What it does: - SSH and Telnet, with a key row for phone keyboards (Esc, Tab, arrows, sticky Ctrl/Alt, one-tap Ctrl-C/D/L/Z) and multiple sessions. - RDP (iOS for now). FreeRDP 3 is compiled into the app, so the phone speaks RDP directly, with no gateway or relay. Trackpad or direct-touch mode, pinch to zoom, two-finger right-click and scroll. Hardware keyboards are forwarded by scancode. - SFTP, jump hosts (ProxyJump-style, for both SSH and SFTP), and 14 built-in scripts you can run on a server with one tap. - An optional AI agent with your own API key (OpenAI-compatible endpoints, Anthropic, or Ollama on your LAN). It runs commands on the host and asks before anything that looks destructive. It does nothing until you configure it. Some technical details: the native RDP core sends Dart one event per frame (connected / bitmap / resize / error / disconnected), in the same binary format my desktop app's RDP helper uses. Dart applies the updates to an RGBA framebuffer and paints it with decodeImageFromPixels. SSH is dartssh2 and the terminal is xterm.dart. Scripts run as heredocs, because my first version joined the lines with "; " and put the whole script behind the shebang comment. Credentials: passwords and private keys are stored in the iOS Keychain / Android Keystore. Sync is optional. Records are encrypted on the device with AES-256-GCM before upload, with a key derived from your account password (PBKDF2, then scrypt per record). To be upfront: login currently sends that password to the server over TLS, so this is not zero-knowledge yet. [Switching login to a separately derived auth hash is next on my list.] The app is closed source. I know that's a hard sell for something that holds SSH keys, so ask me anything about how credentials are handled. Not there yet: RDP on Android, port forwarding on mobile (the desktop app has it), passphrase-protected keys, keyboard-interactive 2FA, and mosh. Pricing: SSH, Telnet, SFTP, scripts and one jump host are free. Pro ($8/month, $68/year, or $88 one-time) adds RDP, the AI agent, sync and unlimited jump hosts. The same account also works in the desktop app for Windows, macOS and Linux. iOS: https://apps.apple.com/us/app/xconnect-ssh-rdp-client/id6810... I'd love feedback, especially from people who manage servers from their phone. What's missing? Comments URL: https://news.ycombinator.com/item?id=49758100 Points: 4 # Comments: 0

09/18 上午07:27

PPPlayer – An open-source music player built with Flutter

lucasveneno

Article URL: https://ppplayer.com Comments URL: https://news.ycombinator.com/item?id=49748159 Points: 3 # Comments: 1

I ported a VB6 game to Flutter and generated all 14 art themes
09/10 下午09:31

I ported a VB6 game to Flutter and generated all 14 art themes

lioil

Article URL: https://apps.apple.com/cz/app/kirian/id6774868017 Comments URL: https://news.ycombinator.com/item?id=49643435 Points: 3 # Comments: 0

Kelivo: A Flutter LLM Chat Client. Support Mobile and Desktop
09/10 下午03:37

Kelivo: A Flutter LLM Chat Client. Support Mobile and Desktop

xbmcuser

Article URL: https://github.com/Chevey339/kelivo Comments URL: https://news.ycombinator.com/item?id=49639819 Points: 2 # Comments: 0

09/08 下午05:08

Arch Linux on a OnePlus 12R, Powered by Denial Wayland and Flutter Compositor

dazhbog

Article URL: https://www.reddit.com/r/mobilelinux/comments/1w80kvt/arch_linux_on_a_oneplus_12r_powered_by_the_denial/ Comments URL: https://news.ycombinator.com/item?id=49607677 Points: 1 # Comments: 0

Show HN: CocoCut – A zero-cloud, 1-second video diary engine built with Flutter
09/06 上午08:29

Show HN: CocoCut – A zero-cloud, 1-second video diary engine built with Flutter

xcc3641

Article URL: https://cococut.app/en Comments URL: https://news.ycombinator.com/item?id=49582167 Points: 2 # Comments: 1

09/06 上午02:48

DartNative: Beyond the Limits of React Native and Flutter

iosephmagno

Hi React Native and Flutter devs! We’re launching DartNative, a cross-platform framework for Dart that aims to deliver a truly native look and feel on iOS and Android. Would love to hear what you think. https://x.com/iosemagno/status/2096288716721356974?s=46 Comments URL: https://news.ycombinator.com/item?id=49579471 Points: 1 # Comments: 0

09/06 上午01:56

GoEven – Free, ad-free group expense splitter built with Go, gRPC, and Flutter

Xainpro

Article URL: https://goeven.app Comments URL: https://news.ycombinator.com/item?id=49578979 Points: 2 # Comments: 0

Show HN: Flutter Starter A production-ready Flutter app boilerplate
08/25 下午07:50

Show HN: Flutter Starter A production-ready Flutter app boilerplate

Harish_0089

Article URL: https://github.com/GeekyAnts/flutter-starter Comments URL: https://news.ycombinator.com/item?id=49432329 Points: 3 # Comments: 0

08/15 上午11:31

Flutter_scene 0.21.0 runs 3D apps with Flutter GPU and Impeller

chem83

Article URL: https://xcancel.com/antibot/captcha Comments URL: https://news.ycombinator.com/item?id=49307343 Points: 1 # Comments: 0

08/13 下午04:32

Flet: Build cross-platform apps in Python, on top of Flutter

theanonymousone

Article URL: https://flet.dev/ Comments URL: https://news.ycombinator.com/item?id=49283154 Points: 1 # Comments: 0

Flutter 3.47
08/13 上午07:46

Flutter 3.47

gumby271

Article URL: https://flutter.dev/blog/whats-new-in-flutter-3-47 Comments URL: https://news.ycombinator.com/item?id=49280061 Points: 207 # Comments: 214

I built a local 3D marketplace with pizza-style tracking in Flutter
08/13 上午03:16

I built a local 3D marketplace with pizza-style tracking in Flutter

Nearnook_dev

Article URL: https://play.google.com/store/apps/details?id=com.lahoucintiyar.nearnook&hl=en_US Comments URL: https://news.ycombinator.com/item?id=49277267 Points: 1 # Comments: 0

Openhare: AI-powered desktop SQL client. Cross-platform. Built with Flutter
08/13 上午01:51

Openhare: AI-powered desktop SQL client. Cross-platform. Built with Flutter

thunderbong

Article URL: https://github.com/sjjian/openhare Comments URL: https://news.ycombinator.com/item?id=49276189 Points: 4 # Comments: 0

FieldFleet – self-hostable field operations built with Flutter and Supabase
08/12 上午02:33

FieldFleet – self-hostable field operations built with Flutter and Supabase

iguardo

Article URL: https://taskfleetai.github.io/fieldfleet/ Comments URL: https://news.ycombinator.com/item?id=49262555 Points: 3 # Comments: 0

Medium

10 條

Flutter 相關文章精選

Calling Swift From Flutter: The Bridge You’ll Eventually Have To Build
10/09 下午05:26

Calling Swift From Flutter: The Bridge You’ll Eventually Have To Build

Nicolas

Platform channels, Pigeon, and the mistakes I made so you don’t have to. Continue reading on Medium »

iosflutterdartswift
Your AI Agent Can See Your Flutter App Now: What the Dart MCP Server Lets You Do
10/09 下午05:19

Your AI Agent Can See Your Flutter App Now: What the Dart MCP Server Lets You Do

Nicolas

hot reload, widget inspection, and tests, all callable by your coding agent. What’s worth knowing before you hook it up. Continue reading on Medium »

flutter-app-developmentmcp-serverflutterprogramming
The download button worked perfectly on iOS. On Android, tapping it did absolutely nothing.
10/09 下午05:13

The download button worked perfectly on iOS. On Android, tapping it did absolutely nothing.

Utkarsh Bhatt

The download button worked perfectly on iOS. Continue reading on Medium »

flutter-app-developmentproduction-issueflutterandroid-app-development
Flutter’da BLoC ve Freezed ile Tip Güvenli State Management ve Event Handling
10/09 下午03:36

Flutter’da BLoC ve Freezed ile Tip Güvenli State Management ve Event Handling

Affan Emirhan Çüçen

Flutter projeleri büyüdükçe yalnızca arayüzü çalışır hâle getirmek yeterli olmaz. Durum geçişlerinin tahmin edilebilir, iş mantığının test… Continue reading on Medium »

flutter-freezedblocflutterstate-management
Flutter Video Conference App for iOS, Android, Web and Desktop
10/09 下午01:58

Flutter Video Conference App for iOS, Android, Web and Desktop

Mohammad Owais K.

By the end of this guide you’ll have a working Flutter video conference app running on your iPhone, with people joining the same call from… Continue reading on Medium »

flutter-app-developmentflutter
Flutter Under the Hood | Story 37 | Semantics: How Flutter Makes Your UI Understandable to…
10/09 下午01:41

Flutter Under the Hood | Story 37 | Semantics: How Flutter Makes Your UI Understandable to…

Developer Hub

Stop using Flutter. Start understanding Flutter. Continue reading on Flutter Hub »

fluttertechnologysoftware-developmentdart
Stop Typing What’s Already on the Screen: Selectable OCR in Flutter
10/09 下午01:29

Stop Typing What’s Already on the Screen: Selectable OCR in Flutter

Adhil Latheef

9 Oct 2026 · Adhil Latheef Continue reading on Medium »

open-sourcemobile-app-developmentocrdart
Stop Launching the Whole App to Check One Widget: A Practical Guide to Flutter Widget Previewer
10/09 下午01:00

Stop Launching the Whole App to Check One Widget: A Practical Guide to Flutter Widget Previewer

Melbin Babu

Preview narrow screens, large text, dark theme and error states side by side, straight from your IDE or one CLI command Continue reading on Medium »

mobile-app-developmentdartflutter
I Measured Apple’s Liquid Glass Against SwiftUI, Pixel by Pixel — and Brought It to Flutter
10/09 上午08:47

I Measured Apple’s Liquid Glass Against SwiftUI, Pixel by Pixel — and Brought It to Flutter

Aymanomara

iOS 26 Liquid Glass for Flutter, with Material 3 on Android, behind one API. Continue reading on Medium »

flutterliquid-glassdartmobile-development
Surviving Flutter Dependency Upgrade
10/09 上午06:50

Surviving Flutter Dependency Upgrade

Asmaa Amrawy

It’s easy to find the commands anywhere. What’s not easy is knowing what to do after you hit flutter pub upgrade and everything falls… Continue reading on Medium »

flutterdependency-management

Reddit

6 條

社群日榜討論與資源

10/09 上午02:44

Title: Found a public patch that cracks my Flutter app's subscription. How do other indie devs handle this?

/u/markatlarge

I'm a solo dev with a small Flutter app (on-device AI, RevenueCat subscriptions + AdMob). Last week Crashlytics showed a crash from a modified copy. I'd started logging the app's installer as a custom key, and it showed MT Manager. Digging further, I found a public ReVanced/Morphe-style patch set that unlocks premium (it rewrites RevenueCat's entitlement checks), removes ads, and bypasses Play's license check. A few things I learned: - Logging the installer package as a Crashlytics custom key is a cheap way to spot modified copies. - An older RevenueCat Android SDK shipped a -dontoptimize consumer rule, which turned R8 optimization off app-wide. Once I updated, R8's inlining/renaming seems to have broken the patch, at least for now. - I've filed a DMCA notice with GitHub. Questions for people who've been through this: Is server-side entitlement checking (Play Integrity + RevenueCat REST) worth it at small scale? Did DMCA takedowns for patch repos actually work for you? Anything you wish you'd done earlier? submitted by /u/markatlarge [link] [comments]

10/08 下午08:12

Flutter web is capped at 60 fps on 120 hz Android phones (Chrome). I made a drop in script that gets it to 120

/u/JesusOS

On 120 hz screens, Chrome on Android limits main thread frames to 60 fps. It lifts the limit only when touch input occurs which is why it is sorta fine when you drag without releasing your finger. Web workers that own a canvas get their own frame clock so the main thread limit does not apply to them. So theoretically handing a worker the flutter canvas (and syncing it to the worker's clock) should allow flutter on android's chrome to run at 120 fps and that's essentially what this demo is: https://shim.mathiewabbas.dev/ Results: Pixel 10 Pro XL, Flutter 3.47.2, without and with the js script App Without With Listview 57 113-120 Material 3 demo 56 111 Flutter gallery 57 114 Wonderous 59 113-120 Pls try it out on an android device and do tell if anything goes wrong, here is how to use it: https://github.com/aumb/flutter_shim#use-it-in-your-app and the script: https://github.com/aumb/flutter_shim/blob/main/web/flutter_shim.js Caveats: - It relies on undocumented chrome behavior, If chrome starts capping workers too it will fall back to 60 - App does twice the frame work while animating so it uses a bit more battery - Multi-threaded skwasm might crash. That's an existing flutter bug (https://github.com/flutter/flutter/issues/193439), but running at 120 hz makes it happen more often, so use single threaded wasm (default) - Doesn't help on iPhone since safari runs worker frames at a fixed 15ms timer submitted by /u/JesusOS [link] [comments]

10/09 下午12:31

Announcing Genkit Dart 1.0: Build production-ready agentic apps with Dart and Flutter

/u/thegravity98ms2

Flutter goes AI submitted by /u/thegravity98ms2 [link] [comments]

10/09 上午10:12

I open-sourced my media converter app (1M+ downloads) - 25 formats, 12 languages, adaptive layouts, all in Flutter

/u/SwiftScoutSimon

Hey everyone, I just open-sourced Media Converter Pro: Ultimate – a video/audio converter that runs locally on your device using FFmpeg. No uploads, no servers. It's a Flutter rewrite of my old native Android app from 2018. The rewrite has been a long journey, but here's what it does now: - 25 output formats (14 audio, 11 video) with format-specific options - Quick presets, trimming with waveform preview, batch queues - Adaptive layouts for phones, tablets, foldables, and large screens - 12 languages - Conversions keep running in the background The project is structured as a Dart workspace monorepo - apps, modules, and packages are decoupled so things stay clean. The converter logic lives in its own module, the ui kit (sofluffy_ui) is a separate git submodule, and platform-specific stuff (FFmpegKit, notifications, file handling) are isolated in packages. Some things I learned building this: - FFmpeg config management at scale is its own beast. I ended up building a CLI validator (mcu_configs) to check JSON schemas, cross-file mappings, and translation parity across all 12 languages. - Adaptive layouts across phone/tablet/foldable/large screen required rethinking almost every page, not just wrapping things in LayoutBuilder. - Keeping the monorepo dependency graph strict (packages never import modules, modules never import apps) saved me from a lot of pain. The app is GPL-3.0 since it bundles the full-GPL build of FFmpeg through FFmpegKit. Would love feedback on the architecture or anything else. And if you find it useful, a star would be cool. Link belows: submitted by /u/SwiftScoutSimon [link] [comments]

10/09 上午03:05

Codemagic free tier: 1h+ queue before a 7-minute Android build starts. Normal? And what do you use for build-to-store?

/u/willoucqfd

Solo dev here, taking over two existing Flutter apps and discovering the mobile world as I go (I come from web). Mobile work is limited to about one day a week. My daily machine is a Linux PC, so a hosted service that can build and ship the iOS app for me is a big part of the appeal: no Mac on my desk. I'm evaluating Codemagic on the free individual plan before deciding whether to pay for it, so this is a question, not a complaint: I know I'm not paying yet. The build itself takes about 7 minutes (Android debug APK, mac_mini_m2). The queue is the issue: last night a build sat in "queued" for more than 90 minutes before starting. The day before, the same workflow started within a couple of minutes. Status page showed no incident, so I assume the shared M2 pool was just busy. I found GitHub discussions with people reporting 1 to 10 hour queues (2024 and one from this week), but nothing that says whether paying changes anything. The pricing page mentions "reserved concurrencies" on team plans, and nothing about queue priority for pay-as-you-go. Questions for people actually using it: On pay-as-you-go, do your builds start right away, or do you still queue? Is Linux (linux_x2) or Mac mini M4 really a less crowded pool than the free M2 one? More broadly, how is Codemagic day to day once you pay: queue times, flakiness, support? Since I'm new to this and Mac-less: what would you recommend for the full chain, build to signing to Play Store / TestFlight upload, for a solo dev on Linux inheriting two apps? GitHub Actions + fastlane with a macOS runner, Bitrise, Xcode Cloud, a rented Mac, something else? Losing one or two hours of my single weekly mobile day to a queue isn't workable, so I'd rather pay for something that starts on time. I just want to know what I'd be paying for before I build the iOS workflow. Real-world numbers and beginner-proof advice appreciated. submitted by /u/willoucqfd [link] [comments]

10/08 下午08:45

Publishing apps for PC (windows 10/11) Steam vs Microsoft Store

/u/sentialjacksome

Microsoft Store is really easy to upload to, but it's also the hardest to profit from due to requiring a swift/bic code to earn even a single dime from it. Ya get a swift/bic code from starting a company, btw. Steam has an upfront cost of 100 dollars, preventing me from even trying it out. So, I'm asking all of you for advice: what's the best place to upload apps to? For context, I've already uploaded my app to the Microsoft Store https://apps.microsoft.com/detail/9mt834rpf8zp?hl=nl-NL&gl=BE, but I can't make money from it because I'm not being a company. Getting it on the Microsoft Store was really annoying, especially with the CSV listing and the internationalisation, or I18N, abbreviated or whatever ya call it. It's way easier than the Google Play Store, though, which I've also uploaded to in the past: https://play.google.com/store/apps/details?id=com.torrentspire.ai&hl=nl . I'd love to hear your stories about creating apps for Steam and/or the Microsoft Store. Also, I'm not including the links for self-advertisement purposes; I just want y'all to know that I've done these things before and am experienced in them. That's why I chose to include the links. My apologies for my poor English; it's my second language and therefore not my strongest. If anything feels odd, know I wrote this without the use of AI and simply learned English from Stephen King books. submitted by /u/sentialjacksome [link] [comments]

FAQ

常見問題