]> git.proxmox.com Git - flutter/pve_flutter_frontend.git/blob - README.md
add tooling upgrade info to README
[flutter/pve_flutter_frontend.git] / README.md
1 # pve_flutter_frontend
2
3 Frontend for Proxmox Virtual Environment
4
5 # Setup How-To
6
7 ## Get Flutter
8
9 See:
10 https://flutter.dev/docs/get-started/install/linux#install-flutter-manually
11
12 Make `flutter doctor` as happy as possible. Note you may need to tell it where
13 chromium is located, e.g., with `export CHROME_EXECUTABLE=/usr/bin/chromium`
14
15 ## Get Path-Dependencies
16
17 Most dependencies can be served from pub.dev, but the frontend also depends on
18 to local path dependencies maintained by Proxmox.
19
20 So, in the parent folder clone both, the API client library (pure dart package)
21 and the login manager, serving as a base for Proxmox api2 projects.
22
23 cd ..
24 git clone git://git.proxmox.com/git/flutter/proxmox_dart_api_client.git
25 cd proxmox_dart_api_client
26 flutter pub get
27 flutter packages pub run build_runner build --delete-conflicting-outputs
28
29
30 cd ..
31 git clone git://git.proxmox.com/git/flutter/proxmox_login_manager.git
32 cd proxmox_login_manager
33 flutter pub get
34 flutter packages pub run build_runner build --delete-conflicting-outputs
35
36 Now you have made the local dependencies and their dependencies available, and
37 built the generated (data) model code for each.
38
39 # Run the App
40
41 ## Linux native
42
43 With the dependencies setup you should cd back into this directory
44 (pve_flutter_frontend repository root) and also generate the model code once:
45
46 flutter packages pub run build_runner build --delete-conflicting-outputs
47
48 Note: the `--delete-conflicting-outputs` option is normally not required, but
49 can come in handy during development trial/error coding.
50
51 To actually run it you can do:
52
53 flutter run -d linux
54
55 ## Build errors
56
57 If there's an error during build use the verbose `-v` flag, to make flutter
58 tell you what's actually going on. Quick remedies are then often rebuilding the
59 models, build from clean state, upgrade or downgrade flutter to the last known
60 working version - as we use latest master we sometimes run actually into bugs.
61 Or if you made code changes resulting in an error, well duh, fix those.
62
63 ## Web build infos
64
65 You'll need some sort workaround for CORS in order to serve the flutter
66 frontend from your local dev machine, which will enable some convenient
67 features, like hot reload, automatic builds on changes...
68
69 This is required as CORS boundaries are any change in <scheme><addr><port>
70 tuples, and chrome will forbid even cross site requests to localhost on a
71 different port.
72
73 ### Disable CORS in chrome/ium
74
75
76 Create a small shell script, lets name it `chrome-no-cors.sh`, with the
77 following content:
78
79 #!/bin/sh
80 mkdir -p /tmp/chrome || true
81 /usr/bin/chromium --disable-features=CrossOriginOpenerPolicy,CrossOriginEmbedderPolicy --disable-web-security --user-data-dir="/tmp/chrome" $*
82
83 Then `chmod +x chrome-no-cors.sh` it and adapt the CHROME_EXECUTABLE env
84 variable:
85
86 export CHROME_EXECUTABLE="$(realpath chrome-no-cors.sh)"
87
88 Now you can start the web based build normally:
89
90 $ flutter run -d chrome --web-port=35000
91
92
93 NOTE: without setting a fixed port flutter uses a random one, as chrome binds
94 certificate expections and local browser storage to a (protocol, host, port)
95 tuple, this means that we'd lose all saved settings etc. every time else
96
97 ### Use reverse proxy to allow connections to PVE and the App over the same port
98
99 Launch App in Chrome:
100 $ flutter run -d chrome --web-port 42000
101
102 nginx snippets:
103
104 location / {
105
106 if ( $query_string ~ "console" ) {
107 proxy_pass https://<clusterip>:8006;
108 }
109 proxy_pass http://127.0.0.1:42000;
110 proxy_read_timeout 24h;
111 proxy_http_version 1.1;
112 proxy_set_header Connection "";
113 proxy_buffering off;
114
115 }
116
117 location /xterm {
118 proxy_set_header Host $host;
119 proxy_set_header Cookie $http_cookie;
120 proxy_pass https://<clusterip>:8006;
121 }
122
123 location /api2 {
124 proxy_set_header Upgrade $http_upgrade;
125 proxy_set_header Connection "Upgrade";
126 proxy_set_header Host $host;
127 proxy_set_header Cookie $http_cookie;
128 proxy_pass https://<clusterip>:8006;
129 }
130
131 # Misc.
132
133 To upgrade the proxmox_api_client dependency execute:
134 $ flutter packages upgrade
135
136 To build the model classes use:
137 $ flutter packages pub run build_runner build
138
139 If you want to login without typing your password for your
140 Test-Cluster, add this to the main function:
141
142 var apiClient = await proxclient.authenticate("root@pam", "yourpassword");
143
144 ## Android vector drawables
145
146 Android does support vector drawables, but not SVGs directly. They need to be
147 converted to the Android specific subset of SVG and are stored as xml files.
148
149 One way to do that is to use the Asset Studio which is part of Android Studio.
150 In your (dummy) project, right click in the tree view on
151 app -> New -> Vector Asset.
152
153 There are other options, but they have some caveats themselves.
154
155 * a web service which is subscription based https://svg2vector.com/
156 * a JS based CLI tool, but it is npm based... https://github.com/Ashung/svg2vectordrawable
157
158 ## Android splash screen logo
159
160 Will be masked, see figure 2 in https://developer.android.com/guide/topics/ui/splash-screen
161 The drawable therefore needs to account for that by being quite a bit bigger.
162 The `assets/images/android_launch_background_template.svg` file is useful to
163 size the logo / icon accordingly.
164
165 ## Screenshots Android
166 adb shell settings put global sysui_demo_allowed 1
167
168 ## Build tooling upgrades
169
170 In general, updates should be done in the order of:
171
172 * Android Studio
173 * Flutter
174 * Plugins
175
176 and then select a gradle and android gradle plugin version which are compatible
177 with each other and the other parts.
178
179 To do this correctly, it's necessary to check the respective release notes
180 and compatibility tables/matrices.
181
182 ### Flutter
183
184 to upgrade flutter itself, just run
185
186 flutter upgrade
187
188 check https://docs.flutter.dev/release/release-notes for breaking changes
189 and migration information
190
191 ### Android Studio
192
193 Depends on the method you installed, on Linux with tarballs, normally
194 the new version is downloaded/extracted again, and it will automatically
195 detect & migrate old settings and configuration files on first start.
196
197 The Android Studio version determines which Gradle/AGP version you can use.
198 Check the respective release notes for Gradle/AGP versions:
199 https://developer.android.com/studio/releases
200
201 ### Gradle/Android Gradle Plugin (AGP)
202
203 Compatibility depends on the Android Studio, Flutter and plugins.
204 Can be changed in Android Studio under
205 File -> Project Structure -> Project
206
207 When selected, Android Studio will automatically download/build them, and
208 change the entries in the android/build.gradle file.
209
210 See https://developer.android.com/build/releases/gradle-plugin for
211 AGP/Gradle compatibility.
212
213 ### Kotlin
214
215 Compatibility depends on Flutter plugins and Gradle, check
216 https://docs.gradle.org/current/userguide/compatibility.html
217
218 To change the used kotlin version, edit it in the android/build.gradle file
219 manually.