feat(proj): init
This commit is contained in:
+102
@@ -0,0 +1,102 @@
|
||||
#Requires -Version 5.1
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Run the Please Pay Me Flutter app.
|
||||
|
||||
Config comes from mobile/.env (PPM_API_BASE_URL, PPM_WEB_URL, PPM_DEMO).
|
||||
Optional -ApiBaseUrl / -WebUrl override the file for one run.
|
||||
|
||||
.EXAMPLE
|
||||
.\run.ps1
|
||||
.\run.ps1 -Device chrome
|
||||
.\run.ps1 -Target widgetbook
|
||||
#>
|
||||
param(
|
||||
[ValidateSet("chrome", "windows", "edge")]
|
||||
[string]$Device = "windows",
|
||||
|
||||
[ValidateSet("app", "widgetbook")]
|
||||
[string]$Target = "app",
|
||||
|
||||
[string]$ApiBaseUrl = "",
|
||||
[string]$WebUrl = "",
|
||||
[switch]$SkipPubGet
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
$MobileRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
|
||||
if ($Target -eq "widgetbook") {
|
||||
& (Join-Path $MobileRoot "widgetbook\run.ps1") -Device $Device -SkipPubGet:$SkipPubGet
|
||||
exit $LASTEXITCODE
|
||||
}
|
||||
|
||||
Set-Location $MobileRoot
|
||||
|
||||
function Find-Flutter {
|
||||
$cmd = Get-Command flutter -ErrorAction SilentlyContinue
|
||||
if ($cmd) { return $cmd.Source }
|
||||
|
||||
$candidates = @(
|
||||
"$env:USERPROFILE\flutter\bin\flutter.bat",
|
||||
"$env:LOCALAPPDATA\flutter\bin\flutter.bat",
|
||||
"C:\flutter\bin\flutter.bat",
|
||||
"C:\src\flutter\bin\flutter.bat"
|
||||
)
|
||||
foreach ($path in $candidates) {
|
||||
if (Test-Path $path) { return $path }
|
||||
}
|
||||
return $null
|
||||
}
|
||||
|
||||
$flutter = Find-Flutter
|
||||
if (-not $flutter) {
|
||||
Write-Error "Flutter SDK not found. Add it to PATH, e.g. %USERPROFILE%\flutter\bin"
|
||||
}
|
||||
|
||||
$envFile = Join-Path $MobileRoot ".env"
|
||||
$exampleFile = Join-Path $MobileRoot ".env.example"
|
||||
if (-not (Test-Path $envFile)) {
|
||||
if (Test-Path $exampleFile) {
|
||||
Copy-Item $exampleFile $envFile
|
||||
Write-Host "Created .env from .env.example" -ForegroundColor DarkYellow
|
||||
}
|
||||
}
|
||||
|
||||
$defines = @()
|
||||
if (Test-Path $envFile) {
|
||||
$defines += "--dart-define-from-file=$envFile"
|
||||
}
|
||||
|
||||
if ($ApiBaseUrl) {
|
||||
$defines += "--dart-define=PPM_API_BASE_URL=$ApiBaseUrl"
|
||||
if (-not $WebUrl) { $WebUrl = $ApiBaseUrl }
|
||||
}
|
||||
if ($WebUrl) {
|
||||
$defines += "--dart-define=PPM_WEB_URL=$WebUrl"
|
||||
}
|
||||
|
||||
if ($defines.Count -eq 0) {
|
||||
$defines += "--dart-define=PPM_DEMO=true"
|
||||
}
|
||||
|
||||
$mode = "demo (in-memory)"
|
||||
if (Test-Path $envFile) { $mode = $envFile }
|
||||
if ($ApiBaseUrl) { $mode = $ApiBaseUrl }
|
||||
|
||||
Write-Host "Flutter: $flutter" -ForegroundColor DarkGray
|
||||
Write-Host "Target: app" -ForegroundColor DarkGray
|
||||
Write-Host "Device: $Device" -ForegroundColor DarkGray
|
||||
Write-Host "Config: $mode" -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
|
||||
if (-not $SkipPubGet) {
|
||||
Write-Host "flutter pub get" -ForegroundColor Cyan
|
||||
& $flutter pub get
|
||||
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
||||
}
|
||||
|
||||
$defineArgs = $defines -join " "
|
||||
Write-Host "flutter run -d $Device $defineArgs" -ForegroundColor Cyan
|
||||
& $flutter run -d $Device @defines
|
||||
exit $LASTEXITCODE
|
||||
Reference in New Issue
Block a user