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

24h Intel · 81 条

Flutter 24小时情报 GitHub 热门仓库与技术资讯

每日汇总 Flutter / Dart GitHub 热门仓库,以及 Dev.to、freeCodeCamp、Hacker News、Medium、Reddit 的近期技术资讯,跟踪 24 小时 Stars 增量与社区讨论。

更新于 11/07 10:086 个来源

GitHub

20 条

Dart 与 Flutter 相关仓库热度

Dev.to

12 条

开发者文章与项目分享

Your Flutter desktop app won't start: one corrupt preferences file
11/07 07:24

Your Flutter desktop app won't start: one corrupt preferences file

Frank Milvus

The report was short: the desktop build opens and closes immediately. No window, no error dialog, nothing to click. On the terminal, the process printed a stack trace and quit before anything appeared on screen. The cause was not a broken build, a missing library, or a failed update. It was one settings file with a missing bracket. This post is about that failure and the fix: how a single corrupt JSON file can stop a Flutter desktop app before its first frame, why wrapping the read in try/catch does not save you, and how the app now repairs itself at launch without throwing away the evidence. The terminal showed this: Unhandled Exception: FormatException: Unexpected character (at character 31943) ...notif_suppressed_136":1793799452696}"flutter.keystore_durability_expecte... Look closely at the quoted fragment. There is a closing } after a timestamp, and then another key starts immediately: …2696}"flutter…. That is not a value the app wrote. It is two JSON objects glued together — the remains of an interrupted write. The exception happened inside an awaited call in main(), before runApp(). An async main without a top-level catch lets that exception escape, and the Flutter engine never gets a route to render. From the user's side, the app silently refuses to start. There is no error boundary for this class of bug. The crash reporting tool had not finished starting either, so there was no report to read. The only evidence was the terminal output and the file on disk. On mobile, shared_preferences is backed by platform-native storage. On Linux and Windows, the plugins are different: both keep the entire preferences store in a single file called shared_preferences.json in the app's support directory. On Linux that is: ~/.local/share/com.folcadi.app/shared_preferences.json Every key the app saves lives in that one JSON object. The plugin does not read keys lazily; it decodes the whole file once, inside SharedPreferences.getInstance(), and hands you a map. That design is fine for settings. It becomes a critical path when the first thing your app does is read a setting. Folcadi restores the user's appearance preferences before runApp() so the first frame is already in the right theme. That means launch order is: Flutter bindings initialize. The app asks for preferences. The plugin reads and decodes the JSON file. Only then does the app build its first widget. If step 3 throws, steps 4 onward never happen. This is also why the bug was invisible in development. A fresh profile has a valid file. Tests that mock preferences never see the real decoder. The failure needs a file that was damaged outside the app's control — a power loss, a forced shutdown, a full disk during a write, or a sync tool touching the profile directory. We cannot point to the exact event that damaged this one, and that is the point: the app must survive a damaged file regardless of how it happened. try/catch around the read is too late The obvious fix is to catch the exception where preferences are read: try { final prefs = await SharedPreferences.getInstance(); // ... } catch (e) { // use defaults } That helps the call site you wrapped, and it is worth doing — the app now has exactly that guard around its startup restores. But it does not repair the store. Every other call to getInstance() in the app still hits the same file and throws the same error. A settings screen opened ten minutes later fails in a different place, with a different stack trace, and the app looks broken in a new way. Worse, the failed read leaves the file untouched. The next launch repeats the failure. A one-time catch turns a hard crash into a permanent, scattered malfunction. The real problem is that the file is untrusted input. Treat it that way: inspect it before the plugin ever opens it, and remove it from the plugin's path when it is unusable. The repair runs immediately after WidgetsFlutterBinding.ensureInitialized() and before any code touches SharedPreferences: void main() async { WidgetsFlutterBinding.ensureInitialized(); await repairCorruptSharedPreferences(); // ...the rest of startup } The function has a simple contract. It returns true if a corrupt file was moved aside, and false if there was nothing to do — on web, on mobile, when the file is missing, or when the file is healthy. Inside, the checks are deliberately narrow: if (!await target.exists()) return false; final raw = await target.readAsString(); if (raw.trim().isEmpty) return false; try { final decoded = jsonDecode(raw); // The plugin expects a JSON object; anything else is not a usable store. if (decoded is Map) return false; } on FormatException catch (e) { debugPrint('PrefsRepair: corrupt preferences file: $e'); } Three details matter here. Whitespace-only is not corruption. An empty file is what a fresh install or a cleared profile looks like. Renaming it would create noise and a pointless backup on every clean launch. Valid JSON is not automatically valid preferenc

flutterdartdesktopdebugging
Offline-First Flutter for Robot Operators and Field Technicians
11/07 02:58

Offline-First Flutter for Robot Operators and Field Technicians

vmodal_ai

The problem Robots and edge devices may operate in warehouses, factories, outdoors, This tutorial focuses on practical architecture and performance Local cache and command outbox → connectivity-aware repository → Classify actions as read-only, safely retryable, or time-sensitive/non-replayable. Cache non-sensitive reference data and show when each value was last refreshed. Use idempotency keys for retryable operations and explicit user confirmation for commands that cannot be safely queued. On reconnect, refresh authoritative device state before enabling actions. Test airplane mode, DNS failure, gateway reboot, and long-lived stale sessions. enum RetryPolicy { safeToRetry, refreshBeforeRetry, neverReplay }\n\nclass PendingOperation {\n const PendingOperation({required this.id, required this.policy});\n final String id;\n final RetryPolicy policy;\n} The snippets are illustrative starting points, not drop-in integrations. Measure end-to-end latency, not only one function or model invocation. Report p50 and p95/p99 latency alongside throughput, memory use, and dropped work. Bound queues and define what happens when consumers fall behind. Avoid repeated frame copies and expensive work on Flutter's UI isolate. Test sustained workloads after the device reaches thermal equilibrium. Keep UI state, device state, and robot state distinct. Add timeouts, cancellation, reconnection, and explicit stale-data indicators. Profile on the actual target hardware using a reproducible build. Never replay motion commands simply because connectivity returned. Do not present cached telemetry as live without a freshness indicator. Avoid unlimited local outboxes that can grow during long outages. Disconnect the phone during a mock robot task. Verify the app shows Flutter performance best practices Flutter DevTools Android Developers NVIDIA Developer ROS 2 documentation Useful Links Website: www.v-modal.com SDK Flutter: https://github.com/v-modal/vmodal_sdk_flutter SDK Android: https://github.com/v-modal/vmodal_sdk_android Discord: https://discord.gg/K72z28KUx Reddit: https://www.reddit.com/r/v_modal/

