A Flutter Twitch client for Android with channel browsing, search, following, and native Media3 live playback.
Use Flutter with Dart 3.12.2 or newer, the Android SDK, and a JDK compatible with the project's Android Gradle plugin. This project is tested with Flutter 3.44.8. Android Studio supplies the Android tooling and JDK. Install Android SDK 37.1; the app requires Android 8.0 or newer.
flutter pub get
dart run build_runner build
flutter runTwitch sign-in uses the public client ID and redirect URI in
lib/api/twitch_auth.dart. Normal flutter run and flutter build apk
commands include this configuration; no .env file or extra flags are needed.
Live notifications additionally need the Firebase client options and Worker URL described in the notification setup guide.
The sign-in screen embeds GeckoView. Keep its version in
android/app/build.gradle.kts updated with Mozilla's security releases;
system WebView updates do not update this bundled engine. After OAuth validation,
Flow copies the Twitch website session into Android's cookie store for its
existing authenticated features. Cookie values are never written to diagnostic logs.
Use flutter build apk --split-per-abi or flutter build appbundle to avoid
shipping every browser-engine architecture in one download.
flutter analyze
flutter testRun native playback and proxy tests from android/:
.\gradlew.bat :app:testDebugUnitTestRelease builds currently use the development signing key; configure release signing before distributing through an app store.
lib/app: app settings, theme, and retained tab navigation.lib/features: screens and MobX state for browsing, following, channels, settings, and the Dart side of playback.lib/api: Twitch authentication, GraphQL requests, and session caching.lib/shared: preferences, display models, and shared widgets.android/app/src/main/kotlin/com/namecallfilter/flow: Media3 playback, HLS handling, and the Flutter platform bridge.lib/graphql/*.graphql: the operations used by the app.lib/graphql/schema.graphqls: inferred schema used for code generation.docs/twitch/graphql: saved reference operations, excluded from code generation.
After changing GraphQL operations or MobX annotations, run
dart run build_runner build. Generated Dart files (*.g.dart, *.graphql.dart,
and *.graphqls.dart) are ignored by Git; regenerate them after cloning and edit
their sources instead. build.yaml disables unused GraphQL copyWith helpers to
keep generated code smaller.