Flutter Runner CLI

pub.flutter-io.cn package license Dart

CLI interaktif untuk menjalankan Flutter app β€” pilih environment (Local/Dev/Prod), pilih device, lalu auto-run dengan --dart-define yang sesuai.

Zero external dependencies β€” hanya pakai dart:io dan dart:convert.

Fitur

  • 🎯 Pilih Environment β€” Local (auto-detect IP), Dev, atau Production
  • πŸ“± Pilih Device β€” Deteksi otomatis device dari flutter devices
  • ⚑ Auto Run β€” flutter run dengan --dart-define yang sesuai
  • πŸ”§ Config Wizard β€” --init buat bikin .flutter_runner.json
  • 🏒 Multi-project β€” Bisa dipake di project Flutter mana aja
  • πŸ“¦ Zero dependencies β€” Ringan, gak perlu install library tambahan

Install

# Aktifkan global
dart pub global activate flutter_runner_cli

# Jalankan dari mana aja
flutter-runner

Atau tanpa install:

dart run flutter_runner_cli

Usage

flutter-runner            # Menu interaktif (pilih env β†’ pilih device β†’ run)
flutter-runner --init     # Buat/configurasi .flutter_runner.json
flutter-runner --help     # Bantuan

Alur Interaktif

Step 1 β€” Pilih Environment:

╔══════════════════════════════════════════╗
β•‘          Pilih Environment               β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

  1)  🏠  Local
      IP otomatis :8000

  2)  πŸ”§  Dev
      https://staging.example.com

  3)  🌐  Production
      https://api.example.com

Step 2 β€” Pilih Device:

╔══════════════════════════════════════════╗
β•‘          Pilih Device                    β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

  1) iPhone 17 Pro (65F7E385-...)
  2) Pixel 7 (emulator-5554)

Step 3 β€” Auto Run:

$ flutter run -d <device> --dart-define=BASE_URL=<url> ...

Config

Bikin file .flutter_runner.json di root project:

flutter-runner --init

Atau buat manual:

{
  "local_port": "8000",
  "dev_url": "https://staging.example.com",
  "prod_url": "https://api.example.com",
  "extra_defines": {
    "APP_NAME": "MyApp",
    "API_KEY": "abc123"
  }
}

Field Config

Field Wajib Deskripsi
local_port βœ… Port backend lokal (contoh: 8000)
dev_url ❌ URL backend development
prod_url ❌ URL backend production
base_url_key ❌ Nama key dart-define untuk URL (default: BASE_URL)
hostname_key ❌ Nama key dart-define untuk hostname (default: BACKEND_HOSTNAME)
extra_defines ❌ --dart-define tambahan (key-value)
run_script ❌ Path custom script pengganti flutter run

Tanpa config file: flutter-runner akan error dan nyuruh bikin config pake --init.

Dart Define (Environment Variables untuk Aplikasi)

Saat flutter run dijalankan, flutter-runner CLI mengirim --dart-define berikut:

Key Environment Deskripsi
BASE_URL (default) All Base URL backend (bisa diubah via base_url_key di config)
BACKEND_HOSTNAME (default) Local IP host backend (bisa diubah via hostname_key di config)
extra_defines All Key-value tambahan dari .flutter_runner.json β†’ extra_defines

Key dart-define untuk URL bisa dikustomisasi. Jika project-mu menggunakan API_BASE_URL sebagai ganti BASE_URL, tambahkan "base_url_key": "API_BASE_URL" di .flutter_runner.json. Lihat Customization di bawah.

Kustomisasi Dart Define Key

Jika project Flutter-mu menggunakan nama key yang berbeda (misal API_BASE_URL), tambahkan konfigurasi di .flutter_runner.json:

{
  "local_port": "8000",
  "base_url_key": "API_BASE_URL",
  "hostname_key": "BACKEND_HOSTNAME",
  "extra_defines": {}
}

Atau biarkan default (BASE_URL) jika tidak ada kustomisasi.

Aplikasi Flutter membaca key tersebut via String.fromEnvironment('API_BASE_URL'). Lihat contoh di Integration Guide.

Custom Run Script

Jika .flutter_runner.json memiliki field run_script, CLI akan menjalankan script tersebut sebagai pengganti flutter run langsung. Script akan menerima environment variable berikut:

Variable Deskripsi
FLUTTER_EXECUTABLE Path ke Flutter executable (fvm atau flutter)
FLUTTER_DEVICE_ID ID device yang dipilih user
FLUTTER_DART_DEFINES Semua --dart-define args (space-separated)

Contoh script (scripts/run.sh):

#!/usr/bin/env bash
"$FLUTTER_EXECUTABLE" flutter run -d "$FLUTTER_DEVICE_ID" $FLUTTER_DART_DEFINES

Integration Guide

Di project Flutter, baca URL dari --dart-define sesuai key yang dikonfigurasi:

class ApiConfig {
  // Gunakan key yang sudah ditentukan di .flutter_runner.json
  // Default: 'BASE_URL', bisa dikustom ke 'API_BASE_URL' dll
  static String get baseUrl => const String.fromEnvironment(
    'BASE_URL',
    defaultValue: 'http://localhost:8080',
  );
}

Jika menggunakan base_url_key kustom, sesuaikan:

static String get baseUrl => const String.fromEnvironment(
  'API_BASE_URL',
  defaultValue: 'http://localhost:8080',
);

Environment Variables (Override Config)

Override config via environment variable:

FLUTTER_RUNNER_LOCAL_PORT=9000 flutter-runner
FLUTTER_RUNNER_DEV_URL=https://staging.example.com flutter-runner

Development

git clone https://github.com/adibagasp23/flutter_runner_cli
cd flutter_runner_cli
dart run

Testing

dart analyze   # Static analysis
dart format .  # Code formatting
dart run       # Manual testing

Publikasi

dart pub publish

Lisensi

MIT β€” lihat LICENSE.

Libraries

flutter_runner_cli
Flutter Runner CLI β€” pilih environment & device, lalu run.