flutterrobotics
Advanced Flutter Profiling for Smart Glasses and Robotics
11/07 02:56

Advanced Flutter Profiling for Smart Glasses and Robotics

vmodal_ai

This advanced tutorial treats Flutter as the operator-facing presentation layer while wearable SDKs, Jetson services, ROS 2 nodes, and NVIDIA-accelerated inference handle device-specific or compute-heavy work. The goal is predictable latency, bounded memory, useful observability, and graceful degradation—not simply maximizing message throughput. Architecture note: Keep safety-critical control loops on the robot. A Flutter app is not a hard real-time controller and must not be the sole safety mechanism. Track freshness, event-to-display latency, throughput, frame pacing, CPU, memory, network use, battery, thermal state, dropped messages, reconnect time, and command acknowledgements. Do not use a single FPS number to represent the entire system: a smooth screen can still display stale data. sensor capture -> native/ROS processing -> gateway publish -> Flutter receive -> state accepted -> widget build -> frame rendered Record source and receive timestamps separately. Use monotonic clocks for elapsed durations within a process. When comparing devices, account for clock offset and uncertainty. Profile on a physical target in profile mode and inspect Flutter DevTools' Performance view. Debug-mode timing is not a reliable production baseline. See https://docs.flutter.dev/tools/devtools/performance Start from a clean launch. Connect to the robot or replay a fixed trace. Run a representative scenario for several minutes. Record frame times, memory, CPU, message rates, stale-data counts, and reconnects. Change one variable at a time. Compare p50, p95, and p99 latency, not just averages. class PipelineMetrics { int received = 0; int accepted = 0; int dropped = 0; int stale = 0; int uiPublishes = 0; } Use bounded metric windows or histograms; do not store every sample forever. High-rate sources should not directly trigger widget rebuilds. Use a latest-value cache for state-like data, bounded queues for events that must be preserved, and a controlled presentation cadence. class LatestValue<T> { T? _value; int _version = 0; void put(T value) { _value = value; _version++; } T? get value => _value; int get version => _version; } Replacing an older pending value may be acceptable for battery, pose, or temperature. Commands, alarms, and audit events need a separate reliable path and explicit acknowledgement semantics. Every queue needs a maximum capacity, an overflow policy, a drop/replacement counter, and an owner responsible for recovery. Latest wins: pose, preview frames, current detections. Drop old items: display-oriented streams where freshness matters. Persist: events that must survive disconnection. Reject with feedback: commands that cannot safely be queued. An unbounded telemetry or log list turns overload into memory growth rather than a visible, measurable condition. Keep parsing, filtering, and transformations out of build(). Split screens into independently updating sections and avoid rebuilding camera or map widgets for unrelated state changes. For CPU-heavy pure Dart work, benchmark compute or a dedicated isolate with realistic payload sizes. Isolates have startup and message-transfer costs. For hardware acceleration or platform APIs, prefer a native service designed for that workload. Sensors -> ROS 2 / accelerated nodes -> Jetson gateway | compact UI-facing state | WebSocket / MQTT / gRPC | Flutter client NVIDIA Isaac ROS provides accelerated, low-latency ROS 2 packages for Jetson and other NVIDIA platforms. Keep image processing, inference, and robot control on the compute side; send Flutter only the information needed for visualization and operator decisions. See https://nvidia-isaac-ros.github.io/ Carry source timestamp, receive timestamp, sequence number/version, source identity, and optional confidence or quality. The UI must distinguish zero from unknown, disconnected, and stale. Do not show a green health indicator just because the last payload was healthy. Simulate network delay and packet loss, bursts, robot process restarts, wearable permission loss, camera interruptions, inference slowdown, low memory, and thermal throttling. Under pressure, reduce preview resolution or update frequency and pause nonessential charts—but preserve command and safety status visibility. [ ] Frame-time baseline captured on physical hardware [ ] p50/p95/p99 event-to-display latency measured [ ] Queues bounded and overflow observable [ ] High-frequency state coalesced before UI updates [ ] Commands and alarms use reliable semantics [ ] Clock domains and stale-data rules documented [ ] Network and reconnect behavior tested [ ] Thermal and memory pressure scenarios tested [ ] Robot safety remains independent of the mobile app [ ] Performance budgets enforced in repeatable test

flutterperformancesmartglassesrobotics
Flutter + Jetson: Thermal and Memory Pressure-Aware Operator UI
11/07 02:54

Flutter + Jetson: Thermal and Memory Pressure-Aware Operator UI

vmodal_ai

