diff --git a/src/segments/flutter.go b/src/segments/flutter.go index b9a2e00314ac..921add4a9769 100644 --- a/src/segments/flutter.go +++ b/src/segments/flutter.go @@ -1,4 +1,5 @@ package segments +import "errors" type Flutter struct { Language @@ -13,9 +14,8 @@ func (f *Flutter) Enabled() bool { f.folders = dartFolders f.tooling = map[string]*cmd{ "fvm": { - executable: "fvm", - args: []string{"flutter", "--version"}, - regex: `Flutter (?P((?P[0-9]+).(?P[0-9]+).(?P[0-9]+)))`, + regex: `(?P((?P[0-9]+).(?P[0-9]+).(?P[0-9]+)))`, + getVersion: f.fvmVersion, }, "flutter": { executable: "flutter", @@ -28,3 +28,51 @@ func (f *Flutter) Enabled() bool { return f.Language.Enabled() } + +func (f *Flutter) fvmVersion() (string, error) { + if !f.env.HasCommand("fvm") { + return "", errors.New(noVersion) + } + + if !f.env.HasFolder(".fvm") { + return "", errors.New(noVersion) + } + + if version, _ := f.parseFvmrc(); version != "" { + return version, nil + } + + if version, _ := f.parseDartToolVersion(); version != "" { + return version, nil + } + + return "", errors.New(noVersion) +} + +func (f *Flutter) parseFvmrc() (string, error) { + fvmrcPath, err := f.env.HasParentFilePath(".fvmrc", false) + if err != nil { + return "", err + } + + content := f.env.FileContent(fvmrcPath) + if content == "" { + return "", nil + } + + return content, nil +} + +func (f *Flutter) parseDartToolVersion() (string, error) { + dartToolVersionPath, err := f.env.HasParentFilePath(".dart_tool/version", false) + if err != nil { + return "", err + } + + content := f.env.FileContent(dartToolVersionPath) + if content == "" { + return "", nil + } + + return content, nil +}