VSCode Multi-Root Magic: Run Flutter APK Builds in Separate Git Repos

TL;DR

Stuck with “No pubspec.yaml found” when building Flutter APKs in a multi-root VSCode workspace? Fix it in 3 steps:

  • perfect workspace naming,
  • cwd overrides,
  • emulator-ready URLs.

The Problem

  • Top-level folder with 2 separate Git repos:
    • flutter_app/ (Flutter)
    • fastapi_backend/ (Python)
  • Flutter .vscode/tasks.json ignored in parent.
  • Tasks fail: “Must be run from root of Flutter project” or “No pubspec.yaml found”.

The Fix: Multi-Root Workspace + Smart Tasks

1. Create Multi-Root Workspace

  • File > Add Folder to Workspace… > Add both subfolders.
  • Save as myproject.code-workspace in parent.
{
  "folders": [
    { "path": "flutter_app" },
    { "path": "fastapi_backend" }
  ],
  "settings": {
    "flutter.sdkPath": "./flutter_app"
  }
}

2. Update flutter_app/.vscode/tasks.json

  • For Flutter task:
    • Edit .vscode/tasks.json in flutter_app to use ${workspaceFolder:flutter_app}.
  • Run task from flutter_app folder context.
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build APK (Dev Local)",
            "type": "shell",
            "command": "flutter",
            "args": [
                "build",
                "apk",
                "--debug",
                "--dart-define=ENV=development",
                "--dart-define=BASE_URL=http://10.0.2.2:8000",
            ],
            "options": {
                "cwd": "${workspaceFolder:flutter_app}"
            },
            "group": "build",
        },
    ]
}

Key: cwd must match exact folder name in .code-workspace (case-sensitive).


Pro Tip: Emulator Localhost

Use 10.0.2.2 to hit your local FastAPI backend from Android emulator.


Final Checklist

  • Workspace folder name = task cwd
  • Run task via Command Palette (select Flutter folder)
  • Reload VSCode after changes (Very important)

No monorepo. No drama. Just build.

Perfect for full-stack Flutter + FastAPI devs.