This advanced tutorial treats Flutter as the operator-facing presentation layer while wearable SDKs, Jetson services, ROS 2 nodes, and NVIDIA-accelerated inference handle device-specific or compute-heavy work. The goal is predictable latency, bounded memory, useful observability, and graceful degradation—not simply maximizing message throughput. Architecture note: Keep safety-critical control loops on the robot. A Flutter app is not a hard real-time controller and must not be the sole safety mechanism. Track freshness, event-to-display latency, throughput, frame pacing, CPU, memory, network use, battery, thermal state, dropped messages, reconnect time, and command acknowledgements. Do not use a single FPS number to represent the entire system: a smooth screen can still display stale data. sensor capture -> native/ROS processing -> gateway publish -> Flutter receive -> state accepted -> widget build -> frame rendered Record source and receive timestamps separately. Use monotonic clocks for elapsed durations within a process. When comparing devices, account for clock offset and uncertainty. Profile on a physical target in profile mode and inspect Flutter DevTools' Performance view. Debug-mode timing is not a reliable production baseline. See https://docs.flutter.dev/tools/devtools/performance Start from a clean launch. Connect to the robot or replay a fixed trace. Run a representative scenario for several minutes. Record frame times, memory, CPU, message rates, stale-data counts, and reconnects. Change one variable at a time. Compare p50, p95, and p99 latency, not just averages. class PipelineMetrics { int received = 0; int accepted = 0; int dropped = 0; int stale = 0; int uiPublishes = 0; } Use bounded metric windows or histograms; do not store every sample forever. High-rate sources should not directly trigger widget rebuilds. Use a latest-value cache for state-like data, bounded queues for events that must be preserved, and a controlled presentation cadence. class LatestValue<T> { T? _value; int _version = 0; void put(T value) { _value = value; _version++; } T? get value => _value; int get version => _version; } Replacing an older pending value may be acceptable for battery, pose, or temperature. Commands, alarms, and audit events need a separate reliable path and explicit acknowledgement semantics. Every queue needs a maximum capacity, an overflow policy, a drop/replacement counter, and an owner responsible for recovery. Latest wins: pose, preview frames, current detections. Drop old items: display-oriented streams where freshness matters. Persist: events that must survive disconnection. Reject with feedback: commands that cannot safely be queued. An unbounded telemetry or log list turns overload into memory growth rather than a visible, measurable condition. Keep parsing, filtering, and transformations out of build(). Split screens into independently updating sections and avoid rebuilding camera or map widgets for unrelated state changes. For CPU-heavy pure Dart work, benchmark compute or a dedicated isolate with realistic payload sizes. Isolates have startup and message-transfer costs. For hardware acceleration or platform APIs, prefer a native service designed for that workload. Sensors -> ROS 2 / accelerated nodes -> Jetson gateway | compact UI-facing state | WebSocket / MQTT / gRPC | Flutter client NVIDIA Isaac ROS provides accelerated, low-latency ROS 2 packages for Jetson and other NVIDIA platforms. Keep image processing, inference, and robot control on the compute side; send Flutter only the information needed for visualization and operator decisions. See https://nvidia-isaac-ros.github.io/ Carry source timestamp, receive timestamp, sequence number/version, source identity, and optional confidence or quality. The UI must distinguish zero from unknown, disconnected, and stale. Do not show a green health indicator just because the last payload was healthy. Simulate network delay and packet loss, bursts, robot process restarts, wearable permission loss, camera interruptions, inference slowdown, low memory, and thermal throttling. Under pressure, reduce preview resolution or update frequency and pause nonessential charts—but preserve command and safety status visibility. [ ] Frame-time baseline captured on physical hardware [ ] p50/p95/p99 event-to-display latency measured [ ] Queues bounded and overflow observable [ ] High-frequency state coalesced before UI updates [ ] Commands and alarms use reliable semantics [ ] Clock domains and stale-data rules documented [ ] Network and reconnect behavior tested [ ] Thermal and memory pressure scenarios tested [ ] Robot safety remains independent of the mobile app [ ] Performance budgets enforced in repeatable test

physicalainvidiaflutterjetson
Flutter Robotics: Bounded Queues, Load Shedding, and Priority Channels
11/07 02:52

Flutter Robotics: Bounded Queues, Load Shedding, and Priority Channels

vmodal_ai

This advanced tutorial treats Flutter as the operator-facing presentation layer while wearable SDKs, Jetson services, ROS 2 nodes, and NVIDIA-accelerated inference handle device-specific or compute-heavy work. The goal is predictable latency, bounded memory, useful observability, and graceful degradation—not simply maximizing message throughput. Architecture note: Keep safety-critical control loops on the robot. A Flutter app is not a hard real-time controller and must not be the sole safety mechanism. Track freshness, event-to-display latency, throughput, frame pacing, CPU, memory, network use, battery, thermal state, dropped messages, reconnect time, and command acknowledgements. Do not use a single FPS number to represent the entire system: a smooth screen can still display stale data. sensor capture -> native/ROS processing -> gateway publish -> Flutter receive -> state accepted -> widget build -> frame rendered Record source and receive timestamps separately. Use monotonic clocks for elapsed durations within a process. When comparing devices, account for clock offset and uncertainty. Profile on a physical target in profile mode and inspect Flutter DevTools' Performance view. Debug-mode timing is not a reliable production baseline. See https://docs.flutter.dev/tools/devtools/performance Start from a clean launch. Connect to the robot or replay a fixed trace. Run a representative scenario for several minutes. Record frame times, memory, CPU, message rates, stale-data counts, and reconnects. Change one variable at a time. Compare p50, p95, and p99 latency, not just averages. class PipelineMetrics { int received = 0; int accepted = 0; int dropped = 0; int stale = 0; int uiPublishes = 0; } Use bounded metric windows or histograms; do not store every sample forever. High-rate sources should not directly trigger widget rebuilds. Use a latest-value cache for state-like data, bounded queues for events that must be preserved, and a controlled presentation cadence. class LatestValue<T> { T? _value; int _version = 0; void put(T value) { _value = value; _version++; } T? get value => _value; int get version => _version; } Replacing an older pending value may be acceptable for battery, pose, or temperature. Commands, alarms, and audit events need a separate reliable path and explicit acknowledgement semantics. Every queue needs a maximum capacity, an overflow policy, a drop/replacement counter, and an owner responsible for recovery. Latest wins: pose, preview frames, current detections. Drop old items: display-oriented streams where freshness matters. Persist: events that must survive disconnection. Reject with feedback: commands that cannot safely be queued. An unbounded telemetry or log list turns overload into memory growth rather than a visible, measurable condition. Keep parsing, filtering, and transformations out of build(). Split screens into independently updating sections and avoid rebuilding camera or map widgets for unrelated state changes. For CPU-heavy pure Dart work, benchmark compute or a dedicated isolate with realistic payload sizes. Isolates have startup and message-transfer costs. For hardware acceleration or platform APIs, prefer a native service designed for that workload. Sensors -> ROS 2 / accelerated nodes -> Jetson gateway | compact UI-facing state | WebSocket / MQTT / gRPC | Flutter client NVIDIA Isaac ROS provides accelerated, low-latency ROS 2 packages for Jetson and other NVIDIA platforms. Keep image processing, inference, and robot control on the compute side; send Flutter only the information needed for visualization and operator decisions. See https://nvidia-isaac-ros.github.io/ Carry source timestamp, receive timestamp, sequence number/version, source identity, and optional confidence or quality. The UI must distinguish zero from unknown, disconnected, and stale. Do not show a green health indicator just because the last payload was healthy. Simulate network delay and packet loss, bursts, robot process restarts, wearable permission loss, camera interruptions, inference slowdown, low memory, and thermal throttling. Under pressure, reduce preview resolution or update frequency and pause nonessential charts—but preserve command and safety status visibility. [ ] Frame-time baseline captured on physical hardware [ ] p50/p95/p99 event-to-display latency measured [ ] Queues bounded and overflow observable [ ] High-frequency state coalesced before UI updates [ ] Commands and alarms use reliable semantics [ ] Clock domains and stale-data rules documented [ ] Network and reconnect behavior tested [ ] Thermal and memory pressure scenarios tested [ ] Robot safety remains independent of the mobile app [ ] Performance budgets enforced in repeatable test

