Skip to content

Commit 2f510c7

Browse files
committed
Add platformOverride and brightnessOverride command extensions
1 parent 65b7399 commit 2f510c7

File tree

5 files changed

+63
-5
lines changed

5 files changed

+63
-5
lines changed

lua/flutter-tools.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ local function setup_commands()
3131
command("FlutterRestart", commands.restart)
3232
command("FlutterQuit", commands.quit)
3333
command("FlutterVisualDebug", commands.visual_debug)
34+
command("FlutterChangeTargetPlatform", commands.change_target_platform)
35+
command("FlutterToggleBrightness", commands.brightness)
3436
-- Lists
3537
command("FlutterDevices", devices.list_devices)
3638
command("FlutterEmulators", devices.list_emulators)

lua/flutter-tools/commands.lua

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ local current_device = nil
2626
---@field is_running fun(runner: flutter.Runner):boolean
2727
---@field run fun(runner: flutter.Runner, opts: RunOpts, paths:table, args:table, cwd:string, on_run_data:fun(is_err:boolean, data:string), on_run_exit:fun(data:string[], args: table, opts: RunOpts?, project_conf: flutter.ProjectConfig?,launch_config: dap.Configuration?), is_flutter_project: boolean, project_conf: flutter.ProjectConfig?, launch_config: dap.Configuration?)
2828
---@field cleanup fun(funner: flutter.Runner)
29-
---@field send fun(runner: flutter.Runner, cmd:string, quiet: boolean?)
29+
---@field send fun(runner: flutter.Runner, cmd:string, quiet: boolean?, on_response: fun(response: any)|nil)
3030
---@field attach fun(runner: flutter.Runner, paths:table, args:table, cwd:string, on_run_data:fun(is_err:boolean, data:string), on_run_exit:fun(data:string[], args: table, project_conf: flutter.ProjectConfig?,launch_config: dap.Configuration?))
3131

3232
---@type flutter.Runner?
@@ -325,9 +325,10 @@ end
325325
---@param cmd string
326326
---@param quiet boolean?
327327
---@param on_send function|nil
328-
local function send(cmd, quiet, on_send)
328+
---@param on_response fun(response:any)|nil
329+
local function send(cmd, quiet, on_send, on_response)
329330
if M.is_running() and runner then
330-
runner:send(cmd, quiet)
331+
runner:send(cmd, quiet, on_response)
331332
if on_send then on_send() end
332333
elseif not quiet then
333334
ui.notify("Sorry! Flutter is not running")
@@ -354,6 +355,18 @@ function M.quit(quiet)
354355
end)
355356
end
356357

358+
---@param quiet boolean?
359+
function M.change_target_platform(quiet)
360+
send("change_target_platform", quiet, nil, function(response)
361+
if not quiet then
362+
ui.notify("Changing platform to " .. response.value, nil, { timeout = 1500 })
363+
end
364+
end)
365+
end
366+
367+
---@param quiet boolean?
368+
function M.brightness(quiet) send("brightness", quiet) end
369+
357370
---@param quiet boolean?
358371
function M.visual_debug(quiet) send("visual_debug", quiet) end
359372

lua/flutter-tools/runners/debugger_runner.lua

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,22 @@ local function register_default_configurations(paths, is_flutter_project, projec
106106
end
107107
end
108108

109+
local function get_current_value(cmd)
110+
local service_activation_params = vm_service_extensions.get_request_params(cmd)
111+
if
112+
not service_activation_params
113+
or not service_activation_params.params.isolateId
114+
then return end
115+
116+
service_activation_params.params = {
117+
isolateId = service_activation_params.params.isolateId
118+
}
119+
dap.session():request("callService", service_activation_params, function(err, result)
120+
if err then return end
121+
vm_service_extensions.set_service_extensions_state(result.method, result.value)
122+
end)
123+
end
124+
109125
local function register_dap_listeners(on_run_data, on_run_exit)
110126
local started = false
111127
local before_start_logs = {}
@@ -133,6 +149,11 @@ local function register_dap_listeners(on_run_data, on_run_exit)
133149
dap.listeners.before["event_dart.serviceExtensionAdded"][plugin_identifier] = function(_, body)
134150
if body and body.extensionRPC and body.isolateId then
135151
vm_service_extensions.set_isolate_id(body.extensionRPC, body.isolateId)
152+
if body.extensionRPC == "ext.flutter.brightnessOverride" then
153+
get_current_value("brightness")
154+
elseif body.extensionRPC == "ext.flutter.platformOverride" then
155+
get_current_value("change_target_platform")
156+
end
136157
end
137158
end
138159

@@ -280,7 +301,7 @@ function DebuggerRunner:attach(paths, args, cwd, on_run_data, on_run_exit)
280301
end
281302
end
282303

283-
function DebuggerRunner:send(cmd, quiet)
304+
function DebuggerRunner:send(cmd, quiet, on_response)
284305
if cmd == "open_dev_tools" then
285306
dev_tools.open_dev_tools()
286307
return
@@ -292,10 +313,11 @@ function DebuggerRunner:send(cmd, quiet)
292313
end
293314
local service_activation_params = vm_service_extensions.get_request_params(cmd)
294315
if service_activation_params then
295-
dap.session():request("callService", service_activation_params, function(err, _)
316+
dap.session():request("callService", service_activation_params, function(err, response)
296317
if err and not quiet then
297318
ui.notify("Error calling service " .. cmd .. ": " .. err, ui.ERROR)
298319
end
320+
if response and on_response then on_response(response) end
299321
end)
300322
return
301323
end

lua/flutter-tools/runners/job_runner.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ local command_keys = {
1919
paint_baselines = "p",
2020
open_dev_tools = "v",
2121
generate = "g",
22+
change_target_platform = "o",
23+
brightness = "b",
2224
}
2325

2426
function JobRunner:is_running() return run_job ~= nil end

lua/flutter-tools/runners/vm_service_extensions.lua

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ local service_activation_requests = {
2020
slow_animations = "ext.flutter.timeDilation",
2121
inspect_widget = "ext.flutter.inspector.show",
2222
paint_baselines = "ext.flutter.debugPaintBaselinesEnabled",
23+
change_target_platform = "ext.flutter.platformOverride",
24+
brightness = "ext.flutter.brightnessOverride",
2325
}
2426

2527
local toggle_extension_state_keys = {
@@ -29,10 +31,27 @@ local toggle_extension_state_keys = {
2931
slow_animations = "timeDilation",
3032
inspect_widget = "enabled",
3133
paint_baselines = "enabled",
34+
change_target_platform = "value",
35+
brightness = "value",
36+
}
37+
38+
local cicle_target_platform = {
39+
linux = "fuchsia",
40+
fuchsia = "android",
41+
android = "iOS",
42+
iOS = "windows",
43+
windows = "macOS",
44+
macOS = "linux",
3245
}
3346

3447
local function toggle_value(request)
3548
local value = service_extensions_state[request]
49+
if request == service_activation_requests.change_target_platform then
50+
return cicle_target_platform[value] or "linux"
51+
end
52+
if request == service_activation_requests.brightness then
53+
return "Brightness." .. (value == "Brightness.light" and "dark" or "light")
54+
end
3655
if request == service_activation_requests.slow_animations then
3756
if value == "5.0" then
3857
return "1.0"

0 commit comments

Comments
 (0)