@@ -21,30 +21,64 @@ import (
2121
2222const configurationFilename = "config.json"
2323
24- type Configuration struct {
24+ type configuration struct {
2525 FlutterPath string
2626 FlutterProjectPath string
2727 IconPath string
2828 ScreenHeight int
2929 ScreenWidth int
3030}
3131
32- func getConfig () (Configuration , error ) {
33- var configuration Configuration
32+ func buildAssetPath (flutterProjectPath string , assetPath string ) (string , error ) {
33+ if flutterProjectPath == "" {
34+ var (
35+ path string
36+ err error
37+ )
38+ path , err = os .Executable ()
39+ if err != nil {
40+ return "" , err
41+ }
42+ return filepath .Join (filepath .Dir (path ), "flutter_assets" ), nil
43+ }
44+ return filepath .Join (flutterProjectPath , assetPath ), nil
45+ }
46+
47+ func buildICUDataPath (flutterPath string , icuDataPath string ) (string , error ) {
48+ if flutterPath == "" {
49+ var (
50+ path string
51+ err error
52+ )
53+ path , err = os .Executable ()
54+ if err != nil {
55+ return "" , err
56+ }
57+ return filepath .Join (filepath .Dir (path ), "icudtl.dat" ), nil
58+ }
59+ return filepath .Join (flutterPath , icuDataPath ), nil
60+ }
61+
62+ func getConfig () (configuration , error ) {
63+ var config configuration
3464 var err error
3565 var file * os.File
36- file , err = os .Open (configurationFilename )
66+ var path string
67+ path , err = os .Executable ()
3768 if err != nil {
38- return configuration , err
39- } else {
40- var decoder = json .NewDecoder (file )
41- err = decoder .Decode (& configuration )
42- if err != nil {
43- return configuration , err
44- } else {
45- return configuration , nil
46- }
69+ return config , err
4770 }
71+ var configFilename = filepath .Join (filepath .Dir (path ), configurationFilename )
72+ file , err = os .Open (configFilename )
73+ if err != nil {
74+ return config , err
75+ }
76+ var decoder = json .NewDecoder (file )
77+ err = decoder .Decode (& config )
78+ if err != nil {
79+ return config , err
80+ }
81+ return config , nil
4882}
4983
5084func getPaths () (string , string , error ) {
@@ -77,10 +111,10 @@ func handleError(err error) {
77111
78112func main () {
79113 var (
80- configuration Configuration
81- err error
114+ config configuration
115+ err error
82116 )
83- configuration , err = getConfig ()
117+ config , err = getConfig ()
84118 if err != nil {
85119 handleError (err )
86120 } else {
@@ -89,19 +123,26 @@ func main() {
89123 imgFile * os.File
90124 err error
91125 )
92- imgFile , err = os .Open (configuration .IconPath )
93- if err != nil {
94- return err
95- } else {
96- var img image.Image
97- img , _ , err = image .Decode (imgFile )
126+ var iconPath = config .IconPath
127+ if string (iconPath [0 ]) != "/" {
128+ var path string
129+ path , err = os .Executable ()
98130 if err != nil {
99131 return err
100- } else {
101- window .SetIcon ([]image.Image {img })
102- return nil
103132 }
133+ iconPath = filepath .Join (filepath .Dir (path ), iconPath )
134+ }
135+ imgFile , err = os .Open (iconPath )
136+ if err != nil {
137+ return err
104138 }
139+ var img image.Image
140+ img , _ , err = image .Decode (imgFile )
141+ if err != nil {
142+ return err
143+ }
144+ window .SetIcon ([]image.Image {img })
145+ return nil
105146 }
106147 var (
107148 assetPath string
@@ -111,18 +152,30 @@ func main() {
111152 if err != nil {
112153 handleError (err )
113154 } else {
114- var options = []gutter.Option {
115- gutter .OptionAssetPath (filepath .Join (configuration .FlutterProjectPath , assetPath )),
116- gutter .OptionICUDataPath (filepath .Join (configuration .FlutterPath , icuDataPath )),
117- gutter .OptionWindowInitializer (setIcon ),
118- gutter .OptionWindowDimension (configuration .ScreenWidth , configuration .ScreenHeight ),
119- gutter .OptionWindowInitializer (setIcon ),
120- gutter .OptionPixelRatio (1.9 ),
121- gutter .OptionVmArguments ([]string {"--dart-non-checked-mode" , "--observatory-port=50300" }),
122- }
123- err = gutter .Run (options ... )
155+ var builtAssetPath string
156+ builtAssetPath , err = buildAssetPath (config .FlutterProjectPath , assetPath )
124157 if err != nil {
125158 handleError (err )
159+ } else {
160+ var builtICUDataPath string
161+ builtICUDataPath , err = buildICUDataPath (config .FlutterPath , icuDataPath )
162+ if err != nil {
163+ handleError (err )
164+ } else {
165+ var options = []gutter.Option {
166+ gutter .OptionAssetPath (builtAssetPath ),
167+ gutter .OptionICUDataPath (builtICUDataPath ),
168+ gutter .OptionWindowInitializer (setIcon ),
169+ gutter .OptionWindowDimension (config .ScreenWidth , config .ScreenHeight ),
170+ gutter .OptionWindowInitializer (setIcon ),
171+ gutter .OptionPixelRatio (1.9 ),
172+ gutter .OptionVmArguments ([]string {"--dart-non-checked-mode" , "--observatory-port=50300" }),
173+ }
174+ err = gutter .Run (options ... )
175+ if err != nil {
176+ handleError (err )
177+ }
178+ }
126179 }
127180 }
128181 }
0 commit comments