flutterroboticsperformance
Flutter + NVIDIA Jetson: Designing a Low-Latency Robotics Gateway
11/07 02:50

Flutter + NVIDIA Jetson: Designing a Low-Latency Robotics Gateway

vmodal_ai

Flutter + NVIDIA Jetson: Designing a Low-Latency Robotics Gateway This advanced tutorial treats Flutter as the operator-facing presentation layer while wearable SDKs, Jetson services, ROS 2 nodes, and NVIDIA-accelerated inference handle device-specific or compute-heavy work. The goal is predictable latency, bounded memory, useful observability, and graceful degradation—not simply maximizing message throughput. Architecture note: Keep safety-critical control loops on the robot. A Flutter app is not a hard real-time controller and must not be the sole safety mechanism. Track freshness, event-to-display latency, throughput, frame pacing, CPU, memory, network use, battery, thermal state, dropped messages, reconnect time, and command acknowledgements. Do not use a single FPS number to represent the entire system: a smooth screen can still display stale data. sensor capture -> native/ROS processing -> gateway publish -> Flutter receive -> state accepted -> widget build -> frame rendered Record source and receive timestamps separately. Use monotonic clocks for elapsed durations within a process. When comparing devices, account for clock offset and uncertainty. Profile on a physical target in profile mode and inspect Flutter DevTools' Performance view. Debug-mode timing is not a reliable production baseline. See https://docs.flutter.dev/tools/devtools/performance Start from a clean launch. Connect to the robot or replay a fixed trace. Run a representative scenario for several minutes. Record frame times, memory, CPU, message rates, stale-data counts, and reconnects. Change one variable at a time. Compare p50, p95, and p99 latency, not just averages. class PipelineMetrics { int received = 0; int accepted = 0; int dropped = 0; int stale = 0; int uiPublishes = 0; } Use bounded metric windows or histograms; do not store every sample forever. High-rate sources should not directly trigger widget rebuilds. Use a latest-value cache for state-like data, bounded queues for events that must be preserved, and a controlled presentation cadence. class LatestValue<T> { T? _value; int _version = 0; void put(T value) { _value = value; _version++; } T? get value => _value; int get version => _version; } Replacing an older pending value may be acceptable for battery, pose, or temperature. Commands, alarms, and audit events need a separate reliable path and explicit acknowledgement semantics. Every queue needs a maximum capacity, an overflow policy, a drop/replacement counter, and an owner responsible for recovery. Latest wins: pose, preview frames, current detections. Drop old items: display-oriented streams where freshness matters. Persist: events that must survive disconnection. Reject with feedback: commands that cannot safely be queued. An unbounded telemetry or log list turns overload into memory growth rather than a visible, measurable condition. Keep parsing, filtering, and transformations out of build(). Split screens into independently updating sections and avoid rebuilding camera or map widgets for unrelated state changes. For CPU-heavy pure Dart work, benchmark compute or a dedicated isolate with realistic payload sizes. Isolates have startup and message-transfer costs. For hardware acceleration or platform APIs, prefer a native service designed for that workload. Sensors -> ROS 2 / accelerated nodes -> Jetson gateway | compact UI-facing state | WebSocket / MQTT / gRPC | Flutter client NVIDIA Isaac ROS provides accelerated, low-latency ROS 2 packages for Jetson and other NVIDIA platforms. Keep image processing, inference, and robot control on the compute side; send Flutter only the information needed for visualization and operator decisions. See https://nvidia-isaac-ros.github.io/ Carry source timestamp, receive timestamp, sequence number/version, source identity, and optional confidence or quality. The UI must distinguish zero from unknown, disconnected, and stale. Do not show a green health indicator just because the last payload was healthy. Simulate network delay and packet loss, bursts, robot process restarts, wearable permission loss, camera interruptions, inference slowdown, low memory, and thermal throttling. Under pressure, reduce preview resolution or update frequency and pause nonessential charts—but preserve command and safety status visibility. [ ] Frame-time baseline captured on physical hardware [ ] p50/p95/p99 event-to-display latency measured [ ] Queues bounded and overflow observable [ ] High-frequency state coalesced before UI updates [ ] Commands and alarms use reliable semantics [ ] Clock domains and stale-data rules documented [ ] Network and reconnect behavior tested [ ] Thermal and memory pressure scenarios tested [ ] Robot safety remains independent o

flutternvidiajetson
Mobil Uygulama Yaptırmak İsteyenler İçin 2026 Kılavuzu & Teklif: Production Architecture & Best Practices 2026 (06.11.2026)
11/06 23:00

Mobil Uygulama Yaptırmak İsteyenler İçin 2026 Kılavuzu & Teklif: Production Architecture & Best Practices 2026 (06.11.2026)

Nuh Mehmet Demirkol

Mobil Uygulama Yaptırmak İsteyenler İçin 2026 Kılavuzu & Teklif Mobil uygulama ekosisteminde ölçeklenebilir ve sürdürülebilir bir sistem inşa etmek için doğru mimari ve mühendislik disiplini şarttır. Clean Architecture katmanları ile iş mantığını ve UI katmanını birbirinden ayırmak bakım maliyetlerini %60 oranında azaltır. Flutter ile tek kod tabanından iOS ve Android için 120 FPS akıcılık elde edilir. Her kurumsal projede %100 açık kaynak kod, Git deposu ve en az 1 yıllık teknik bakım garantisi sağlanmalıdır. 📌 İlgili Özel Sayfa: Mobil Uygulama Yaptırmak İsteyenler İçin 2026 Kılavuzu & Teklif 🧮 Canlı Maliyet Hesaplama: Mobil Uygulama Maliyet Hesaplama 👨‍💻 Bilgisayar Mühendisi: Nuh Mehmet Demirkol 📞 WhatsApp: +90 507 823 68 11 | Ankara, Türkiye

fluttermobilearchitectureios
Google Play's closed test rule: 12 testers, 14 days, no gaps
11/06 22:00

