@@ -439,25 +439,25 @@ local fvm_list_job = nil
439439--- Returns table<{name: string, status: active|global|nil}>
440440function M .fvm_list (callback )
441441 if not fvm_list_job then
442- -- Example output:
443- --
444- -- Cache Directory: /Users/rjm/fvm/versions
445- --
446- -- master (active)
447- -- beta
448- -- stable (global)
449- fvm_list_job = Job :new ({ command = " fvm" , args = { " list" } })
442+ fvm_list_job = Job :new ({ command = " fvm" , args = { " api" , " list" } })
450443
451444 fvm_list_job :after_success (vim .schedule_wrap (function (j )
452445 local out = j :result ()
453- local sdks_out = { unpack (out , 3 , # out ) }
446+ local json_str = table.concat (out , " \n " )
447+ -- Parse the JSON string
448+ local ok , parsed = pcall (vim .json .decode , json_str )
449+ if not ok then
450+ ui .notify (" Failed to parse fvm list output" , ui .ERROR )
451+ fvm_list_job = nil
452+ return
453+ end
454454
455455 local sdks = {}
456- for _ , sdk_out in pairs (sdks_out ) do
457- -- matches: "<name> (<status>)"
458- local name , status = sdk_out : match ( " (.*)%s%((%w+)%) " )
459- name = name or sdk_out
460- table.insert ( sdks , { name = name , status = status })
456+ for _ , version in pairs (parsed . versions ) do
457+ table.insert ( sdks , {
458+ name = version . name ,
459+ dart_sdk_version = version . dartSdkVersion ,
460+ })
461461 end
462462
463463 callback (sdks )
0 commit comments