Shared Flutter library powering all ninja apps. Provides Material You theming, localization, navigation scaffolding, and CI/CD workflows.
runNinjaApp()— single entry point for all apps, wires up theming, localization, and providersFirstPageConfig— configures the navigation shell (destinations, pages, bottom bar)- Material You theming — dynamic color with
dynamic_color, light/dark mode - Localization — base strings in 6 languages (en, de, es, fr, it, ja), extendable per app
- Reusable CI/CD workflows — shared GitHub Actions for version bumping, APK builds, and web deploys
# Prerequisites: Flutter SDK 3.41.5+
flutter pub get
flutter build web --releaseAdd to pubspec.yaml, pinned to a release tag:
dependencies:
ninja_material:
git:
url: https://github.com/Giuig/ninja_material.git
ref: v1.3.0Bootstrap your app:
import 'package:ninja_material/bootstrap.dart';
void main() {
runNinjaApp(
defaultSeedColor: Colors.teal,
specificLocalizationDelegate: AppLocalizations.delegate,
appFirstPageConfig: myFirstPageConfig,
);
}Reference from any app repo:
# .github/workflows/build.yml
jobs:
build:
uses: Giuig/ninja_material/.github/workflows/build-app.yml@main
with:
app-name: myapp
package-id: com.myapp
version: ${{ github.ref_name }}
secrets: inheritAvailable workflows:
build-app.yml— builds universal + split APKs and creates a GitHub releaseversion-bump.yml— auto-tags and triggers builds onpubspec.yamlchangesweb-deploy.yml— deploys to GitHub Pages
| App | Description |
|---|---|
| tvninja | IPTV / M3U8 player |
| auraninja | Ambient sound mixer and focus app |
| decisioninja | Decision maker with dice, pointer, and binary choices |
This project is licensed under the GNU General Public License v3.0.