Google Play's closed test rule: 12 testers, 14 days, no gaps

Stacklyn Labs

If you publish your first app with a new personal Google Play developer account, your launch date is not "the day the code is done". It is at least 14 days later, and it depends on other people. Personal developer accounts created after 13 November 2023 must run a closed test with at least 12 testers opted in, continuously, for at least 14 days before they can apply for production access. After that, Google reviews the production access application. Google says this usually takes seven days or less. Organization accounts don't have this requirement, though they need a D-U-N-S number to register. The 14 days are counted with at least 12 testers opted in the whole time. If testers drop out and the count falls below 12, you are not meeting the condition. Recruit a few more than 12, so one person leaving doesn't put you under. Each tester has to: Be added to your closed test (for example through an email list or Google Group in Play Console) Open the opt-in link and accept it Being on the list is not the same as being opted in. Check the opt-in count in Play Console rather than counting the emails you added, and ask testers to install the app so the test produces real feedback. Say the app is feature-complete on day 0. Day What happens 0 Upload the first build to a closed testing track 0-2 Testers opt in and install. The clock only helps you once you have 12 14+ 14 continuous days with 12+ testers reached 14+ Apply for production access up to ~21 Google's review, usually seven days or less after approval Promote a build to production So "done on day 0" means "live on Google Play around three weeks later", if nothing slips. Recruit testers while you are still building. Friends, colleagues, a user group, early customers. Have their emails before the first upload. Upload a closed test build early. It doesn't have to be the final version. You can keep uploading new builds to the same track during the 14 days. Use the test. Twelve real people on real devices is free QA. Ask them for feedback, and fix what they find before production. Check your account type first. If your app belongs to a company, an organization account avoids this rule entirely, but registration needs the D-U-N-S number, which can take time to get. The 14 days are a good window to finish the rest of the listing work: store screenshots, the data safety form, content rating, privacy policy URL and app signing. All of it has to be done before production anyway. Further reading: the full submission checklist for both Google Play and the App Store is in our help center: App store submission checklist. How did you find your 12 testers?

flutterandroidmobilebeginners
Google Play In-App Review API: why the card won't show
11/06 21:51

Google Play In-App Review API: why the card won't show

ExtensionBooster

