Mubarak AuwalandGitHub 296e2cc40e feat: wire delivery status from Rust bridge to Flutter UI (#425)
* feat: wire delivery status from Rust bridge to Flutter UI

* chore: regenerate flutter_rust_bridge codegen

* Fix cargo fmt lint and handle messageRetried edge case

Fix import ordering in frb_generated.rs and line break in messages.rs
to pass cargo fmt check. Handle messageRetried when message ID is not
yet in the display list by appending it instead of silently ignoring.

* Run dart format on generated bridge files

* Update whitenoise-rs rev to aa56ba6 to fix mdk version conflict

* Add tests for deliveryStatusChanged and messageRetried handlers

* Add tests for DeliveryStatus mapping in ChatMessageBubble

* Sync with Rust retry redesign: add Retried status, remove messageRetried

Update whitenoise-rs rev to 74a3071 and re-run codegen to sync with
the retry-as-new-message design. DeliveryStatus now includes Retried,
UpdateTrigger no longer has MessageRetried.

- Update whitenoise-rs rev to 74a3071
- Add DeliveryStatus.retried variant and From impl in bridge
- Remove MessageRetried from UpdateTrigger enum and From impl
- Remove messageRetried handler from useChatMessages hook
- Add Retried case to DeliveryStatus mapping in ChatMessageBubble
- Remove messageRetried tests, add retried conversion test

* cargo fmt on generated code, add Retried delivery status test

* Run dart format on generated bridge files
2026-03-05 00:05:04 +01:00
2026-03-04 11:23:06 -03:00
2026-03-01 19:27:21 -03:00
2025-11-24 15:02:01 -03:00
2026-02-18 16:00:47 +03:00
2026-03-04 11:23:06 -03:00

White Noise

White Noise

A secure, private, and decentralized chat app using the marmot protocol 🦫 to build secure messaging with MLS and Nostr

📱 Supported Platforms

Supported Platforms

  • Android - Fully supported
  • iOS - Fully supported
  • macOS - Not supported yet
  • Windows - Not supported yet
  • Linux - Not supported yet
  • Web - Not supported yet

Structure

Structure

lib/
├── constants/     # Shared constants: fixed, related sets or reused elsewhere only
├── providers/     # Shared state
├── hooks/         # Ephemeral widget state
├── services/      # Stateless operations (API calls)
├── screens/       # Full-page components
├── widgets/       # Reusable components

🏗️ Stack

Stack

Prerequisites

  • Flutter SDK (3.24.x or later)
  • Rust (latest stable)
  • Just - cargo install just
  • flutter_rust_bridge_codegen - cargo install flutter_rust_bridge_codegen

🛠️ Commands

Commands

# Install dependencies
just deps              # Install both Flutter and Rust deps
just deps-flutter      # Flutter dependencies only
just deps-rust         # Rust dependencies only

# Format code
just format            # Format both Rust and Dart
just format-rust       # Format Rust only
just format-dart       # Format Dart only

# Coverage
just coverage          # Checks tests coverage

Coverage Report

You need to install lcov to generate report

# Mac OS
brew install lcov

# Linux
apt-get install lcov
# First run tests with coverage option
flutter test --coverage
# Generate coverage html report
genhtml coverage/lcov.info -o coverage/html 
# Open coverage/html/index.html in your browser

Development philosophy

Development Philosophy

  • We keep complexity low.
  • We keep the app thin.
  • We test our code.
  • We delete dead code. Commented code is dead code.
  • We use the Whitenoise Rust crate as the source of truth.
  • We avoid caching in Flutter; the Whitenoise crate already persists data in a local DB.
  • We put shared app state in providers.
  • We put ephemeral widget state in hooks.
  • We pass data to hooks, not widget refs.
  • We let screens watch providers and pass data to hooks.
  • We avoid comments unless strictly necessary and write self-explanatory code.

📚 Resources

Resources

S
Description
Mirror of White Noise
Readme
223 MiB