# nexo_client Flutter client and integration test host for the Nexo messaging runtime. ## Purpose This app is the workspace client harness. Keep it small and focused on proving the messaging/notification package contract: - plugin registration in a real Flutter application - method-channel calls from Dart to the native plugin - event-channel delivery from native code to Dart - notification-open routing callbacks - Android manifest merge behavior - manual Firebase FCM and Mattermost ACK smoke testing Product-specific UI should stay small until Nexo's messaging surface is ready. This app should keep the minimum surface needed to prove package integration. ## Structure ```text apps/client/ lib/ # Small harness UI test/ # Widget tests for the harness integration_test/ # Device/emulator plugin integration tests android/ # Android app used to host the plugin ios/ # iOS host scaffold macos/ # macOS host scaffold ``` ## Running The App Install dependencies: ```sh flutter pub get ``` Run on a connected device or emulator: ```sh flutter run ``` For Android FCM smoke testing, make sure the Android app has the required Firebase configuration, including `android/app/google-services.json`. ## Verification The integration test uses the plugin's test/debug event injection path for method-channel, event-channel, and opened-routing checks. Real FCM delivery, ACK, inline reply, and dismiss behavior remain manual smoke checks. Run checks from this directory: ```sh flutter analyze flutter test flutter test integration_test ``` Run Android native unit tests from `apps/client/android`: ```sh ./gradlew testDebugUnitTest ``` Android Gradle tests require a configured Android SDK through `ANDROID_HOME` or `apps/client/android/local.properties`. When the local machine does not have a usable Android SDK or emulator, use the repository-level remote environment guide: [`../../packages/messaging_flutter/docs/android-test-environment.md`](../../packages/messaging_flutter/docs/android-test-environment.md). ## Maintenance Rules - Keep the app thin. - Prefer deterministic test controls over product-like UI. - Do not add consuming-app business logic here. - Add integration tests here when a plugin behavior needs a real Flutter host. - Keep manual FCM and server checks documented with the owning module.