Originally published on AppRanker. You wired up the Google Play In-App Review API, the task completes without an error, and no rating card ever appears. Usually nothing is broken: the card is quota-limited, the API never tells you what happened, and only one of Google's three test methods shows the real flow. This post gives you a working setup for Kotlin, Expo and Flutter, a rule for when to call it, and a table of the usual reasons the card stays hidden. The flow is two calls. requestReviewFlow() fetches a ReviewInfo object from Google Play, and launchReviewFlow(activity, reviewInfo) shows a native Play card over your app where the user picks 1 to 5 stars and can add a comment. It runs on Android 5.0 (API 21) and later, including tablets and Google TV, plus ChromeOS, but only where the Google Play Store is installed. Three facts shape everything else: You get no result. The completion callback fires whether the user rated, dismissed the card, or never saw it. Your code must carry on the same way in every case. There is a quota. Google limits how often one user sees the card. Its own example is that calling it more than once in "less than a month" may display nothing, and the exact limit can change without notice. The rules are strict. No "Do you like the app?" question before or during the card, no reshaping or overlaying it, and no rewards for ratings. Play's ratings policy bans incentivized feedback outright. The quota is why Google says not to put the flow behind a button. A user who has used up their quota taps it and sees nothing. Since each user gets roughly one shot per period, your trigger logic matters more than the integration. Aim for a moment right after the user succeeded at something, while they are between tasks, once they have used the app enough to judge it. App type Ask here Never here Productivity After the 3rd completed export or project First launch, mid-typing Fitness Workout summary screen During a workout, after a missed goal Game After a level win, before the next level Mid-game, after a loss Utility After the tool has worked several times After an error or crash recovery A small eligibility gate keeps calls rare. The thresholds below are an example to tune, not a Google requirement: private const val DAY_MS = 86_400_000L fun reviewEligible(prefs: SharedPreferences, now: Long = System.currentTimeMillis()): Boolean = prefs.getInt("core_action_count", 0) >= 3 && now - prefs.getLong("first_open_at", now) >= 3 * DAY_MS && now - prefs.getLong("review_last_asked_at", 0L) >= 90 * DAY_MS Save review_last_asked_at at the moment you launch the flow. You will never learn whether a rating was left, so launch time is the only timestamp you can trust. Kotlin. Add com.google.android.play:review:2.0.2 (and review-ktx with the same version for Kotlin extensions). Fetch ReviewInfo shortly before the success moment, since it expires after a while: class RatingAsk(private val activity: Activity) { private val manager = ReviewManagerFactory.create(activity) private var info: ReviewInfo? = null fun warmUp() = manager.requestReviewFlow().addOnCompleteListener { t -> info = if (t.isSuccessful) t.result else null if (!t.isSuccessful) Log.w("RatingAsk", "code=${(t.exception as? ReviewException)?.errorCode}") } fun show(next: () -> Unit) { val ready = info ?: return next() manager.launchReviewFlow(activity, ready).addOnCompleteListener { info = null next() // runs no matter what the user did } } } Errors you may log: PLAY_STORE_NOT_FOUND (-1), INVALID_REQUEST (-2) and INTERNAL_ERROR (-100). Log them, never show them to the user, and wait for the flow to finish before moving to the next screen. Expo. npx expo install expo-store-review, then check StoreReview.hasAction() before calling StoreReview.requestReview(). Bare React Native apps can use react-native-in-app-review. Flutter. The in_app_review package gives you both sides: final review = InAppReview.instance; Future<void> askIfEligible(bool eligible) async { if (eligible && await review.isAvailable()) await review.requestReview(); } // Settings "Rate us" item: not quota-limited Future<void> rateUs() => review.openStoreListing(); For a permanent "Rate us" menu entry on Android, link to https://play.google.com/store/apps/details?id=<your.app.id>&showAllReviews=true (or the market:// form) instead of calling the API. Most "it's broken" reports come from testing in a setup that cannot show a working card. Method Use it for Catch Internal test track Real end-to-end card None; quota is not applied here Internal app sharing Quick build checks Submit button is disabled FakeReviewManager Unit and integration tests No UI, always succeeds For the internal test track, all four must hold: the account is on the track, it is the primary account selected in the Play Store, it installed the app from Play, and it has not reviewed the

androidreactnativefluttermobile
Flutter app with a Laravel backend (2026 guide)
11/06 21:25

Flutter app with a Laravel backend (2026 guide)

Qihu Zhang

Short answer: install Laravel Sanctum, give the app a handful of JSON routes under /api, and have Flutter send Authorization: Bearer <token> on every call after sign-in. Keep the token in flutter_secure_storage. Firebase stays only where Apple and Google make you use it: push delivery goes through FCM either way. Most Flutter tutorials assume Firebase for everything. That is quick to start, but your users, their data and your bill end up in someone else's console. A small Laravel app gives you the same building blocks on a server you control, plus an admin panel. This guide covers the six things a typical app needs from it, in the order you usually build them, and then how to set the project up so a coding agent can keep building it with you. Firebase Your own Laravel backend Accounts Firebase Auth Sanctum tokens, your own users table Data Firestore rules Routes and policies in PHP Admin view of your users Firebase console An admin panel you build (Filament) Pricing Per read, write and sign-in One server, from a few dollars a month Push to phones FCM Still FCM, sent from your server Leaving later Export and rewrite It is already yours Pick Firebase if you want zero servers. Pick Laravel if you already know PHP, want one place to see and edit your users, or need data to stay on infrastructure you choose. A complete first version is about a dozen routes: Route Auth What it does POST /api/auth/register public Sends a 6-digit code, creates nothing yet POST /api/auth/verify public Code + password → account + token POST /api/auth/login public Email + password → token POST /api/auth/social public Google or Apple id token → token POST /api/auth/password/forgot public Sends a reset code GET /api/auth/me token The signed-in user POST /api/auth/logout token Revokes this token DELETE /api/auth/me token Deletes the account and its data PUT /api/backup token Stores a snapshot of the app's data GET /api/backup token Latest snapshot, for restore GET /api/version public Latest and minimum app version Put the public auth routes behind a rate limiter (throttle:) so nobody can use them to send thousands of emails. In a new Laravel app: php artisan install:api That installs Sanctum and creates routes/api.php. Add the HasApiTokens trait to User, then return a token from every route that signs someone in: public function login(Request $req) { $data = $req->validate(['email' => 'required|email', 'password' => 'required|string']); $user = User::where('email', $data['email'])->first(); if (! $user || ! Hash::check($data['password'], $user->password)) { throw ValidationException::withMessages(['email' => ['Invalid credentials.']]); } return [ 'token' => $user->createToken('mobile')->plainTextToken, 'user' => ['id' => $user->id, 'name' => $user->name, 'email' => $user->email], ]; } Everything private goes in one group: Route::middleware('auth:sanctum')->group(function () { Route::get('auth/me', [AuthController::class, 'me']); Route::post('auth/logout', [AuthController::class, 'logout']); }); Sanctum tokens do not expire unless you set expiration in config/sanctum.php. For a phone app that is usually what you want: sign-out deletes the token with $req->user()->currentAccessToken()->delete(). A code typed into the app works better on a phone than a link in an email, which opens the browser instead of the app. Split sign-up into two calls: register validates name, email and password, stores a hashed password next to a 6-digit code, emails the code and answers 202. No user row exists yet. verify takes the email, the code and the same password, creates the user with email_verified_at set and answers with a token. Two details matter. Answer register the same way whether or not the address already has an account, and email the existing owner a note instead of a code, so the route cannot be used to find out who is signed up. And keep codes short-lived (10–15 minutes) with a limit on attempts. One small client handles the base URL, the headers and the token: class Api { Api(this.baseUrl); final String baseUrl; final _storage = const FlutterSecureStorage(); Future<Map<String, String>> _headers() async { final token = await _storage.read(key: 'api_token'); return { 'Accept': 'application/json', 'Content-Type': 'application/json', if (token != null) 'Authorization': 'Bearer $token', }; } Future<Map<String, dynamic>> post(String path, Map<String, dynamic> body) async { final res = await http .post(Uri.parse('$baseUrl/api/$path'), headers: await _headers(), body: jsonEncode(body)) .timeout(const Duration(seconds: 30)); final json = res.body.isEmpty ? <String, dynamic>{} : jsonDecode(res.body) as Map<String, dynamic>; if (res.statusCode == 401) await _storage.delete(key: 'api_token'); if (res.statusCode >= 400) throw ApiException(json['message'] as String? ?? 'Erro

flutterlaraveldartai
Hello DEV: We’re the Devs Behind MyMotor, a Flutter App for Indian Vehicle Owners
11/06 15:14

Hello DEV: We’re the Devs Behind MyMotor, a Flutter App for Indian Vehicle Owners

MyMotor India

Hi DEV! 👋 We are the devs of MyMotor (A vehicle owner app for India, plain flutter). We help owners check and pay traffic challans, search for RC & vehicle details, store your documents in a virtual glove box, and more. Tech used: Flutter + Riverpod, GoRouter, Dio, Hive, Go backend Vehicle & challan information can be slow or unreliable. A big part of what we have done is make sure we can read data whilst offline and cache data. We will talk about how we have done this and lessons learned while keeping a large flutter app consistent. Things we hope to learn Other devs using flutter and riverpod. Other devs making data heavy apps within India. General feedback on what we have done. If you have had issues with unreliable APIs in a mobile app, we would love to know how you got around this issue. Say hello in the comments below! Website:- https://www.mymotor.in/e-challan-check https://play.google.com/store/apps/details?id=info.vehicle.rto.car&listing=challan-check-pay https://apps.apple.com/in/app/mymotor-challan-ev-rto-info/id6752399714

flutterbeginnersshowdev
Show an "update ready" banner in your Flutter app (OTA updates)
11/06 14:49

Show an "update ready" banner in your Flutter app (OTA updates)

Overpush

When you ship over-the-air (OTA) updates to a Flutter app, the update downloads in the background and runs at the next launch. By default users see nothing, which is usually what you want. But sometimes you do want to tell them, for example: "New update downloaded. Restart the app to apply it." OverPush doesn't draw any UI itself. It sends events, and your app shows them in its own design. Here's a small banner you can drop into any app. OverPush.events is a stream. The ones you'll care about: OverPushPatchFound: a new update exists OverPushDownloading: download progress (percent, progress) OverPushPatchReady: downloaded, will run at next launch OverPushFailed: something went wrong; nothing changed on the device import 'dart:async'; import 'package:flutter/material.dart'; import 'package:overpush/overpush.dart'; class UpdateBanner extends StatefulWidget { const UpdateBanner({super.key}); @override State<UpdateBanner> createState() => _UpdateBannerState(); } class _UpdateBannerState extends State<UpdateBanner> { StreamSubscription<OverPushEvent>? _subscription; Timer? _hideTimer; String? _message; @override void initState() { super.initState(); _subscription = OverPush.events.listen(_onEvent); } void _onEvent(OverPushEvent event) { _hideTimer?.cancel(); switch (event) { case OverPushPatchFound(): _show('New update found…'); case OverPushDownloading(:final percent): _show(percent == null ? 'Downloading update…' : 'Downloading update · $percent%'); case OverPushPatchReady(): _show('Update downloaded. Restart the app to apply it.'); _hideTimer = Timer(const Duration(seconds: 6), () => _show(null)); case OverPushFailed(): _show(null); // nothing changed; stay quiet default: break; } } void _show(String? message) { if (mounted) setState(() => _message = message); } @override void dispose() { _subscription?.cancel(); _hideTimer?.cancel(); super.dispose(); } @override Widget build(BuildContext context) { final message = _message; return Positioned( left: 16, right: 16, bottom: MediaQuery.paddingOf(context).bottom + 24, child: IgnorePointer( child: AnimatedSwitcher( duration: const Duration(milliseconds: 250), child: message == null ? const SizedBox.shrink() : Material( key: const ValueKey('update-banner'), color: const Color(0xFF1F2430), borderRadius: BorderRadius.circular(12), elevation: 6, child: Padding( padding: const EdgeInsets.all(14), child: Text( message, style: const TextStyle(color: Colors.white, fontWeight: FontWeight.w600), ), ), ), ), ), ); } } MaterialApp( builder: (context, child) => Stack( children: [child!, const UpdateBanner()], ), home: const HomePage(), ); That's it. It's your own widget, so restyle it however you like: a snackbar, a dialog with a "Restart now" button, or a small dot in the settings screen. Getting started: https://docs.overpush.in/getting-started.html Full banner with a progress bar: https://docs.overpush.in/update-ui.html https://overpush.in (free for 5,000 patch installs a month)

flutterdarttutorialui

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 23: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 23: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 23: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 00: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 00: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 22: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 00: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 00: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 23: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 条

技术社区讨论与项目链接

11/06 23:49

Wing: Port Forwarding Tool with Built-In Flutter Build and Forwarding Support

gerenahudev

Article URL: https://wingserver.vercel.app Comments URL: https://news.ycombinator.com/item?id=50393852 Points: 3 # Comments: 0

11/04 17:01

Flutter updates required to remediate the eMudhra certificate compromise

bitneuker

Article URL: https://firebase.google.com/support/guides/compromised-emudhra-intermediate-ca Comments URL: https://news.ycombinator.com/item?id=50363013 Points: 2 # Comments: 1

Show HN: Detox Mode – A Flutter app to help reduce smartphone distractions
11/01 19:07

Show HN: Detox Mode – A Flutter app to help reduce smartphone distractions

saurabh_yagyik

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

A Flutter game holds 60 FPS on a $100 Android phone
10/31 01:50

A Flutter game holds 60 FPS on a $100 Android phone

bjornhoj

Article URL: https://upsling.space/blog/60-fps-flutter-physics-on-a-100-dollar-phone/ Comments URL: https://news.ycombinator.com/item?id=50307586 Points: 1 # Comments: 0

Building a Flutter IoT app for real-time hydration monitoring in football teams [video]
10/28 20:01

Building a Flutter IoT app for real-time hydration monitoring in football teams [video]

Harish_0089

Article URL: https://www.youtube.com/watch?v=FBWaoS4QXsw Comments URL: https://news.ycombinator.com/item?id=50272231 Points: 1 # Comments: 0

Build a Flutter Phone Dialer with Call History
10/21 22:38

Build a Flutter Phone Dialer with Call History

lautarolobo

Article URL: https://lautarolobo.xyz/blog/flutter-phone-dialer-call-history/ Comments URL: https://news.ycombinator.com/item?id=50181804 Points: 1 # Comments: 0

Show HN: TutorLoom, an open-source multi-tenant LMS (Django, React, Flutter)
10/21 22:22

Show HN: TutorLoom, an open-source multi-tenant LMS (Django, React, Flutter)

madhukarah

Article URL: https://github.com/pacewisdomhq/TutorLoom Comments URL: https://news.ycombinator.com/item?id=50181517 Points: 2 # Comments: 0

Moonswing – A Desktop Environment for Linux in Flutter
10/20 04:09

Moonswing – A Desktop Environment for Linux in Flutter

matthewkosarek

Article URL: https://github.com/miracle-wm-org/moonswing Comments URL: https://news.ycombinator.com/item?id=50157418 Points: 1 # Comments: 0

Streaming a coding agent's UI in Flutter: what broke and how we fixed it
10/16 16:55

Streaming a coding agent's UI in Flutter: what broke and how we fixed it

narayanahari

Article URL: https://getpullrequest.com/blogs/streaming-agent-ui-in-flutter Comments URL: https://news.ycombinator.com/item?id=50115889 Points: 1 # Comments: 0

A Linux desktop environment in Flutter
10/14 21:13

A Linux desktop environment in Flutter

matthewkosarek

Article URL: https://github.com/miracle-wm-org/moonswing Comments URL: https://news.ycombinator.com/item?id=50087239 Points: 1 # Comments: 2

Genkit Dart 1.0: Build production-ready agentic apps with Dart and Flutter
10/11 09:09

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

khalidkhair

Article URL: https://flutter.dev/blog/announcing-genkit-dart-1-0 Comments URL: https://news.ycombinator.com/item?id=50038795 Points: 4 # Comments: 0

Moonswing: A Linux Desktop Environment Built in Flutter
10/09 22:53

Moonswing: A Linux Desktop Environment Built in Flutter

matthewkosarek

Article URL: https://github.com/miracle-wm-org/moonswing Comments URL: https://news.ycombinator.com/item?id=50021374 Points: 2 # Comments: 1

PomoPlan – Local-first Pomodoro, task, and habit tracker in Flutter
10/08 22: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 16: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 23: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 20: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 21: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

Medium

10 条

Flutter 相关文章精选

How to Add Native In-App Update Prompts in Flutter for Android and iOS
11/07 02:31

How to Add Native In-App Update Prompts in Flutter for Android and iOS

Pulkit Agarwal

How in_app_update_flutter brings Google Play’s immediate and flexible updates and an in-app App Store update sheet to Flutter, Continue reading on Medium »

in-app-updateforce-updatefluttersoft-update
Companies Want to Cut Android and iOS Development Costs. Is Cross-Platform the Answer?
11/07 01:26

Companies Want to Cut Android and iOS Development Costs. Is Cross-Platform the Answer?

Kavya Sri

One Mobile Team Instead of Two: Why Companies Are Cutting Android and iOS Development Costs Continue reading on Medium »

iosandroidmobile-app-developmentflutter
Building MeetMind AI: Live Transcription from Chrome to Android
11/07 01:12

Building MeetMind AI: Live Transcription from Chrome to Android

Charitha Adikari

Continue reading on Medium »

fluttersoftware-engineeringchrome-extensionartificial-intelligence
How to Build a Recently Searched Feature Like Flipkart in Flutter
11/06 23:36

How to Build a Recently Searched Feature Like Flipkart in Flutter

Ankit Mehra

We use shopping applications like Flipkart or Amazon, we often search for products, explore different categories and move between multiple… Continue reading on Medium »

flipkartflutterdartios
Flutter iOS 27 Compatibility: What Developers Need to Fix
11/06 22:46

Flutter iOS 27 Compatibility: What Developers Need to Fix

Ravi Savaliya

Understand Apple’s UIScene migration, check your AppDelegate, and avoid unexpected launch failures. Continue reading on Medium »

programmingios-developmentflutterios
Flutter’s GenUI Is Coming to A2UI 1.0: Build Your Widget Catalogue Now
11/06 20:11

Flutter’s GenUI Is Coming to A2UI 1.0: Build Your Widget Catalogue Now

Nicolas

This is still an alpha feature that allows agents to create screens using your widgets. This article covers what the prompt first approach… Continue reading on Medium »

iosdartflutterandroid
Flutter Testing Explained: Testing Pyramid, Strategy & Best Practices
11/06 19:46

Flutter Testing Explained: Testing Pyramid, Strategy & Best Practices

Nisarg Ratani

Testing is one of the most important parts of building a reliable Flutter application. Continue reading on Medium »

flutterflutter-testingflutter-uimobile-app-development
Dart Unit Testing: Writing Reliable Tests for Business Logic
11/06 19:46

Dart Unit Testing: Writing Reliable Tests for Business Logic

Nisarg Ratani

Business logic is the foundation of most applications. Continue reading on Medium »

unit-testingflutter-app-developmentflutterflutter-testing
The Ghost in the Detail Panel: a Flutter Lifecycle Bug and Its Fix
11/06 19:31

The Ghost in the Detail Panel: a Flutter Lifecycle Bug and Its Fix

Wartelski.

A detail panel keeps showing the last record’s live status after you’ve switched to a new one. The cause is one of Flutter’s most useful… Continue reading on Medium »

software-developmentmobile-app-developmentflutterdart
Claude Org IP Allowlist Is Live in Beta, Up to 1,000 Ranges — Top 10 AI & Flutter News November 6…
11/06 19:06

Claude Org IP Allowlist Is Live in Beta, Up to 1,000 Ranges — Top 10 AI & Flutter News November 6…

Blur Brah Lab

Today’s Must-Know: Claude’s Organization IP Allowlist Can Now Block Your Own CI Continue reading on Medium »

claude-codefluttertechnologyai

Reddit

4 条

社区日榜讨论与资源

11/07 07:44

Hive CE is now faster than Hive v2. IsolatedHive is even faster.

/u/Rexios80

See the new benchmarks. Thanks to some optimizations, Hive CE is now faster than Hive v2 ever was. Since IsolatedHive can call the sync read/write methods due to being on a separate isolate, it can be even faster in some cases. I also fixed some memory/resource leaks in IsolatedHive. Happy Fluttering! submitted by /u/Rexios80 [link] [comments]

11/07 04:59

Dart equivalent of C pre-processor's #ifdef

/u/driftwood_studio

Dart's compiler provides no mechanism for excluding code from compilation. Dart has: const bool isEnabled = bool.fromEnvironment('env-var-name'); to pull in defined constants if (const-false-value) { removed statements } to remove a block from compilation Tree shaking to remove unreferenced symbols By combining those I can achieve a somewhat similar effect to the C pre-processor, with a few limitations (and less clarity). It works. It does so, though, with less of a guaranteed straightforward effect than #ifdef due to complexity of rules about how tree shaking works, and without the ability to simply exclude the entire definition of a function (since you can't wrap if (const) { } around a function declaration, only the function body). So... Has anyone else run into a situation where this was an issue? Did you do/find something that's a more straightforward approach than dart's "combine several default behaviors together to produce an effect" system to address this? Edit: context: for excluding "test functions I don't want to even theoretically be accessible in a patched binary". submitted by /u/driftwood_studio [link] [comments]

11/07 06:54

We built a Flutter feedback package that asks users for missing details

/u/After-Base-8368

“The button doesn’t work.” Which button, on which screen, and what were they trying to do? We built Bopmigo for that conversation. Users describe the problem, answer a short follow-up, and send a report with their screenshot and app/device details. Your team can reply, and they can answer inside the app. The Flutter package works on iOS and Android and connects to Bopmigo’s hosted inbox or email delivery. You can open it from your own feedback button. Private widgets can be masked in screenshots. Source and example app https://github.com/bopmigo/bopmigo-flutter Package https://pub.dev/packages/bopmigo Would this help your team’s reporting flow? submitted by /u/After-Base-8368 [link] [comments]

11/07 08:23

Can Claude Code run and test Flutter apps using an emulator?

/u/stevenreyes20

I see that Claude can run React Native iOS apps using an emulator. I can't do that on android as far I know, I use my phone. Does Claude support a Flutter emulator too, or is there some kind of MCP server or connector that would allow it to run and test Flutter apps in an emulator? submitted by /u/stevenreyes20 [link] [comments]

FAQ

常见问题