Skip to content

Commit 60cdb5d

Browse files
committed
Changes to enable the application distribution.
1 parent 54f272b commit 60cdb5d

File tree

1 file changed

+88
-35
lines changed

1 file changed

+88
-35
lines changed

main.go

Lines changed: 88 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,64 @@ import (
2121

2222
const 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

5084
func getPaths() (string, string, error) {
@@ -77,10 +111,10 @@ func handleError(err error) {
77111

78112
func 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

Comments
 (0)