├── .github └── workflows │ ├── ci.yml │ └── release.yml ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md ├── assets ├── fonts │ ├── MaterialIcons-Regular.ttf │ └── Roboto-Regular.ttf ├── header.png └── icon.svg ├── lib ├── demos.dart ├── demos │ ├── context_menu.dart │ ├── event_channel.dart │ ├── file_dialog.dart │ ├── keyboard.dart │ ├── method_channel.dart │ ├── textfield.dart │ └── window.dart ├── main.dart ├── ui │ └── widgets.dart └── utils.dart ├── pubspec.lock ├── pubspec.yaml └── src ├── calc_channel.rs ├── main.rs └── msg_stream_channel.rs /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | on: [push, pull_request] 2 | 3 | name: Flutter App Demo 4 | 5 | jobs: 6 | ci: 7 | strategy: 8 | fail-fast: false 9 | matrix: 10 | toolchain: 11 | - rust: stable 12 | flutter: stable 13 | - rust: nightly 14 | flutter: dev 15 | platform: 16 | - target: x86_64-unknown-linux-gnu 17 | host: ubuntu-latest 18 | cross: false 19 | 20 | - target: x86_64-apple-darwin 21 | host: macos-latest 22 | cross: false 23 | 24 | - target: x86_64-pc-windows-msvc 25 | host: windows-latest 26 | cross: false 27 | 28 | - target: armv7-linux-androideabi 29 | host: ubuntu-latest 30 | cross: true 31 | - target: aarch64-linux-android 32 | host: ubuntu-latest 33 | cross: true 34 | # TODO linking fails, not been able to reproduce locally yet 35 | #- target: i686-linux-android 36 | # host: ubuntu-latest 37 | # cross: true 38 | #- target: x86_64-linux-android 39 | # host: ubuntu-latest 40 | # cross: true 41 | 42 | - target: armv7-apple-ios 43 | host: macos-latest 44 | cross: true 45 | - target: aarch64-apple-ios 46 | host: macos-latest 47 | cross: true 48 | env: 49 | RUST_BACKTRACE: 1 50 | CARGO_INCREMENTAL: 0 51 | LLVM_CONFIG_PATH: /usr/local/opt/llvm/bin/llvm-config 52 | NDK_HOME: /usr/local/lib/android/sdk/ndk-bundle 53 | 54 | runs-on: ${{ matrix.platform.host }} 55 | steps: 56 | - name: Checkout sources 57 | uses: actions/checkout@v2 58 | 59 | - name: Cache cargo folder 60 | uses: actions/cache@v1 61 | with: 62 | path: ~/.cargo 63 | key: ${{ matrix.platform.target }}-cargo-${{ matrix.toolchain.rust }} 64 | 65 | - name: Install dependencies ubuntu 66 | if: matrix.platform.host == 'ubuntu-latest' 67 | run: sudo apt-get install llvm-dev libxcb-shape0-dev libxcb-xfixes0-dev 68 | 69 | - name: Install dependencies macos 70 | if: matrix.platform.host == 'macos-latest' 71 | run: brew install llvm 72 | 73 | - name: Install dependencies windows 74 | if: matrix.platform.host == 'windows-latest' 75 | run: choco install llvm 76 | 77 | - name: Install rust toolchain 78 | uses: hecrj/setup-rust-action@v1 79 | with: 80 | rust-version: ${{ matrix.toolchain.rust }} 81 | targets: ${{ matrix.platform.target }} 82 | 83 | - name: Install flutter 84 | uses: subosito/flutter-action@v1 85 | with: 86 | channel: ${{ matrix.toolchain.flutter }} 87 | 88 | - name: Install cargo-flutter 89 | run: cargo install cargo-flutter --force 90 | 91 | - name: Build 92 | run: cargo flutter --quiet build --target ${{ matrix.platform.target }} 93 | 94 | - name: Test 95 | if: matrix.platform.cross == false 96 | run: cargo flutter --quiet test 97 | 98 | lint: 99 | runs-on: ubuntu-latest 100 | steps: 101 | - name: Checkout sources 102 | uses: actions/checkout@v1 103 | 104 | - name: Install rust toolchain 105 | uses: hecrj/setup-rust-action@v1 106 | with: 107 | rust-version: stable 108 | components: clippy, rustfmt 109 | 110 | - name: cargo fmt 111 | run: cargo fmt --all -- --check 112 | 113 | - name: cargo clippy 114 | run: cargo clippy -- -D warnings 115 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | branches: 4 | - master 5 | 6 | name: Flutter App Demo Release 7 | 8 | jobs: 9 | publish: 10 | strategy: 11 | fail-fast: false 12 | matrix: 13 | toolchain: 14 | - rust: stable 15 | flutter: stable 16 | platform: 17 | - target: x86_64-unknown-linux-gnu 18 | host: ubuntu-latest 19 | format: appimage 20 | artifact: flutter-app-demo-x86_64.AppImage 21 | 22 | - target: x86_64-apple-darwin 23 | host: macos-latest 24 | format: dmg 25 | 26 | - target: x86_64-pc-windows-msvc 27 | host: windows-latest 28 | format: nsis 29 | 30 | - target: aarch64-linux-android 31 | host: ubuntu-latest 32 | format: apk 33 | artifact: apk/flutter-app-demo.apk 34 | 35 | - target: aarch64-apple-ios 36 | host: macos-latest 37 | format: lipo 38 | env: 39 | RUST_BACKTRACE: 1 40 | CARGO_INCREMENTAL: 0 41 | LLVM_CONFIG_PATH: /usr/local/opt/llvm/bin/llvm-config 42 | NDK_HOME: /usr/local/lib/android/sdk/ndk-bundle 43 | 44 | runs-on: ${{ matrix.platform.host }} 45 | steps: 46 | - name: Checkout sources 47 | uses: actions/checkout@v2 48 | 49 | - name: Cache cargo folder 50 | uses: actions/cache@v1 51 | with: 52 | path: ~/.cargo 53 | key: ${{ matrix.platform.target }}-cargo-${{ matrix.toolchain.rust }} 54 | 55 | - name: Install dependencies ubuntu 56 | if: matrix.platform.host == 'ubuntu-latest' 57 | run: sudo apt-get install llvm-dev libxcb-shape0-dev libxcb-xfixes0-dev 58 | 59 | - name: Install dependencies macos 60 | if: matrix.platform.host == 'macos-latest' 61 | run: brew install llvm 62 | 63 | - name: Install dependencies windows 64 | if: matrix.platform.host == 'windows-latest' 65 | run: choco install llvm 66 | 67 | - name: Install appimagetool 68 | if: matrix.platform.format == 'appimage' 69 | run: | 70 | wget https://github.com/AppImage/AppImageKit/releases/latest/download/appimagetool-x86_64.AppImage 71 | chmod +x appimagetool-x86_64.AppImage 72 | sudo mv appimagetool-x86_64.AppImage /usr/bin/appimagetool 73 | 74 | - name: Install rust toolchain 75 | uses: hecrj/setup-rust-action@v1 76 | with: 77 | rust-version: ${{ matrix.toolchain.rust }} 78 | targets: ${{ matrix.platform.target }} 79 | 80 | - name: Install flutter 81 | uses: subosito/flutter-action@v1 82 | with: 83 | channel: ${{ matrix.toolchain.flutter }} 84 | 85 | - name: Install cargo-flutter 86 | run: cargo install cargo-flutter --force 87 | 88 | - name: Build 89 | run: cargo flutter --quiet --no-sign --format ${{ matrix.platform.format }} 90 | build --target ${{ matrix.platform.target }} --release 91 | 92 | - name: Create release 93 | continue-on-error: true 94 | uses: actions/create-release@v1 95 | env: 96 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 97 | with: 98 | tag_name: v_${{ github.sha }} 99 | release_name: Release v_${{ github.sha }} 100 | 101 | - name: Upload release asset 102 | uses: softprops/action-gh-release@master 103 | env: 104 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 105 | with: 106 | tag_name: v_${{ github.sha }} 107 | name: Flutter App Demo ${{ github.sha }} 108 | files: ./target/flutter/${{ matrix.platform.target }}/release/${{ matrix.platform.artifact }} 109 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk 3 | /build 4 | /.dart_tool 5 | .packages 6 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "aho-corasick" 5 | version = "0.7.6" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | dependencies = [ 8 | "memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 9 | ] 10 | 11 | [[package]] 12 | name = "andrew" 13 | version = "0.2.1" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | dependencies = [ 16 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 17 | "line_drawing 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 18 | "rusttype 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", 19 | "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 20 | "xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 21 | "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 22 | ] 23 | 24 | [[package]] 25 | name = "android-ndk" 26 | version = "0.0.6" 27 | source = "git+https://github.com/rust-windowing/android-ndk-rs#a8ddfa4f7b510923cd69ded0f7e8492711b0af88" 28 | dependencies = [ 29 | "android-ndk-sys 0.2.0 (git+https://github.com/rust-windowing/android-ndk-rs)", 30 | "jni-sys 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 31 | "num_enum 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 32 | ] 33 | 34 | [[package]] 35 | name = "android-ndk-sys" 36 | version = "0.2.0" 37 | source = "git+https://github.com/rust-windowing/android-ndk-rs#a8ddfa4f7b510923cd69ded0f7e8492711b0af88" 38 | 39 | [[package]] 40 | name = "android_glue" 41 | version = "0.2.3" 42 | source = "git+https://github.com/rust-windowing/android-rs-glue#096c6dd62dfa3e6c233f9ed3aafedfb9dab57871" 43 | dependencies = [ 44 | "android-ndk-sys 0.2.0 (git+https://github.com/rust-windowing/android-ndk-rs)", 45 | ] 46 | 47 | [[package]] 48 | name = "android_log-sys" 49 | version = "0.1.2" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | 52 | [[package]] 53 | name = "android_logger" 54 | version = "0.8.6" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | dependencies = [ 57 | "android_log-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 58 | "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 59 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 60 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 61 | ] 62 | 63 | [[package]] 64 | name = "ansi_term" 65 | version = "0.11.0" 66 | source = "registry+https://github.com/rust-lang/crates.io-index" 67 | dependencies = [ 68 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 69 | ] 70 | 71 | [[package]] 72 | name = "approx" 73 | version = "0.3.2" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | dependencies = [ 76 | "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 77 | ] 78 | 79 | [[package]] 80 | name = "arrayref" 81 | version = "0.3.5" 82 | source = "registry+https://github.com/rust-lang/crates.io-index" 83 | 84 | [[package]] 85 | name = "arrayvec" 86 | version = "0.5.1" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | 89 | [[package]] 90 | name = "async-std" 91 | version = "1.4.0" 92 | source = "registry+https://github.com/rust-lang/crates.io-index" 93 | dependencies = [ 94 | "async-task 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 95 | "crossbeam-channel 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 96 | "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 97 | "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 98 | "futures-core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 99 | "futures-io 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 100 | "futures-timer 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 101 | "kv-log-macro 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 102 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 103 | "memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 104 | "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", 105 | "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", 106 | "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", 107 | "once_cell 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 108 | "pin-project-lite 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 109 | "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", 110 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 111 | ] 112 | 113 | [[package]] 114 | name = "async-task" 115 | version = "1.2.1" 116 | source = "registry+https://github.com/rust-lang/crates.io-index" 117 | dependencies = [ 118 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 119 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 120 | ] 121 | 122 | [[package]] 123 | name = "atty" 124 | version = "0.2.14" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | dependencies = [ 127 | "hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 128 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 129 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 130 | ] 131 | 132 | [[package]] 133 | name = "autocfg" 134 | version = "0.1.7" 135 | source = "registry+https://github.com/rust-lang/crates.io-index" 136 | 137 | [[package]] 138 | name = "autocfg" 139 | version = "1.0.0" 140 | source = "registry+https://github.com/rust-lang/crates.io-index" 141 | 142 | [[package]] 143 | name = "backtrace" 144 | version = "0.3.42" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | dependencies = [ 147 | "backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 148 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 149 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 150 | "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 151 | ] 152 | 153 | [[package]] 154 | name = "backtrace-sys" 155 | version = "0.1.32" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | dependencies = [ 158 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 159 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 160 | ] 161 | 162 | [[package]] 163 | name = "base64" 164 | version = "0.10.1" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | dependencies = [ 167 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 168 | ] 169 | 170 | [[package]] 171 | name = "bindgen" 172 | version = "0.52.0" 173 | source = "registry+https://github.com/rust-lang/crates.io-index" 174 | dependencies = [ 175 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 176 | "cexpr 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 177 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 178 | "clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)", 179 | "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", 180 | "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 181 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 182 | "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 183 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 184 | "peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 185 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 186 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 187 | "regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 188 | "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 189 | "shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 190 | "which 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 191 | ] 192 | 193 | [[package]] 194 | name = "bitflags" 195 | version = "1.2.1" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | 198 | [[package]] 199 | name = "blake2b_simd" 200 | version = "0.5.10" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | dependencies = [ 203 | "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 204 | "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 205 | "constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 206 | ] 207 | 208 | [[package]] 209 | name = "block" 210 | version = "0.1.6" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | 213 | [[package]] 214 | name = "byteorder" 215 | version = "1.3.2" 216 | source = "registry+https://github.com/rust-lang/crates.io-index" 217 | 218 | [[package]] 219 | name = "calloop" 220 | version = "0.4.4" 221 | source = "registry+https://github.com/rust-lang/crates.io-index" 222 | dependencies = [ 223 | "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", 224 | "mio-extras 2.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 225 | "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", 226 | ] 227 | 228 | [[package]] 229 | name = "cc" 230 | version = "1.0.50" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | 233 | [[package]] 234 | name = "cexpr" 235 | version = "0.3.6" 236 | source = "registry+https://github.com/rust-lang/crates.io-index" 237 | dependencies = [ 238 | "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 239 | ] 240 | 241 | [[package]] 242 | name = "cfg-if" 243 | version = "0.1.10" 244 | source = "registry+https://github.com/rust-lang/crates.io-index" 245 | 246 | [[package]] 247 | name = "cgl" 248 | version = "0.3.2" 249 | source = "registry+https://github.com/rust-lang/crates.io-index" 250 | dependencies = [ 251 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 252 | ] 253 | 254 | [[package]] 255 | name = "clang-sys" 256 | version = "0.28.1" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | dependencies = [ 259 | "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 260 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 261 | "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 262 | ] 263 | 264 | [[package]] 265 | name = "clap" 266 | version = "2.33.0" 267 | source = "registry+https://github.com/rust-lang/crates.io-index" 268 | dependencies = [ 269 | "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 270 | "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", 271 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 272 | "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 273 | "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 274 | "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 275 | "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 276 | ] 277 | 278 | [[package]] 279 | name = "clipboard-win" 280 | version = "2.2.0" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | dependencies = [ 283 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 284 | ] 285 | 286 | [[package]] 287 | name = "cloudabi" 288 | version = "0.0.3" 289 | source = "registry+https://github.com/rust-lang/crates.io-index" 290 | dependencies = [ 291 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 292 | ] 293 | 294 | [[package]] 295 | name = "cocoa" 296 | version = "0.19.1" 297 | source = "registry+https://github.com/rust-lang/crates.io-index" 298 | dependencies = [ 299 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 300 | "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 301 | "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 302 | "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", 303 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 304 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 305 | "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 306 | ] 307 | 308 | [[package]] 309 | name = "constant_time_eq" 310 | version = "0.1.5" 311 | source = "registry+https://github.com/rust-lang/crates.io-index" 312 | 313 | [[package]] 314 | name = "copypasta" 315 | version = "0.6.2" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | dependencies = [ 318 | "clipboard-win 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 319 | "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 320 | "objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 321 | "objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 322 | "smithay-clipboard 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 323 | "wayland-client 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", 324 | "x11-clipboard 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 325 | ] 326 | 327 | [[package]] 328 | name = "core-foundation" 329 | version = "0.6.4" 330 | source = "registry+https://github.com/rust-lang/crates.io-index" 331 | dependencies = [ 332 | "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 333 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 334 | ] 335 | 336 | [[package]] 337 | name = "core-foundation-sys" 338 | version = "0.6.2" 339 | source = "registry+https://github.com/rust-lang/crates.io-index" 340 | 341 | [[package]] 342 | name = "core-graphics" 343 | version = "0.17.3" 344 | source = "registry+https://github.com/rust-lang/crates.io-index" 345 | dependencies = [ 346 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 347 | "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 348 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 349 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 350 | ] 351 | 352 | [[package]] 353 | name = "core-video-sys" 354 | version = "0.1.3" 355 | source = "registry+https://github.com/rust-lang/crates.io-index" 356 | dependencies = [ 357 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 358 | "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 359 | "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", 360 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 361 | "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 362 | ] 363 | 364 | [[package]] 365 | name = "crossbeam-channel" 366 | version = "0.4.0" 367 | source = "registry+https://github.com/rust-lang/crates.io-index" 368 | dependencies = [ 369 | "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 370 | ] 371 | 372 | [[package]] 373 | name = "crossbeam-deque" 374 | version = "0.7.2" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | dependencies = [ 377 | "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 378 | "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 379 | ] 380 | 381 | [[package]] 382 | name = "crossbeam-epoch" 383 | version = "0.8.0" 384 | source = "registry+https://github.com/rust-lang/crates.io-index" 385 | dependencies = [ 386 | "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 387 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 388 | "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 389 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 390 | "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 391 | "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 392 | ] 393 | 394 | [[package]] 395 | name = "crossbeam-utils" 396 | version = "0.6.6" 397 | source = "registry+https://github.com/rust-lang/crates.io-index" 398 | dependencies = [ 399 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 400 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 401 | ] 402 | 403 | [[package]] 404 | name = "crossbeam-utils" 405 | version = "0.7.0" 406 | source = "registry+https://github.com/rust-lang/crates.io-index" 407 | dependencies = [ 408 | "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 409 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 410 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 411 | ] 412 | 413 | [[package]] 414 | name = "dirs" 415 | version = "2.0.2" 416 | source = "registry+https://github.com/rust-lang/crates.io-index" 417 | dependencies = [ 418 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 419 | "dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 420 | ] 421 | 422 | [[package]] 423 | name = "dirs-sys" 424 | version = "0.3.4" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | dependencies = [ 427 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 428 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 429 | "redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 430 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 431 | ] 432 | 433 | [[package]] 434 | name = "dispatch" 435 | version = "0.1.4" 436 | source = "registry+https://github.com/rust-lang/crates.io-index" 437 | 438 | [[package]] 439 | name = "dlib" 440 | version = "0.4.1" 441 | source = "registry+https://github.com/rust-lang/crates.io-index" 442 | dependencies = [ 443 | "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 444 | ] 445 | 446 | [[package]] 447 | name = "downcast-rs" 448 | version = "1.1.1" 449 | source = "registry+https://github.com/rust-lang/crates.io-index" 450 | 451 | [[package]] 452 | name = "env_logger" 453 | version = "0.7.1" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | dependencies = [ 456 | "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", 457 | "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 458 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 459 | "regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 460 | "termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 461 | ] 462 | 463 | [[package]] 464 | name = "failure" 465 | version = "0.1.6" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | dependencies = [ 468 | "backtrace 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)", 469 | "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 470 | ] 471 | 472 | [[package]] 473 | name = "failure_derive" 474 | version = "0.1.6" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | dependencies = [ 477 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 478 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 479 | "syn 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", 480 | "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", 481 | ] 482 | 483 | [[package]] 484 | name = "flutter-app-demo" 485 | version = "0.4.0" 486 | dependencies = [ 487 | "android-ndk 0.0.6 (git+https://github.com/rust-windowing/android-ndk-rs)", 488 | "android_glue 0.2.3 (git+https://github.com/rust-windowing/android-rs-glue)", 489 | "android_logger 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)", 490 | "async-std 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 491 | "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 492 | "flutter-engine 0.4.0 (git+https://github.com/flutter-rs/flutter-rs)", 493 | "flutter-plugins 0.4.0 (git+https://github.com/flutter-rs/flutter-rs)", 494 | "flutter-winit 0.4.0 (git+https://github.com/flutter-rs/flutter-rs)", 495 | "glutin 0.22.0-alpha5 (git+https://github.com/dvc94ch/glutin?branch=android)", 496 | "jni-android-sys 0.0.10 (registry+https://github.com/rust-lang/crates.io-index)", 497 | "jni-glue 0.0.10 (registry+https://github.com/rust-lang/crates.io-index)", 498 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 499 | ] 500 | 501 | [[package]] 502 | name = "flutter-engine" 503 | version = "0.4.0" 504 | source = "git+https://github.com/flutter-rs/flutter-rs#395ccbec338934a1b0d0e74e4bd2bed4d2faa9f3" 505 | dependencies = [ 506 | "flutter-engine-sys 0.4.0 (git+https://github.com/flutter-rs/flutter-rs)", 507 | "gl 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", 508 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 509 | "parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 510 | "priority-queue 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 511 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 512 | "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", 513 | ] 514 | 515 | [[package]] 516 | name = "flutter-engine-sys" 517 | version = "0.4.0" 518 | source = "git+https://github.com/flutter-rs/flutter-rs#395ccbec338934a1b0d0e74e4bd2bed4d2faa9f3" 519 | dependencies = [ 520 | "bindgen 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", 521 | "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 522 | ] 523 | 524 | [[package]] 525 | name = "flutter-plugins" 526 | version = "0.4.0" 527 | source = "git+https://github.com/flutter-rs/flutter-rs#395ccbec338934a1b0d0e74e4bd2bed4d2faa9f3" 528 | dependencies = [ 529 | "flutter-engine 0.4.0 (git+https://github.com/flutter-rs/flutter-rs)", 530 | "locale_config 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 531 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 532 | "parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 533 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 534 | "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", 535 | "tinyfiledialogs 3.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 536 | "unic-locale 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 537 | ] 538 | 539 | [[package]] 540 | name = "flutter-winit" 541 | version = "0.4.0" 542 | source = "git+https://github.com/flutter-rs/flutter-rs#395ccbec338934a1b0d0e74e4bd2bed4d2faa9f3" 543 | dependencies = [ 544 | "async-std 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 545 | "copypasta 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 546 | "flutter-engine 0.4.0 (git+https://github.com/flutter-rs/flutter-rs)", 547 | "flutter-engine-sys 0.4.0 (git+https://github.com/flutter-rs/flutter-rs)", 548 | "flutter-plugins 0.4.0 (git+https://github.com/flutter-rs/flutter-rs)", 549 | "futures-task 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 550 | "glutin 0.22.0-alpha5 (git+https://github.com/dvc94ch/glutin?branch=android)", 551 | "locale_config 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 552 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 553 | "parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 554 | ] 555 | 556 | [[package]] 557 | name = "foreign-types" 558 | version = "0.3.2" 559 | source = "registry+https://github.com/rust-lang/crates.io-index" 560 | dependencies = [ 561 | "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 562 | ] 563 | 564 | [[package]] 565 | name = "foreign-types-shared" 566 | version = "0.1.1" 567 | source = "registry+https://github.com/rust-lang/crates.io-index" 568 | 569 | [[package]] 570 | name = "fuchsia-cprng" 571 | version = "0.1.1" 572 | source = "registry+https://github.com/rust-lang/crates.io-index" 573 | 574 | [[package]] 575 | name = "fuchsia-zircon" 576 | version = "0.3.3" 577 | source = "registry+https://github.com/rust-lang/crates.io-index" 578 | dependencies = [ 579 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 580 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 581 | ] 582 | 583 | [[package]] 584 | name = "fuchsia-zircon-sys" 585 | version = "0.3.3" 586 | source = "registry+https://github.com/rust-lang/crates.io-index" 587 | 588 | [[package]] 589 | name = "futures-core" 590 | version = "0.3.1" 591 | source = "registry+https://github.com/rust-lang/crates.io-index" 592 | 593 | [[package]] 594 | name = "futures-io" 595 | version = "0.3.1" 596 | source = "registry+https://github.com/rust-lang/crates.io-index" 597 | 598 | [[package]] 599 | name = "futures-task" 600 | version = "0.3.1" 601 | source = "registry+https://github.com/rust-lang/crates.io-index" 602 | 603 | [[package]] 604 | name = "futures-timer" 605 | version = "2.0.2" 606 | source = "registry+https://github.com/rust-lang/crates.io-index" 607 | 608 | [[package]] 609 | name = "gl" 610 | version = "0.14.0" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | dependencies = [ 613 | "gl_generator 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", 614 | ] 615 | 616 | [[package]] 617 | name = "gl_generator" 618 | version = "0.13.1" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | dependencies = [ 621 | "khronos_api 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 622 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 623 | "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 624 | ] 625 | 626 | [[package]] 627 | name = "gl_generator" 628 | version = "0.14.0" 629 | source = "registry+https://github.com/rust-lang/crates.io-index" 630 | dependencies = [ 631 | "khronos_api 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 632 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 633 | "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 634 | ] 635 | 636 | [[package]] 637 | name = "glob" 638 | version = "0.3.0" 639 | source = "registry+https://github.com/rust-lang/crates.io-index" 640 | 641 | [[package]] 642 | name = "glutin" 643 | version = "0.22.0-alpha5" 644 | source = "git+https://github.com/dvc94ch/glutin?branch=android#3c3159922d13cc5ef0291dc114a1ab4238979f91" 645 | dependencies = [ 646 | "android-ndk 0.0.6 (git+https://github.com/rust-windowing/android-ndk-rs)", 647 | "android_glue 0.2.3 (git+https://github.com/rust-windowing/android-rs-glue)", 648 | "cgl 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 649 | "cocoa 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)", 650 | "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 651 | "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", 652 | "glutin_egl_sys 0.1.4 (git+https://github.com/dvc94ch/glutin?branch=android)", 653 | "glutin_emscripten_sys 0.1.0 (git+https://github.com/dvc94ch/glutin?branch=android)", 654 | "glutin_gles2_sys 0.1.3 (git+https://github.com/dvc94ch/glutin?branch=android)", 655 | "glutin_glx_sys 0.1.5 (git+https://github.com/dvc94ch/glutin?branch=android)", 656 | "glutin_wgl_sys 0.1.3 (git+https://github.com/dvc94ch/glutin?branch=android)", 657 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 658 | "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 659 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 660 | "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 661 | "osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 662 | "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 663 | "wayland-client 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", 664 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 665 | "winit 0.20.0-alpha5 (git+https://github.com/dvc94ch/winit?branch=android)", 666 | ] 667 | 668 | [[package]] 669 | name = "glutin_egl_sys" 670 | version = "0.1.4" 671 | source = "git+https://github.com/dvc94ch/glutin?branch=android#3c3159922d13cc5ef0291dc114a1ab4238979f91" 672 | dependencies = [ 673 | "gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", 674 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 675 | ] 676 | 677 | [[package]] 678 | name = "glutin_emscripten_sys" 679 | version = "0.1.0" 680 | source = "git+https://github.com/dvc94ch/glutin?branch=android#3c3159922d13cc5ef0291dc114a1ab4238979f91" 681 | 682 | [[package]] 683 | name = "glutin_gles2_sys" 684 | version = "0.1.3" 685 | source = "git+https://github.com/dvc94ch/glutin?branch=android#3c3159922d13cc5ef0291dc114a1ab4238979f91" 686 | dependencies = [ 687 | "gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", 688 | "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 689 | ] 690 | 691 | [[package]] 692 | name = "glutin_glx_sys" 693 | version = "0.1.5" 694 | source = "git+https://github.com/dvc94ch/glutin?branch=android#3c3159922d13cc5ef0291dc114a1ab4238979f91" 695 | dependencies = [ 696 | "gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", 697 | "x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)", 698 | ] 699 | 700 | [[package]] 701 | name = "glutin_wgl_sys" 702 | version = "0.1.3" 703 | source = "git+https://github.com/dvc94ch/glutin?branch=android#3c3159922d13cc5ef0291dc114a1ab4238979f91" 704 | dependencies = [ 705 | "gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", 706 | ] 707 | 708 | [[package]] 709 | name = "hermit-abi" 710 | version = "0.1.6" 711 | source = "registry+https://github.com/rust-lang/crates.io-index" 712 | dependencies = [ 713 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 714 | ] 715 | 716 | [[package]] 717 | name = "humantime" 718 | version = "1.3.0" 719 | source = "registry+https://github.com/rust-lang/crates.io-index" 720 | dependencies = [ 721 | "quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 722 | ] 723 | 724 | [[package]] 725 | name = "indexmap" 726 | version = "1.3.1" 727 | source = "registry+https://github.com/rust-lang/crates.io-index" 728 | dependencies = [ 729 | "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 730 | ] 731 | 732 | [[package]] 733 | name = "instant" 734 | version = "0.1.2" 735 | source = "registry+https://github.com/rust-lang/crates.io-index" 736 | 737 | [[package]] 738 | name = "iovec" 739 | version = "0.1.4" 740 | source = "registry+https://github.com/rust-lang/crates.io-index" 741 | dependencies = [ 742 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 743 | ] 744 | 745 | [[package]] 746 | name = "itoa" 747 | version = "0.4.4" 748 | source = "registry+https://github.com/rust-lang/crates.io-index" 749 | 750 | [[package]] 751 | name = "jni-android-sys" 752 | version = "0.0.10" 753 | source = "registry+https://github.com/rust-lang/crates.io-index" 754 | dependencies = [ 755 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 756 | "jni-glue 0.0.10 (registry+https://github.com/rust-lang/crates.io-index)", 757 | ] 758 | 759 | [[package]] 760 | name = "jni-glue" 761 | version = "0.0.10" 762 | source = "registry+https://github.com/rust-lang/crates.io-index" 763 | dependencies = [ 764 | "jni-sys 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 765 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 766 | ] 767 | 768 | [[package]] 769 | name = "jni-sys" 770 | version = "0.3.0" 771 | source = "registry+https://github.com/rust-lang/crates.io-index" 772 | 773 | [[package]] 774 | name = "kernel32-sys" 775 | version = "0.2.2" 776 | source = "registry+https://github.com/rust-lang/crates.io-index" 777 | dependencies = [ 778 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 779 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 780 | ] 781 | 782 | [[package]] 783 | name = "khronos_api" 784 | version = "3.1.0" 785 | source = "registry+https://github.com/rust-lang/crates.io-index" 786 | 787 | [[package]] 788 | name = "kv-log-macro" 789 | version = "1.0.4" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | dependencies = [ 792 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 793 | ] 794 | 795 | [[package]] 796 | name = "lazy_static" 797 | version = "1.4.0" 798 | source = "registry+https://github.com/rust-lang/crates.io-index" 799 | 800 | [[package]] 801 | name = "lazycell" 802 | version = "1.2.1" 803 | source = "registry+https://github.com/rust-lang/crates.io-index" 804 | 805 | [[package]] 806 | name = "libc" 807 | version = "0.2.66" 808 | source = "registry+https://github.com/rust-lang/crates.io-index" 809 | 810 | [[package]] 811 | name = "libloading" 812 | version = "0.5.2" 813 | source = "registry+https://github.com/rust-lang/crates.io-index" 814 | dependencies = [ 815 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 816 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 817 | ] 818 | 819 | [[package]] 820 | name = "line_drawing" 821 | version = "0.7.0" 822 | source = "registry+https://github.com/rust-lang/crates.io-index" 823 | dependencies = [ 824 | "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 825 | ] 826 | 827 | [[package]] 828 | name = "locale_config" 829 | version = "0.3.0" 830 | source = "registry+https://github.com/rust-lang/crates.io-index" 831 | dependencies = [ 832 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 833 | "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 834 | "objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 835 | "regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 836 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 837 | ] 838 | 839 | [[package]] 840 | name = "lock_api" 841 | version = "0.3.3" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | dependencies = [ 844 | "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 845 | ] 846 | 847 | [[package]] 848 | name = "log" 849 | version = "0.4.8" 850 | source = "registry+https://github.com/rust-lang/crates.io-index" 851 | dependencies = [ 852 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 853 | ] 854 | 855 | [[package]] 856 | name = "malloc_buf" 857 | version = "0.0.6" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | dependencies = [ 860 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 861 | ] 862 | 863 | [[package]] 864 | name = "maybe-uninit" 865 | version = "2.0.0" 866 | source = "registry+https://github.com/rust-lang/crates.io-index" 867 | 868 | [[package]] 869 | name = "memchr" 870 | version = "2.3.0" 871 | source = "registry+https://github.com/rust-lang/crates.io-index" 872 | 873 | [[package]] 874 | name = "memmap" 875 | version = "0.7.0" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | dependencies = [ 878 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 879 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 880 | ] 881 | 882 | [[package]] 883 | name = "memoffset" 884 | version = "0.5.3" 885 | source = "registry+https://github.com/rust-lang/crates.io-index" 886 | dependencies = [ 887 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 888 | ] 889 | 890 | [[package]] 891 | name = "mio" 892 | version = "0.6.21" 893 | source = "registry+https://github.com/rust-lang/crates.io-index" 894 | dependencies = [ 895 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 896 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 897 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 898 | "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 899 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 900 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 901 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 902 | "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 903 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 904 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 905 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 906 | ] 907 | 908 | [[package]] 909 | name = "mio-extras" 910 | version = "2.0.6" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | dependencies = [ 913 | "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 914 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 915 | "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", 916 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 917 | ] 918 | 919 | [[package]] 920 | name = "mio-uds" 921 | version = "0.6.7" 922 | source = "registry+https://github.com/rust-lang/crates.io-index" 923 | dependencies = [ 924 | "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 925 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 926 | "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", 927 | ] 928 | 929 | [[package]] 930 | name = "miow" 931 | version = "0.2.1" 932 | source = "registry+https://github.com/rust-lang/crates.io-index" 933 | dependencies = [ 934 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 935 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 936 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 937 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 938 | ] 939 | 940 | [[package]] 941 | name = "net2" 942 | version = "0.2.33" 943 | source = "registry+https://github.com/rust-lang/crates.io-index" 944 | dependencies = [ 945 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 946 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 947 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 948 | ] 949 | 950 | [[package]] 951 | name = "nix" 952 | version = "0.14.1" 953 | source = "registry+https://github.com/rust-lang/crates.io-index" 954 | dependencies = [ 955 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 956 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 957 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 958 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 959 | "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 960 | ] 961 | 962 | [[package]] 963 | name = "nom" 964 | version = "4.2.3" 965 | source = "registry+https://github.com/rust-lang/crates.io-index" 966 | dependencies = [ 967 | "memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 968 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 969 | ] 970 | 971 | [[package]] 972 | name = "num-traits" 973 | version = "0.2.11" 974 | source = "registry+https://github.com/rust-lang/crates.io-index" 975 | dependencies = [ 976 | "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 977 | ] 978 | 979 | [[package]] 980 | name = "num_cpus" 981 | version = "1.11.1" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | dependencies = [ 984 | "hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 985 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 986 | ] 987 | 988 | [[package]] 989 | name = "num_enum" 990 | version = "0.2.3" 991 | source = "registry+https://github.com/rust-lang/crates.io-index" 992 | dependencies = [ 993 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 994 | "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 995 | "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", 996 | ] 997 | 998 | [[package]] 999 | name = "objc" 1000 | version = "0.2.7" 1001 | source = "registry+https://github.com/rust-lang/crates.io-index" 1002 | dependencies = [ 1003 | "malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 1004 | ] 1005 | 1006 | [[package]] 1007 | name = "objc-foundation" 1008 | version = "0.1.1" 1009 | source = "registry+https://github.com/rust-lang/crates.io-index" 1010 | dependencies = [ 1011 | "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1012 | "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1013 | "objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1014 | ] 1015 | 1016 | [[package]] 1017 | name = "objc_id" 1018 | version = "0.1.1" 1019 | source = "registry+https://github.com/rust-lang/crates.io-index" 1020 | dependencies = [ 1021 | "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1022 | ] 1023 | 1024 | [[package]] 1025 | name = "once_cell" 1026 | version = "1.3.0" 1027 | source = "registry+https://github.com/rust-lang/crates.io-index" 1028 | 1029 | [[package]] 1030 | name = "ordered-float" 1031 | version = "1.0.2" 1032 | source = "registry+https://github.com/rust-lang/crates.io-index" 1033 | dependencies = [ 1034 | "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 1035 | ] 1036 | 1037 | [[package]] 1038 | name = "osmesa-sys" 1039 | version = "0.1.2" 1040 | source = "registry+https://github.com/rust-lang/crates.io-index" 1041 | dependencies = [ 1042 | "shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1043 | ] 1044 | 1045 | [[package]] 1046 | name = "parking_lot" 1047 | version = "0.9.0" 1048 | source = "registry+https://github.com/rust-lang/crates.io-index" 1049 | dependencies = [ 1050 | "lock_api 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1051 | "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 1052 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1053 | ] 1054 | 1055 | [[package]] 1056 | name = "parking_lot" 1057 | version = "0.10.0" 1058 | source = "registry+https://github.com/rust-lang/crates.io-index" 1059 | dependencies = [ 1060 | "lock_api 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1061 | "parking_lot_core 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1062 | ] 1063 | 1064 | [[package]] 1065 | name = "parking_lot_core" 1066 | version = "0.6.2" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | dependencies = [ 1069 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1070 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 1071 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1072 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 1073 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1074 | "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 1075 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1076 | ] 1077 | 1078 | [[package]] 1079 | name = "parking_lot_core" 1080 | version = "0.7.0" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | dependencies = [ 1083 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1084 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 1085 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1086 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 1087 | "smallvec 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1088 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1089 | ] 1090 | 1091 | [[package]] 1092 | name = "peeking_take_while" 1093 | version = "0.1.2" 1094 | source = "registry+https://github.com/rust-lang/crates.io-index" 1095 | 1096 | [[package]] 1097 | name = "percent-encoding" 1098 | version = "2.1.0" 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" 1100 | 1101 | [[package]] 1102 | name = "pin-project-lite" 1103 | version = "0.1.2" 1104 | source = "registry+https://github.com/rust-lang/crates.io-index" 1105 | 1106 | [[package]] 1107 | name = "pin-utils" 1108 | version = "0.1.0-alpha.4" 1109 | source = "registry+https://github.com/rust-lang/crates.io-index" 1110 | 1111 | [[package]] 1112 | name = "pkg-config" 1113 | version = "0.3.17" 1114 | source = "registry+https://github.com/rust-lang/crates.io-index" 1115 | 1116 | [[package]] 1117 | name = "priority-queue" 1118 | version = "0.7.0" 1119 | source = "registry+https://github.com/rust-lang/crates.io-index" 1120 | dependencies = [ 1121 | "indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1122 | "take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1123 | ] 1124 | 1125 | [[package]] 1126 | name = "proc-macro2" 1127 | version = "0.4.30" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | dependencies = [ 1130 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1131 | ] 1132 | 1133 | [[package]] 1134 | name = "proc-macro2" 1135 | version = "1.0.7" 1136 | source = "registry+https://github.com/rust-lang/crates.io-index" 1137 | dependencies = [ 1138 | "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1139 | ] 1140 | 1141 | [[package]] 1142 | name = "quick-error" 1143 | version = "1.2.3" 1144 | source = "registry+https://github.com/rust-lang/crates.io-index" 1145 | 1146 | [[package]] 1147 | name = "quote" 1148 | version = "0.6.13" 1149 | source = "registry+https://github.com/rust-lang/crates.io-index" 1150 | dependencies = [ 1151 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1152 | ] 1153 | 1154 | [[package]] 1155 | name = "quote" 1156 | version = "1.0.2" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | dependencies = [ 1159 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 1160 | ] 1161 | 1162 | [[package]] 1163 | name = "rand_core" 1164 | version = "0.3.1" 1165 | source = "registry+https://github.com/rust-lang/crates.io-index" 1166 | dependencies = [ 1167 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1168 | ] 1169 | 1170 | [[package]] 1171 | name = "rand_core" 1172 | version = "0.4.2" 1173 | source = "registry+https://github.com/rust-lang/crates.io-index" 1174 | 1175 | [[package]] 1176 | name = "rand_os" 1177 | version = "0.1.3" 1178 | source = "registry+https://github.com/rust-lang/crates.io-index" 1179 | dependencies = [ 1180 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 1181 | "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1182 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1183 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1184 | "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1185 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1186 | ] 1187 | 1188 | [[package]] 1189 | name = "raw-window-handle" 1190 | version = "0.3.3" 1191 | source = "registry+https://github.com/rust-lang/crates.io-index" 1192 | dependencies = [ 1193 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1194 | ] 1195 | 1196 | [[package]] 1197 | name = "rdrand" 1198 | version = "0.4.0" 1199 | source = "registry+https://github.com/rust-lang/crates.io-index" 1200 | dependencies = [ 1201 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1202 | ] 1203 | 1204 | [[package]] 1205 | name = "redox_syscall" 1206 | version = "0.1.56" 1207 | source = "registry+https://github.com/rust-lang/crates.io-index" 1208 | 1209 | [[package]] 1210 | name = "redox_users" 1211 | version = "0.3.1" 1212 | source = "registry+https://github.com/rust-lang/crates.io-index" 1213 | dependencies = [ 1214 | "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1215 | "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1216 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 1217 | "rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1218 | ] 1219 | 1220 | [[package]] 1221 | name = "regex" 1222 | version = "1.3.3" 1223 | source = "registry+https://github.com/rust-lang/crates.io-index" 1224 | dependencies = [ 1225 | "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", 1226 | "memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1227 | "regex-syntax 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 1228 | "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1229 | ] 1230 | 1231 | [[package]] 1232 | name = "regex-syntax" 1233 | version = "0.6.13" 1234 | source = "registry+https://github.com/rust-lang/crates.io-index" 1235 | 1236 | [[package]] 1237 | name = "rust-argon2" 1238 | version = "0.5.1" 1239 | source = "registry+https://github.com/rust-lang/crates.io-index" 1240 | dependencies = [ 1241 | "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 1242 | "blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)", 1243 | "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 1244 | ] 1245 | 1246 | [[package]] 1247 | name = "rustc-demangle" 1248 | version = "0.1.16" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | 1251 | [[package]] 1252 | name = "rustc-hash" 1253 | version = "1.0.1" 1254 | source = "registry+https://github.com/rust-lang/crates.io-index" 1255 | dependencies = [ 1256 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1257 | ] 1258 | 1259 | [[package]] 1260 | name = "rustc_version" 1261 | version = "0.2.3" 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" 1263 | dependencies = [ 1264 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 1265 | ] 1266 | 1267 | [[package]] 1268 | name = "rusttype" 1269 | version = "0.7.9" 1270 | source = "registry+https://github.com/rust-lang/crates.io-index" 1271 | dependencies = [ 1272 | "rusttype 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", 1273 | ] 1274 | 1275 | [[package]] 1276 | name = "rusttype" 1277 | version = "0.8.2" 1278 | source = "registry+https://github.com/rust-lang/crates.io-index" 1279 | dependencies = [ 1280 | "approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1281 | "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1282 | "ordered-float 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1283 | "stb_truetype 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1284 | ] 1285 | 1286 | [[package]] 1287 | name = "ryu" 1288 | version = "1.0.2" 1289 | source = "registry+https://github.com/rust-lang/crates.io-index" 1290 | 1291 | [[package]] 1292 | name = "same-file" 1293 | version = "1.0.6" 1294 | source = "registry+https://github.com/rust-lang/crates.io-index" 1295 | dependencies = [ 1296 | "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1297 | ] 1298 | 1299 | [[package]] 1300 | name = "scopeguard" 1301 | version = "1.0.0" 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" 1303 | 1304 | [[package]] 1305 | name = "semver" 1306 | version = "0.9.0" 1307 | source = "registry+https://github.com/rust-lang/crates.io-index" 1308 | dependencies = [ 1309 | "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1310 | ] 1311 | 1312 | [[package]] 1313 | name = "semver-parser" 1314 | version = "0.7.0" 1315 | source = "registry+https://github.com/rust-lang/crates.io-index" 1316 | 1317 | [[package]] 1318 | name = "serde" 1319 | version = "1.0.104" 1320 | source = "registry+https://github.com/rust-lang/crates.io-index" 1321 | dependencies = [ 1322 | "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 1323 | ] 1324 | 1325 | [[package]] 1326 | name = "serde_derive" 1327 | version = "1.0.104" 1328 | source = "registry+https://github.com/rust-lang/crates.io-index" 1329 | dependencies = [ 1330 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 1331 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1332 | "syn 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", 1333 | ] 1334 | 1335 | [[package]] 1336 | name = "serde_json" 1337 | version = "1.0.44" 1338 | source = "registry+https://github.com/rust-lang/crates.io-index" 1339 | dependencies = [ 1340 | "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 1341 | "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1342 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 1343 | ] 1344 | 1345 | [[package]] 1346 | name = "shared_library" 1347 | version = "0.1.9" 1348 | source = "registry+https://github.com/rust-lang/crates.io-index" 1349 | dependencies = [ 1350 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1351 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1352 | ] 1353 | 1354 | [[package]] 1355 | name = "shlex" 1356 | version = "0.1.1" 1357 | source = "registry+https://github.com/rust-lang/crates.io-index" 1358 | 1359 | [[package]] 1360 | name = "slab" 1361 | version = "0.4.2" 1362 | source = "registry+https://github.com/rust-lang/crates.io-index" 1363 | 1364 | [[package]] 1365 | name = "smallvec" 1366 | version = "0.6.13" 1367 | source = "registry+https://github.com/rust-lang/crates.io-index" 1368 | dependencies = [ 1369 | "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1370 | ] 1371 | 1372 | [[package]] 1373 | name = "smallvec" 1374 | version = "1.1.0" 1375 | source = "registry+https://github.com/rust-lang/crates.io-index" 1376 | 1377 | [[package]] 1378 | name = "smithay-client-toolkit" 1379 | version = "0.6.4" 1380 | source = "registry+https://github.com/rust-lang/crates.io-index" 1381 | dependencies = [ 1382 | "andrew 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1383 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1384 | "dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1385 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1386 | "memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1387 | "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", 1388 | "wayland-client 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", 1389 | "wayland-protocols 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", 1390 | ] 1391 | 1392 | [[package]] 1393 | name = "smithay-clipboard" 1394 | version = "0.3.6" 1395 | source = "registry+https://github.com/rust-lang/crates.io-index" 1396 | dependencies = [ 1397 | "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", 1398 | "smithay-client-toolkit 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1399 | ] 1400 | 1401 | [[package]] 1402 | name = "stb_truetype" 1403 | version = "0.3.1" 1404 | source = "registry+https://github.com/rust-lang/crates.io-index" 1405 | dependencies = [ 1406 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1407 | ] 1408 | 1409 | [[package]] 1410 | name = "strsim" 1411 | version = "0.8.0" 1412 | source = "registry+https://github.com/rust-lang/crates.io-index" 1413 | 1414 | [[package]] 1415 | name = "syn" 1416 | version = "0.15.44" 1417 | source = "registry+https://github.com/rust-lang/crates.io-index" 1418 | dependencies = [ 1419 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1420 | "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 1421 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1422 | ] 1423 | 1424 | [[package]] 1425 | name = "syn" 1426 | version = "1.0.13" 1427 | source = "registry+https://github.com/rust-lang/crates.io-index" 1428 | dependencies = [ 1429 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 1430 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1431 | "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1432 | ] 1433 | 1434 | [[package]] 1435 | name = "synstructure" 1436 | version = "0.12.3" 1437 | source = "registry+https://github.com/rust-lang/crates.io-index" 1438 | dependencies = [ 1439 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 1440 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1441 | "syn 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", 1442 | "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1443 | ] 1444 | 1445 | [[package]] 1446 | name = "take_mut" 1447 | version = "0.2.2" 1448 | source = "registry+https://github.com/rust-lang/crates.io-index" 1449 | 1450 | [[package]] 1451 | name = "termcolor" 1452 | version = "1.1.0" 1453 | source = "registry+https://github.com/rust-lang/crates.io-index" 1454 | dependencies = [ 1455 | "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1456 | ] 1457 | 1458 | [[package]] 1459 | name = "textwrap" 1460 | version = "0.11.0" 1461 | source = "registry+https://github.com/rust-lang/crates.io-index" 1462 | dependencies = [ 1463 | "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1464 | ] 1465 | 1466 | [[package]] 1467 | name = "thread_local" 1468 | version = "1.0.1" 1469 | source = "registry+https://github.com/rust-lang/crates.io-index" 1470 | dependencies = [ 1471 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1472 | ] 1473 | 1474 | [[package]] 1475 | name = "tinyfiledialogs" 1476 | version = "3.3.9" 1477 | source = "registry+https://github.com/rust-lang/crates.io-index" 1478 | dependencies = [ 1479 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 1480 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1481 | ] 1482 | 1483 | [[package]] 1484 | name = "tinystr" 1485 | version = "0.3.2" 1486 | source = "registry+https://github.com/rust-lang/crates.io-index" 1487 | 1488 | [[package]] 1489 | name = "unic-langid-impl" 1490 | version = "0.7.2" 1491 | source = "registry+https://github.com/rust-lang/crates.io-index" 1492 | dependencies = [ 1493 | "tinystr 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1494 | ] 1495 | 1496 | [[package]] 1497 | name = "unic-locale" 1498 | version = "0.7.1" 1499 | source = "registry+https://github.com/rust-lang/crates.io-index" 1500 | dependencies = [ 1501 | "unic-langid-impl 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 1502 | "unic-locale-impl 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 1503 | ] 1504 | 1505 | [[package]] 1506 | name = "unic-locale-impl" 1507 | version = "0.7.1" 1508 | source = "registry+https://github.com/rust-lang/crates.io-index" 1509 | dependencies = [ 1510 | "tinystr 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1511 | "unic-langid-impl 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 1512 | ] 1513 | 1514 | [[package]] 1515 | name = "unicode-width" 1516 | version = "0.1.7" 1517 | source = "registry+https://github.com/rust-lang/crates.io-index" 1518 | 1519 | [[package]] 1520 | name = "unicode-xid" 1521 | version = "0.1.0" 1522 | source = "registry+https://github.com/rust-lang/crates.io-index" 1523 | 1524 | [[package]] 1525 | name = "unicode-xid" 1526 | version = "0.2.0" 1527 | source = "registry+https://github.com/rust-lang/crates.io-index" 1528 | 1529 | [[package]] 1530 | name = "vec_map" 1531 | version = "0.8.1" 1532 | source = "registry+https://github.com/rust-lang/crates.io-index" 1533 | 1534 | [[package]] 1535 | name = "version_check" 1536 | version = "0.1.5" 1537 | source = "registry+https://github.com/rust-lang/crates.io-index" 1538 | 1539 | [[package]] 1540 | name = "void" 1541 | version = "1.0.2" 1542 | source = "registry+https://github.com/rust-lang/crates.io-index" 1543 | 1544 | [[package]] 1545 | name = "walkdir" 1546 | version = "2.3.1" 1547 | source = "registry+https://github.com/rust-lang/crates.io-index" 1548 | dependencies = [ 1549 | "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 1550 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1551 | "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1552 | ] 1553 | 1554 | [[package]] 1555 | name = "wayland-client" 1556 | version = "0.23.6" 1557 | source = "registry+https://github.com/rust-lang/crates.io-index" 1558 | dependencies = [ 1559 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1560 | "calloop 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 1561 | "downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1562 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1563 | "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", 1564 | "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", 1565 | "wayland-commons 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", 1566 | "wayland-scanner 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", 1567 | "wayland-sys 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", 1568 | ] 1569 | 1570 | [[package]] 1571 | name = "wayland-commons" 1572 | version = "0.23.6" 1573 | source = "registry+https://github.com/rust-lang/crates.io-index" 1574 | dependencies = [ 1575 | "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", 1576 | "wayland-sys 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", 1577 | ] 1578 | 1579 | [[package]] 1580 | name = "wayland-protocols" 1581 | version = "0.23.6" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | dependencies = [ 1584 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1585 | "wayland-client 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", 1586 | "wayland-commons 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", 1587 | "wayland-scanner 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", 1588 | ] 1589 | 1590 | [[package]] 1591 | name = "wayland-scanner" 1592 | version = "0.23.6" 1593 | source = "registry+https://github.com/rust-lang/crates.io-index" 1594 | dependencies = [ 1595 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1596 | "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 1597 | "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 1598 | ] 1599 | 1600 | [[package]] 1601 | name = "wayland-sys" 1602 | version = "0.23.6" 1603 | source = "registry+https://github.com/rust-lang/crates.io-index" 1604 | dependencies = [ 1605 | "dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1606 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1607 | ] 1608 | 1609 | [[package]] 1610 | name = "which" 1611 | version = "3.1.0" 1612 | source = "registry+https://github.com/rust-lang/crates.io-index" 1613 | dependencies = [ 1614 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1615 | ] 1616 | 1617 | [[package]] 1618 | name = "winapi" 1619 | version = "0.2.8" 1620 | source = "registry+https://github.com/rust-lang/crates.io-index" 1621 | 1622 | [[package]] 1623 | name = "winapi" 1624 | version = "0.3.8" 1625 | source = "registry+https://github.com/rust-lang/crates.io-index" 1626 | dependencies = [ 1627 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1628 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1629 | ] 1630 | 1631 | [[package]] 1632 | name = "winapi-build" 1633 | version = "0.1.1" 1634 | source = "registry+https://github.com/rust-lang/crates.io-index" 1635 | 1636 | [[package]] 1637 | name = "winapi-i686-pc-windows-gnu" 1638 | version = "0.4.0" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | 1641 | [[package]] 1642 | name = "winapi-util" 1643 | version = "0.1.3" 1644 | source = "registry+https://github.com/rust-lang/crates.io-index" 1645 | dependencies = [ 1646 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1647 | ] 1648 | 1649 | [[package]] 1650 | name = "winapi-x86_64-pc-windows-gnu" 1651 | version = "0.4.0" 1652 | source = "registry+https://github.com/rust-lang/crates.io-index" 1653 | 1654 | [[package]] 1655 | name = "winit" 1656 | version = "0.20.0-alpha5" 1657 | source = "git+https://github.com/dvc94ch/winit?branch=android#1603d8b5bbf632419cec52d904eeb00ce124ba5b" 1658 | dependencies = [ 1659 | "android-ndk 0.0.6 (git+https://github.com/rust-windowing/android-ndk-rs)", 1660 | "android-ndk-sys 0.2.0 (git+https://github.com/rust-windowing/android-ndk-rs)", 1661 | "android_glue 0.2.3 (git+https://github.com/rust-windowing/android-rs-glue)", 1662 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1663 | "calloop 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 1664 | "cocoa 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)", 1665 | "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1666 | "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", 1667 | "core-video-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1668 | "dispatch 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1669 | "instant 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1670 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1671 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1672 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1673 | "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1674 | "parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 1675 | "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1676 | "raw-window-handle 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1677 | "smithay-client-toolkit 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1678 | "wayland-client 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", 1679 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1680 | "x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)", 1681 | ] 1682 | 1683 | [[package]] 1684 | name = "ws2_32-sys" 1685 | version = "0.2.1" 1686 | source = "registry+https://github.com/rust-lang/crates.io-index" 1687 | dependencies = [ 1688 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1689 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1690 | ] 1691 | 1692 | [[package]] 1693 | name = "x11-clipboard" 1694 | version = "0.5.1" 1695 | source = "registry+https://github.com/rust-lang/crates.io-index" 1696 | dependencies = [ 1697 | "xcb 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 1698 | ] 1699 | 1700 | [[package]] 1701 | name = "x11-dl" 1702 | version = "2.18.4" 1703 | source = "registry+https://github.com/rust-lang/crates.io-index" 1704 | dependencies = [ 1705 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1706 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1707 | "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1708 | "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", 1709 | ] 1710 | 1711 | [[package]] 1712 | name = "xcb" 1713 | version = "0.9.0" 1714 | source = "registry+https://github.com/rust-lang/crates.io-index" 1715 | dependencies = [ 1716 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1717 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1718 | ] 1719 | 1720 | [[package]] 1721 | name = "xdg" 1722 | version = "2.2.0" 1723 | source = "registry+https://github.com/rust-lang/crates.io-index" 1724 | 1725 | [[package]] 1726 | name = "xml-rs" 1727 | version = "0.8.0" 1728 | source = "registry+https://github.com/rust-lang/crates.io-index" 1729 | 1730 | [metadata] 1731 | "checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d" 1732 | "checksum andrew 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9b7f09f89872c2b6b29e319377b1fbe91c6f5947df19a25596e121cf19a7b35e" 1733 | "checksum android-ndk 0.0.6 (git+https://github.com/rust-windowing/android-ndk-rs)" = "" 1734 | "checksum android-ndk-sys 0.2.0 (git+https://github.com/rust-windowing/android-ndk-rs)" = "" 1735 | "checksum android_glue 0.2.3 (git+https://github.com/rust-windowing/android-rs-glue)" = "" 1736 | "checksum android_log-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b8052e2d8aabbb8d556d6abbcce2a22b9590996c5f849b9c7ce4544a2e3b984e" 1737 | "checksum android_logger 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8cbd542dd180566fad88fd2729a53a62a734843c626638006a9d63ec0688484e" 1738 | "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" 1739 | "checksum approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" 1740 | "checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee" 1741 | "checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" 1742 | "checksum async-std 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0bf6039b315300e057d198b9d3ab92ee029e31c759b7f1afae538145e6f18a3e" 1743 | "checksum async-task 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a9f534e76ca33eaa82bc8da5adb1b9e94a16f6fa217b78e9b400094dbbf844f9" 1744 | "checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 1745 | "checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" 1746 | "checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" 1747 | "checksum backtrace 0.3.42 (registry+https://github.com/rust-lang/crates.io-index)" = "b4b1549d804b6c73f4817df2ba073709e96e426f12987127c48e6745568c350b" 1748 | "checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" 1749 | "checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" 1750 | "checksum bindgen 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f1c85344eb535a31b62f0af37be84441ba9e7f0f4111eb0530f43d15e513fe57" 1751 | "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 1752 | "checksum blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" 1753 | "checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 1754 | "checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" 1755 | "checksum calloop 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7aa2097be53a00de9e8fc349fea6d76221f398f5c4fa550d420669906962d160" 1756 | "checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" 1757 | "checksum cexpr 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fce5b5fb86b0c57c20c834c1b412fd09c77c8a59b9473f86272709e78874cd1d" 1758 | "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 1759 | "checksum cgl 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" 1760 | "checksum clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)" = "81de550971c976f176130da4b2978d3b524eaa0fd9ac31f3ceb5ae1231fb4853" 1761 | "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" 1762 | "checksum clipboard-win 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e3a093d6fed558e5fe24c3dfc85a68bb68f1c824f440d3ba5aca189e2998786b" 1763 | "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 1764 | "checksum cocoa 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f29f7768b2d1be17b96158e3285951d366b40211320fb30826a76cb7a0da6400" 1765 | "checksum constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" 1766 | "checksum copypasta 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f1fcbfb17a41091ba8bad1233d0178fda058968a71998dde3f11189f0b4aa9da" 1767 | "checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" 1768 | "checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" 1769 | "checksum core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56790968ab1c8a1202a102e6de05fc6e1ec87da99e4e93e9a7d13efbfc1e95a9" 1770 | "checksum core-video-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8dc065219542086f72d1e9f7aadbbab0989e980263695d129d502082d063a9d0" 1771 | "checksum crossbeam-channel 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "acec9a3b0b3559f15aee4f90746c4e5e293b701c0f7d3925d24e01645267b68c" 1772 | "checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca" 1773 | "checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac" 1774 | "checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" 1775 | "checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" 1776 | "checksum dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3" 1777 | "checksum dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b" 1778 | "checksum dispatch 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e93ca78226c51902d7aa8c12c988338aadd9e85ed9c6be8aaac39192ff3605" 1779 | "checksum dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "77e51249a9d823a4cb79e3eca6dcd756153e8ed0157b6c04775d04bf1b13b76a" 1780 | "checksum downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "52ba6eb47c2131e784a38b726eb54c1e1484904f013e576a25354d0124161af6" 1781 | "checksum env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" 1782 | "checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" 1783 | "checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08" 1784 | "checksum flutter-engine 0.4.0 (git+https://github.com/flutter-rs/flutter-rs)" = "" 1785 | "checksum flutter-engine-sys 0.4.0 (git+https://github.com/flutter-rs/flutter-rs)" = "" 1786 | "checksum flutter-plugins 0.4.0 (git+https://github.com/flutter-rs/flutter-rs)" = "" 1787 | "checksum flutter-winit 0.4.0 (git+https://github.com/flutter-rs/flutter-rs)" = "" 1788 | "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1789 | "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1790 | "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" 1791 | "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 1792 | "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 1793 | "checksum futures-core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "79564c427afefab1dfb3298535b21eda083ef7935b4f0ecbfcb121f0aec10866" 1794 | "checksum futures-io 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e676577d229e70952ab25f3945795ba5b16d63ca794ca9d2c860e5595d20b5ff" 1795 | "checksum futures-task 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0bae52d6b29cf440e298856fec3965ee6fa71b06aa7495178615953fd669e5f9" 1796 | "checksum futures-timer 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a1de7508b218029b0f01662ed8f61b1c964b3ae99d6f25462d0f55a595109df6" 1797 | "checksum gl 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a94edab108827d67608095e269cf862e60d920f144a5026d3dbcfd8b877fb404" 1798 | "checksum gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ca98bbde17256e02d17336a6bdb5a50f7d0ccacee502e191d3e3d0ec2f96f84a" 1799 | "checksum gl_generator 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" 1800 | "checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" 1801 | "checksum glutin 0.22.0-alpha5 (git+https://github.com/dvc94ch/glutin?branch=android)" = "" 1802 | "checksum glutin_egl_sys 0.1.4 (git+https://github.com/dvc94ch/glutin?branch=android)" = "" 1803 | "checksum glutin_emscripten_sys 0.1.0 (git+https://github.com/dvc94ch/glutin?branch=android)" = "" 1804 | "checksum glutin_gles2_sys 0.1.3 (git+https://github.com/dvc94ch/glutin?branch=android)" = "" 1805 | "checksum glutin_glx_sys 0.1.5 (git+https://github.com/dvc94ch/glutin?branch=android)" = "" 1806 | "checksum glutin_wgl_sys 0.1.3 (git+https://github.com/dvc94ch/glutin?branch=android)" = "" 1807 | "checksum hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eff2656d88f158ce120947499e971d743c05dbcbed62e5bd2f38f1698bbc3772" 1808 | "checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" 1809 | "checksum indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b54058f0a6ff80b6803da8faf8997cde53872b38f4023728f6830b06cd3c0dc" 1810 | "checksum instant 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6c346c299e3fe8ef94dc10c2c0253d858a69aac1245157a3bf4125915d528caf" 1811 | "checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" 1812 | "checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" 1813 | "checksum jni-android-sys 0.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "c6803024e5d40312ee9dc67967497a7505ea24b8e5f05cb73951ff0b09a768e2" 1814 | "checksum jni-glue 0.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "abb534fa5773934d2580025e31b660656898f449366b7d3c8c51ba36a1609314" 1815 | "checksum jni-sys 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1816 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1817 | "checksum khronos_api 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" 1818 | "checksum kv-log-macro 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c54d9f465d530a752e6ebdc217e081a7a614b48cb200f6f0aee21ba6bc9aabb" 1819 | "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1820 | "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" 1821 | "checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" 1822 | "checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" 1823 | "checksum line_drawing 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5cc7ad3d82c845bdb5dde34ffdcc7a5fb4d2996e1e1ee0f19c33bc80e15196b9" 1824 | "checksum locale_config 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934" 1825 | "checksum lock_api 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "79b2de95ecb4691949fea4716ca53cdbcfccb2c612e19644a8bad05edcf9f47b" 1826 | "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" 1827 | "checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1828 | "checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" 1829 | "checksum memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3197e20c7edb283f87c071ddfc7a2cca8f8e0b888c242959846a6fce03c72223" 1830 | "checksum memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" 1831 | "checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" 1832 | "checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" 1833 | "checksum mio-extras 2.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" 1834 | "checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" 1835 | "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" 1836 | "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" 1837 | "checksum nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce" 1838 | "checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" 1839 | "checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" 1840 | "checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" 1841 | "checksum num_enum 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fae2a63210048cf77ceb6031b3f87ac69e4a68cfaacb17a0261e141c4bc8467b" 1842 | "checksum objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 1843 | "checksum objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" 1844 | "checksum objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" 1845 | "checksum once_cell 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f5941ec2d5ee5916c709580d71553b81a633df245bcc73c04dcbd62152ceefc4" 1846 | "checksum ordered-float 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "18869315e81473c951eb56ad5558bbc56978562d3ecfb87abb7a1e944cea4518" 1847 | "checksum osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" 1848 | "checksum parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "92e98c49ab0b7ce5b222f2cc9193fc4efe11c6d0bd4f648e374684a6857b1cfc" 1849 | "checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" 1850 | "checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" 1851 | "checksum parking_lot_core 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7582838484df45743c8434fbff785e8edf260c28748353d44bc0da32e0ceabf1" 1852 | "checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" 1853 | "checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 1854 | "checksum pin-project-lite 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e8822eb8bb72452f038ebf6048efa02c3fe22bf83f76519c9583e47fc194a422" 1855 | "checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" 1856 | "checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" 1857 | "checksum priority-queue 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5a03dfae8e64d4aa651415e2a4321f9f09f2e388a2f8bec36bed03bc22c0b687" 1858 | "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" 1859 | "checksum proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0319972dcae462681daf4da1adeeaa066e3ebd29c69be96c6abb1259d2ee2bcc" 1860 | "checksum quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" 1861 | "checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" 1862 | "checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" 1863 | "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" 1864 | "checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" 1865 | "checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" 1866 | "checksum raw-window-handle 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0a441a7a6c80ad6473bd4b74ec1c9a4c951794285bf941c2126f607c72e48211" 1867 | "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 1868 | "checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" 1869 | "checksum redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecedbca3bf205f8d8f5c2b44d83cd0690e39ee84b951ed649e9f1841132b66d" 1870 | "checksum regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b5508c1941e4e7cb19965abef075d35a9a8b5cdf0846f30b4050e9b55dc55e87" 1871 | "checksum regex-syntax 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e734e891f5b408a29efbf8309e656876276f49ab6a6ac208600b4419bd893d90" 1872 | "checksum rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca4eaef519b494d1f2848fc602d18816fed808a981aedf4f1f00ceb7c9d32cf" 1873 | "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" 1874 | "checksum rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7540fc8b0c49f096ee9c961cda096467dce8084bec6bdca2fc83895fd9b28cb8" 1875 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1876 | "checksum rusttype 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)" = "310942406a39981bed7e12b09182a221a29e0990f3e7e0c971f131922ed135d5" 1877 | "checksum rusttype 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "14a911032fb5791ccbeec9f28fdcb9bf0983b81f227bafdfd227c658d0731c8a" 1878 | "checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" 1879 | "checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1880 | "checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" 1881 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1882 | "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1883 | "checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" 1884 | "checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" 1885 | "checksum serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)" = "48c575e0cc52bdd09b47f330f646cf59afc586e9c4e3ccd6fc1f625b8ea1dad7" 1886 | "checksum shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" 1887 | "checksum shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" 1888 | "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" 1889 | "checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" 1890 | "checksum smallvec 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44e59e0c9fa00817912ae6e4e6e3c4fe04455e75699d06eedc7d85917ed8e8f4" 1891 | "checksum smithay-client-toolkit 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "93960e8975909fcb14cc755de93af2149d8b8f4eb368315537d40cfd0f324054" 1892 | "checksum smithay-clipboard 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9667a262ef7a9ff1c55a7e665cd3d36f9bc2809f94167b1fb3fc31423a83f8c0" 1893 | "checksum stb_truetype 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f77b6b07e862c66a9f3e62a07588fee67cd90a9135a2b942409f195507b4fb51" 1894 | "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 1895 | "checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" 1896 | "checksum syn 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1e4ff033220a41d1a57d8125eab57bf5263783dfdcc18688b1dacc6ce9651ef8" 1897 | "checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" 1898 | "checksum take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" 1899 | "checksum termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" 1900 | "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 1901 | "checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" 1902 | "checksum tinyfiledialogs 3.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "848eb50d6d21430349d82418c2244f611b1ad3e1c52c675320338b3102d06554" 1903 | "checksum tinystr 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4bac79c4b51eda1b090b1edebfb667821bbb51f713855164dc7cec2cb8ac2ba3" 1904 | "checksum unic-langid-impl 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "86ab4a5be993d5b9d082476a7dd7149c083cf63a72469e700c09e69784511957" 1905 | "checksum unic-locale 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ec253e715071d4d1eee20793d7dfd5316d3b2751bedb10587f04cf7946eaf6a2" 1906 | "checksum unic-locale-impl 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b871b3a4431c93433d7da3160bf2f95adeb5af69441830a04c17b2c4a9f252f" 1907 | "checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" 1908 | "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 1909 | "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" 1910 | "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" 1911 | "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" 1912 | "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" 1913 | "checksum walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" 1914 | "checksum wayland-client 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)" = "af1080ebe0efabcf12aef2132152f616038f2d7dcbbccf7b2d8c5270fe14bcda" 1915 | "checksum wayland-commons 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)" = "bb66b0d1a27c39bbce712b6372131c6e25149f03ffb0cd017cf8f7de8d66dbdb" 1916 | "checksum wayland-protocols 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)" = "6cc286643656742777d55dc8e70d144fa4699e426ca8e9d4ef454f4bf15ffcf9" 1917 | "checksum wayland-scanner 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93b02247366f395b9258054f964fe293ddd019c3237afba9be2ccbe9e1651c3d" 1918 | "checksum wayland-sys 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d94e89a86e6d6d7c7c9b19ebf48a03afaac4af6bc22ae570e9a24124b75358f4" 1919 | "checksum which 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5475d47078209a02e60614f7ba5e645ef3ed60f771920ac1906d7c1cc65024c8" 1920 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1921 | "checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" 1922 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 1923 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1924 | "checksum winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4ccfbf554c6ad11084fb7517daca16cfdcaccbdadba4fc336f032a8b12c2ad80" 1925 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1926 | "checksum winit 0.20.0-alpha5 (git+https://github.com/dvc94ch/winit?branch=android)" = "" 1927 | "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 1928 | "checksum x11-clipboard 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e5e937afd03b64b7be4f959cc044e09260a47241b71e56933f37db097bf7859d" 1929 | "checksum x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)" = "be65e1342a3baae65439cd03306778831a3d133b0d20243a7fb83fd5cf403c58" 1930 | "checksum xcb 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "62056f63138b39116f82a540c983cc11f1c90cd70b3d492a70c25eaa50bd22a6" 1931 | "checksum xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57" 1932 | "checksum xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5" 1933 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "flutter-app-demo" 3 | description = "Amazing desktop flutter app" 4 | version = "0.4.0" 5 | authors = ["juju ", "Sophie Tauchert "] 6 | edition = "2018" 7 | publish = false 8 | 9 | [dependencies] 10 | async-std = "1.4.0" 11 | env_logger = "0.7.1" 12 | flutter-engine = { git = "https://github.com/flutter-rs/flutter-rs" } 13 | flutter-plugins = { git = "https://github.com/flutter-rs/flutter-rs" } 14 | flutter-winit = { git = "https://github.com/flutter-rs/flutter-rs" } 15 | glutin = { git = "https://github.com/dvc94ch/glutin", branch = "android" } 16 | log = "0.4.8" 17 | 18 | [target.'cfg(target_os = "android")'.dependencies] 19 | android_glue = { git = "https://github.com/rust-windowing/android-rs-glue" } 20 | android_logger = "0.8.6" 21 | android-ndk = { git = "https://github.com/rust-windowing/android-ndk-rs" } 22 | jni-glue = "0.0.10" 23 | 24 | [target.'cfg(target_os = "android")'.dependencies.jni-android-sys] 25 | version = "0.0.10" 26 | features = ["api-level-18", "android-content-Context", "android-content-pm-ApplicationInfo"] 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # flutter-app-demo 2 | 3 | A desktop app built using flutter & rust. 4 | 5 | ![flutter-app-demo][flutter-app-demo] 6 | 7 | - Support Hot reload 8 | - MethodChannel, EventChannel 9 | - System dialogs 10 | - Clipboard support 11 | - Cross platform support, runs on mac, windows and linux 12 | 13 | # Install requirements 14 | 15 | - [Rust](https://www.rust-lang.org/tools/install) 16 | 17 | - [flutter sdk](https://flutter.io) 18 | 19 | # Develop 20 | 21 | To develop, install [cargo-flutter](https://github.com/flutter-rs/cargo-flutter). 22 | 23 | - Create a flutter-rs app 24 | 25 | `git clone https://github.com/flutter-rs/flutter-app-template` 26 | 27 | - Run a flutter-rs app in dev mode 28 | 29 | `cargo flutter run` 30 | 31 | - Bundle a flutter-rs app for distribution 32 | 33 | `cargo flutter --format appimage build --release` 34 | 35 | # License 36 | Copyright 2020 flutter-rs 37 | 38 | Permission is hereby granted, free of charge, to any person obtaining a copy of 39 | this software and associated documentation files (the "Software"), to deal in 40 | the Software without restriction, including without limitation the rights to 41 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 42 | of the Software, and to permit persons to whom the Software is furnished to do 43 | so, subject to the following conditions: 44 | 45 | The above copyright notice and this permission notice shall be included in all 46 | copies or substantial portions of the Software. 47 | 48 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 49 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 50 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 51 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 52 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 53 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 54 | SOFTWARE. 55 | 56 | [flutter-app-demo]: https://user-images.githubusercontent.com/741807/72479965-2c200580-37f6-11ea-8ddd-b91fa8759c94.png 57 | -------------------------------------------------------------------------------- /assets/fonts/MaterialIcons-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter-rs/flutter-app-demo/f94a0d7dc38c39cd8d5250313028ea5c4128640a/assets/fonts/MaterialIcons-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter-rs/flutter-app-demo/f94a0d7dc38c39cd8d5250313028ea5c4128640a/assets/fonts/Roboto-Regular.ttf -------------------------------------------------------------------------------- /assets/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter-rs/flutter-app-demo/f94a0d7dc38c39cd8d5250313028ea5c4128640a/assets/header.png -------------------------------------------------------------------------------- /assets/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | SVG Simple Icon Tiny 4 | Designed for the SVG Logo Contest in 2006 by Harvey Rayner. It is available under the Creative Commons license for those who have an SVG product or who are using SVG on their site. 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /lib/demos.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import './demos/method_channel.dart'; 3 | import './demos/event_channel.dart'; 4 | import './demos/file_dialog.dart'; 5 | import './demos/textfield.dart'; 6 | import './demos/keyboard.dart'; 7 | import './demos/window.dart'; 8 | import './demos/context_menu.dart'; 9 | 10 | class Demo { 11 | String name; 12 | String description; 13 | IconData icon; 14 | Function(BuildContext) builder; 15 | Demo(this.name, this.description, this.icon, this.builder); 16 | } 17 | 18 | List demos = [ 19 | Demo( 20 | 'MethodChannel', 21 | 'Use MethodChannel to invoke rust', 22 | Icons.toll, 23 | (BuildContext context) => MethodChannelDemo()), 24 | Demo( 25 | 'EventChannel', 26 | 'Use EventChannel to listen to rust stream', 27 | Icons.layers, 28 | (BuildContext context) => EventChannelDemo()), 29 | Demo( 30 | 'File Dialogs', 31 | 'Open system file dialogs', 32 | Icons.account_box, 33 | (BuildContext context) => FileDialogDemo()), 34 | Demo( 35 | 'TextField', 36 | 'TextField Demo', 37 | Icons.input, 38 | (BuildContext context) => TextFieldDemo()), 39 | Demo( 40 | 'Window', 41 | 'Control native window', 42 | Icons.laptop_windows, 43 | (BuildContext context) => WindowDemo()), 44 | Demo( 45 | 'KeyBoard', 46 | 'Listen to keyboard event', 47 | Icons.keyboard, 48 | (BuildContext context) => KeyBoardDemo()), 49 | Demo( 50 | 'Create Context Menu', 51 | 'Right click to create context menu', 52 | Icons.menu, 53 | (BuildContext context) => ContextMenuDemo()), 54 | ]; -------------------------------------------------------------------------------- /lib/demos/context_menu.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ContextMenuDemo extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return ContextMenuArea( 7 | items: [ 8 | PopupMenuItem( 9 | child: ListTile( 10 | leading: Icon(Icons.settings_applications), 11 | title: Text('Violin'), 12 | ), 13 | ), 14 | PopupMenuItem( 15 | child: ListTile( 16 | leading: Icon(Icons.beenhere), 17 | title: Text('Viola'), 18 | ), 19 | ), 20 | PopupMenuItem( 21 | child: ListTile( 22 | leading: Icon(Icons.gamepad), 23 | title: Text('Cello'), 24 | ), 25 | ), 26 | PopupMenuItem( 27 | child: ListTile( 28 | leading: Icon(Icons.local_gas_station), 29 | title: Text('Piano'), 30 | ), 31 | ), 32 | ], 33 | child: Container( 34 | color: Colors.transparent, 35 | child: Center( 36 | child: Text('Right click to show context menu'), 37 | ), 38 | ) 39 | ); 40 | } 41 | } 42 | 43 | class ContextMenuArea extends StatelessWidget { 44 | ContextMenuArea({List> items, Widget child}): child = child, items = items; 45 | 46 | final List> items; 47 | final Widget child; 48 | 49 | @override 50 | Widget build(BuildContext context) { 51 | return Listener( 52 | onPointerDown: (PointerDownEvent evt) { 53 | if (evt.buttons == 2) { 54 | var pos = evt.position; 55 | 56 | double width = MediaQuery.of(context).size.width; 57 | double height = MediaQuery.of(context).size.height; 58 | 59 | // RenderBox box = context.findRenderObject(); 60 | showMenu( 61 | context: context, 62 | position: RelativeRect.fromLTRB(pos.dx, pos.dy, width, height),// size.width, size.height), 63 | items: items, 64 | ); 65 | } 66 | }, 67 | child: child, 68 | ); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /lib/demos/event_channel.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter/services.dart'; 4 | import '../ui/widgets.dart' as UI; 5 | 6 | class EventChannelDemo extends StatefulWidget { 7 | @override 8 | _EventChannelDemoState createState() => _EventChannelDemoState(); 9 | } 10 | 11 | class _EventChannelDemoState extends State { 12 | EventChannel channel = EventChannel('rust/msg_stream'); 13 | List data = []; 14 | StreamSubscription sub; 15 | 16 | void listenStream() async { 17 | var stream = channel.receiveBroadcastStream(1234); 18 | sub = stream.listen(onData, onDone: onDone, onError: onError); 19 | 20 | setState(() { 21 | data = []; 22 | }); 23 | } 24 | 25 | onData(dynamic v) { 26 | print('onData $v'); 27 | setState(() { 28 | data.add(v); 29 | }); 30 | } 31 | 32 | onError(dynamic error) { 33 | print('onError $error'); 34 | } 35 | 36 | onDone() { 37 | print('onDone'); 38 | } 39 | 40 | cancelStream() async { 41 | if (sub != null) { 42 | await sub.cancel(); 43 | if (this.mounted) { 44 | setState(() { 45 | sub = null; 46 | }); 47 | } 48 | } 49 | } 50 | 51 | @override 52 | void dispose() { 53 | cancelStream(); 54 | super.dispose(); 55 | } 56 | 57 | @override 58 | Widget build(context) { 59 | var status; 60 | if (sub != null) { 61 | status = 'Listening'; 62 | } else { 63 | status = 'Not listening'; 64 | } 65 | 66 | return Scaffold( 67 | appBar: UI.AppBar(title: Text('EventChannel Demo')), 68 | body: ListView.builder( 69 | itemBuilder: (context, i) { 70 | return ListTile(title: Text(data[i].toString())); 71 | }, 72 | itemCount: data.length, 73 | ), 74 | bottomNavigationBar: BottomAppBar( 75 | child: Row(children: [ 76 | Padding( 77 | padding: const EdgeInsets.symmetric(horizontal: 8.0), 78 | child: RaisedButton(child: Text("Listen"), onPressed: () { 79 | listenStream(); 80 | }), 81 | ), 82 | Padding( 83 | padding: const EdgeInsets.symmetric(horizontal: 8.0), 84 | child: RaisedButton(child: Text("Cancel"), onPressed: () { 85 | cancelStream(); 86 | }), 87 | ), 88 | Padding( 89 | padding: const EdgeInsets.symmetric(horizontal: 8.0), 90 | child: Text('Status: $status'), 91 | ) 92 | ]) 93 | ), 94 | ); 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /lib/demos/file_dialog.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/services.dart'; 3 | import '../ui/widgets.dart' as UI; 4 | 5 | class FileDialogDemo extends StatefulWidget { 6 | @override 7 | _FileDialogDemoState createState() => _FileDialogDemoState(); 8 | } 9 | 10 | class _FileDialogDemoState extends State { 11 | MethodChannel channel = MethodChannel('flutter-rs/dialog', JSONMethodCodec()); 12 | 13 | String ret; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return Scaffold( 18 | appBar: UI.AppBar(title: Text('File Dialog Demo')), 19 | body: Center( 20 | child: Column( 21 | mainAxisSize: MainAxisSize.min, 22 | children: [ 23 | Wrap( 24 | spacing: 10.0, 25 | children: [ 26 | RaisedButton(child: Text('Open File'), onPressed: () async { 27 | var s = await channel.invokeMethod('open_file_dialog', { 28 | 'title': 'Open file', 29 | 'path': '/', 30 | 'filter': [['*.jpg', '*.png'], 'Image Files'], 31 | }); 32 | setState(() { 33 | ret = s; 34 | }); 35 | }), 36 | RaisedButton(child: Text('Message Box'), onPressed: () { 37 | channel.invokeMethod('message_box_ok', { 38 | 'title': 'Hello', 39 | 'message': 'How are you today?', 40 | }); 41 | }), 42 | ] 43 | ), 44 | Text(ret ?? ''), 45 | ], 46 | ), 47 | ) 48 | ); 49 | } 50 | } -------------------------------------------------------------------------------- /lib/demos/keyboard.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/services.dart'; 3 | import 'package:flutter/widgets.dart'; 4 | 5 | class ColorfulButton extends StatefulWidget { 6 | ColorfulButton({Key key}) : super(key: key); 7 | 8 | @override 9 | _ColorfulButtonState createState() => _ColorfulButtonState(); 10 | } 11 | 12 | class _ColorfulButtonState extends State { 13 | FocusNode _node; 14 | FocusAttachment _nodeAttachment; 15 | Color _color = Colors.white; 16 | 17 | @override 18 | void initState() { 19 | super.initState(); 20 | _node = FocusNode(debugLabel: 'Button'); 21 | _nodeAttachment = _node.attach(context, onKey: _handleKeyPress); 22 | } 23 | 24 | bool _handleKeyPress(FocusNode node, RawKeyEvent event) { 25 | if (event is RawKeyDownEvent) { 26 | print('Focus node ${node.debugLabel} got key event: ${event.logicalKey}'); 27 | if (event.logicalKey == LogicalKeyboardKey.keyR) { 28 | print('Changing color to red.'); 29 | setState(() { 30 | _color = Colors.red; 31 | }); 32 | return true; 33 | } else if (event.logicalKey == LogicalKeyboardKey.keyG) { 34 | print('Changing color to green.'); 35 | setState(() { 36 | _color = Colors.green; 37 | }); 38 | return true; 39 | } else if (event.logicalKey == LogicalKeyboardKey.keyB) { 40 | print('Changing color to blue.'); 41 | setState(() { 42 | _color = Colors.blue; 43 | }); 44 | return true; 45 | } 46 | } 47 | return false; 48 | } 49 | 50 | @override 51 | void dispose() { 52 | // The attachment will automatically be detached in dispose(). 53 | _node.dispose(); 54 | super.dispose(); 55 | } 56 | 57 | @override 58 | Widget build(BuildContext context) { 59 | _nodeAttachment.reparent(); 60 | return GestureDetector( 61 | onTap: () { 62 | if (_node.hasFocus) { 63 | setState(() { 64 | _node.unfocus(); 65 | }); 66 | } else { 67 | setState(() { 68 | _node.requestFocus(); 69 | }); 70 | } 71 | }, 72 | child: Center( 73 | child: Container( 74 | width: 400, 75 | height: 100, 76 | color: _node.hasFocus ? _color : Colors.white, 77 | alignment: Alignment.center, 78 | child: Text( 79 | _node.hasFocus ? "I'm in color! Press R,G,B!" : 'Press to focus'), 80 | ), 81 | ), 82 | ); 83 | } 84 | } 85 | 86 | class KeyBoardDemo extends StatelessWidget { 87 | @override 88 | Widget build(BuildContext context) { 89 | return Center( 90 | child: ColorfulButton() 91 | ); 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /lib/demos/method_channel.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/services.dart'; 3 | import '../ui/widgets.dart' as UI; 4 | 5 | class MethodChannelDemo extends StatefulWidget { 6 | @override 7 | _MethodChannelDemoState createState() => _MethodChannelDemoState(); 8 | } 9 | 10 | class _MethodChannelDemoState extends State { 11 | MethodChannel channel = MethodChannel('rust/calc'); 12 | 13 | int ret; 14 | String errorCode; 15 | String errorMessage; 16 | 17 | @override 18 | Widget build(context) { 19 | var label; 20 | if (ret != null) { 21 | label = Text('$ret'); 22 | } else if (errorCode != null) { 23 | label = Text('ErrorCode: $errorCode, ErrorMessage: $errorMessage', style: TextStyle( 24 | color: Colors.red 25 | )); 26 | } else { 27 | label = Text(''); 28 | } 29 | var theme = Theme.of(context).textTheme; 30 | return Scaffold( 31 | appBar: UI.AppBar(title: Text('MethodChannel Demo')), 32 | body: Center( 33 | child: Column( 34 | mainAxisSize: MainAxisSize.min, 35 | children: [ 36 | Text('Calc Fibonacci', style: theme.title), 37 | Container( 38 | width: 150, 39 | child: TextField( 40 | autofocus: true, 41 | textAlign: TextAlign.center, 42 | onChanged: (s) async { 43 | try { 44 | final int n = await channel.invokeMethod('fibonacci', s); 45 | setState(() { 46 | ret = n; 47 | errorCode = null; 48 | errorMessage = null; 49 | }); 50 | } on PlatformException catch (e) { 51 | setState(() { 52 | ret = null; 53 | errorCode = e.code; 54 | errorMessage = e.message; 55 | }); 56 | } 57 | }, 58 | ), 59 | ), 60 | label, 61 | ], 62 | ), 63 | ) 64 | ); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /lib/demos/textfield.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import '../ui/widgets.dart' as UI; 3 | 4 | class TextFieldDemo extends StatelessWidget { 5 | @override 6 | Widget build(BuildContext context) { 7 | return Scaffold( 8 | appBar: UI.AppBar(title: Text('TextField Demo')), 9 | body: Container( 10 | child: Padding( 11 | padding: const EdgeInsets.all(20.0), 12 | child: TextField( 13 | autofocus: true, 14 | decoration: InputDecoration( 15 | border: OutlineInputBorder(), 16 | ), 17 | maxLines: 20, 18 | ), 19 | ), 20 | ), 21 | ); 22 | } 23 | } -------------------------------------------------------------------------------- /lib/demos/window.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/services.dart'; 3 | import '../ui/widgets.dart' as UI; 4 | 5 | class WindowDemo extends StatelessWidget { 6 | final MethodChannel channel = MethodChannel('flutter-rs/window', JSONMethodCodec()); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return Scaffold( 11 | appBar: UI.AppBar(title: Text('Window Demo')), 12 | body: Center( 13 | child: Wrap( 14 | spacing: 10.0, 15 | children: [ 16 | RaisedButton( 17 | child: Text('Maximize'), 18 | onPressed: () { 19 | channel.invokeMethod('maximize'); 20 | }, 21 | ), 22 | RaisedButton( 23 | child: Text('Iconify'), 24 | onPressed: () { 25 | channel.invokeMethod('iconify'); 26 | }, 27 | ), 28 | RaisedButton( 29 | child: Text('Restore'), 30 | onPressed: () { 31 | channel.invokeMethod('restore'); 32 | }, 33 | ), 34 | RaisedButton( 35 | child: Text('Close'), 36 | onPressed: () { 37 | channel.invokeMethod('close'); 38 | }, 39 | ), 40 | ], 41 | ), 42 | ), 43 | ); 44 | } 45 | } -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/gestures.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter/services.dart'; 4 | import 'package:flutter/foundation.dart' show debugDefaultTargetPlatformOverride; 5 | import 'demos.dart'; 6 | import 'utils.dart'; 7 | 8 | 9 | void main() { 10 | // Override is necessary to prevent Unknown platform' flutter startup error. 11 | debugDefaultTargetPlatformOverride = TargetPlatform.android; 12 | runApp(MyApp()); 13 | } 14 | 15 | class MyApp extends StatelessWidget { 16 | // This widget is the root of your application. 17 | @override 18 | Widget build(BuildContext context) { 19 | return MaterialApp( 20 | title: 'Flutter Demo', 21 | // Since flutter tool is unable to generate AOT code for desktop, 22 | // our only option is to hide this banner and use JIT 23 | debugShowCheckedModeBanner: false, 24 | theme: getTheme(ThemeType.Base), 25 | initialRoute: '/', 26 | routes: { 27 | '/': (context) => Material(child: GetStartedPage()), 28 | '/demo': (context) => Material(child: DemoPage()), 29 | }, 30 | ); 31 | } 32 | } 33 | 34 | const CMD = 'psi create flutter_app'; 35 | 36 | class GetStartedPage extends StatelessWidget { 37 | 38 | Widget _buildBody(BuildContext context) { 39 | var theme = Theme.of(context); 40 | 41 | return Container( 42 | child: Column( 43 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 44 | crossAxisAlignment: CrossAxisAlignment.stretch, 45 | children: [ 46 | Expanded( 47 | flex: 5, 48 | child: Container( 49 | child: DecoratedBox( 50 | decoration: BoxDecoration( 51 | color: Colors.red, 52 | image: DecorationImage( 53 | fit: BoxFit.cover, 54 | alignment: Alignment.bottomCenter, 55 | image: AssetImage('assets/header.png'), 56 | ), 57 | ), 58 | ), 59 | ), 60 | ), 61 | Expanded( 62 | flex: 3, 63 | child: Container( 64 | color: Colors.blueGrey.shade700, 65 | child: Column( 66 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 67 | children: [ 68 | Center( 69 | child: SizedBox( 70 | width: 800, 71 | height: 100, 72 | child: Center( 73 | child: GetStartHelp(), 74 | ), 75 | ), 76 | ), 77 | Center( 78 | child: RaisedButton( 79 | color: theme.primaryColor, 80 | padding: EdgeInsets.all(14.0), 81 | textTheme: ButtonTextTheme.primary, 82 | child: Text('Show Demos', style:TextStyle( 83 | fontSize: 30 84 | )), 85 | onPressed: () { 86 | Navigator.pushNamed(context, '/demo'); 87 | }, 88 | ) 89 | ), 90 | ], 91 | ), 92 | ) 93 | ), 94 | ], 95 | ), 96 | ); 97 | } 98 | 99 | Widget build(BuildContext context) { 100 | return Scaffold( 101 | body: Builder( 102 | builder: (context) => _buildBody(context) 103 | ) 104 | ); 105 | } 106 | } 107 | 108 | class GetStartHelp extends StatelessWidget { 109 | final MethodChannel channel = MethodChannel('flutter/platform', JSONMethodCodec()); 110 | 111 | void _showToast(BuildContext context, String text) { 112 | final scaffold = Scaffold.of(context); 113 | scaffold.showSnackBar( 114 | SnackBar( 115 | content: Text(text), 116 | ), 117 | ); 118 | } 119 | 120 | copyText(BuildContext context) { 121 | channel.invokeMethod('Clipboard.setData', { 122 | 'text': CMD, 123 | }); 124 | _showToast(context, 'Copied to clipboard'); 125 | } 126 | 127 | @override 128 | Widget build(BuildContext context) { 129 | return Column( 130 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 131 | children: [ 132 | RichText( 133 | text: TextSpan( 134 | children: [ 135 | TextSpan( 136 | text: 'Create a project with: ', 137 | style: TextStyle( 138 | color: Colors.white.withAlpha(200), 139 | fontSize: 16, 140 | ), 141 | ), 142 | WidgetSpan( 143 | alignment: PlaceholderAlignment.middle, 144 | child: FlatButton( 145 | onPressed: () { 146 | copyText(context); 147 | }, 148 | color: Colors.redAccent, 149 | padding: EdgeInsets.all(8.0), 150 | child: Text(CMD, style: TextStyle( 151 | color: Colors.white, 152 | fontSize: 20, 153 | )), 154 | ) 155 | ), 156 | ] 157 | ) 158 | ), 159 | Text( 160 | 'psi can be installed by `pip install psi-cli`', 161 | style: TextStyle(color: Colors.white54) 162 | ) 163 | ], 164 | ); 165 | } 166 | } 167 | 168 | class DemoPage extends StatefulWidget { 169 | @override 170 | _DemoPageState createState() => _DemoPageState(); 171 | } 172 | 173 | class _DemoPageState extends State { 174 | int currentIdx = 0; 175 | 176 | Widget _buildList() { 177 | return ListView.builder(itemBuilder: (BuildContext context, int i) { 178 | return ListTile( 179 | leading: Icon(demos[i].icon), 180 | selected: i == currentIdx, 181 | title: Text(demos[i].name), 182 | subtitle: Text(demos[i].description), 183 | onTap: () { 184 | setState(() { 185 | currentIdx = i; 186 | }); 187 | }, 188 | ); 189 | }, itemCount: demos.length); 190 | } 191 | 192 | @override 193 | Widget build(BuildContext context) { 194 | return Row( 195 | children: [ 196 | SizedBox( 197 | width: 300, 198 | child: Container( 199 | decoration: BoxDecoration( 200 | color: Color.fromARGB(255, 50, 50, 50), 201 | ), 202 | child: Theme( 203 | data: getTheme(ThemeType.Inverted), 204 | child: _buildList() 205 | ), 206 | ), 207 | ), 208 | Expanded( 209 | child: demos[currentIdx].builder(context) 210 | ), 211 | ], 212 | ); 213 | } 214 | } 215 | -------------------------------------------------------------------------------- /lib/ui/widgets.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart' hide AppBar; 2 | import 'package:flutter/material.dart' as M show AppBar; 3 | import 'package:flutter/widgets.dart'; 4 | import 'package:flutter/services.dart'; 5 | 6 | class AppBar extends StatelessWidget implements PreferredSizeWidget { 7 | final MethodChannel channel = MethodChannel('flutter-rs/window', JSONMethodCodec()); 8 | final Widget title; 9 | 10 | AppBar({this.title}); 11 | 12 | void onPanStart(DragStartDetails details) async { 13 | channel.invokeMethod('start_drag'); 14 | } 15 | 16 | void onPanEnd(DragEndDetails details) { 17 | channel.invokeMethod('end_drag'); 18 | } 19 | 20 | Size get preferredSize { 21 | return Size.fromHeight(40.0); 22 | } 23 | 24 | @override 25 | Widget build(BuildContext context) { 26 | return M.AppBar( 27 | title: GestureDetector( 28 | behavior: HitTestBehavior.opaque, 29 | child: Container( 30 | child: Align( 31 | alignment: Alignment.centerLeft, 32 | child: title, 33 | ), 34 | ), 35 | onPanStart: onPanStart, 36 | onPanEnd: onPanEnd, 37 | ) 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/utils.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'dart:io' show Platform; 3 | 4 | enum ThemeType { 5 | Base, 6 | Inverted, 7 | } 8 | 9 | ThemeData getTheme(ThemeType type) { 10 | var fontFamily = getFont(); 11 | if (type == ThemeType.Inverted) { 12 | return ThemeData( 13 | primarySwatch: Colors.blue, 14 | accentColor: Colors.lightBlue.shade200, 15 | brightness: Brightness.dark, 16 | fontFamily: fontFamily, 17 | ); 18 | } 19 | 20 | return ThemeData( 21 | primarySwatch: Colors.blue, 22 | brightness: Brightness.light, 23 | fontFamily: fontFamily, 24 | ); 25 | } 26 | 27 | String getFont() { 28 | return null; 29 | } 30 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | archive: 5 | dependency: transitive 6 | description: 7 | name: archive 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "2.0.11" 11 | args: 12 | dependency: transitive 13 | description: 14 | name: args 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "1.5.2" 18 | async: 19 | dependency: transitive 20 | description: 21 | name: async 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "2.4.0" 25 | boolean_selector: 26 | dependency: transitive 27 | description: 28 | name: boolean_selector 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "1.0.5" 32 | charcode: 33 | dependency: transitive 34 | description: 35 | name: charcode 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "1.1.2" 39 | collection: 40 | dependency: transitive 41 | description: 42 | name: collection 43 | url: "https://pub.dartlang.org" 44 | source: hosted 45 | version: "1.14.11" 46 | convert: 47 | dependency: transitive 48 | description: 49 | name: convert 50 | url: "https://pub.dartlang.org" 51 | source: hosted 52 | version: "2.1.1" 53 | crypto: 54 | dependency: transitive 55 | description: 56 | name: crypto 57 | url: "https://pub.dartlang.org" 58 | source: hosted 59 | version: "2.1.3" 60 | flutter: 61 | dependency: "direct main" 62 | description: flutter 63 | source: sdk 64 | version: "0.0.0" 65 | flutter_test: 66 | dependency: "direct dev" 67 | description: flutter 68 | source: sdk 69 | version: "0.0.0" 70 | image: 71 | dependency: transitive 72 | description: 73 | name: image 74 | url: "https://pub.dartlang.org" 75 | source: hosted 76 | version: "2.1.4" 77 | matcher: 78 | dependency: transitive 79 | description: 80 | name: matcher 81 | url: "https://pub.dartlang.org" 82 | source: hosted 83 | version: "0.12.6" 84 | meta: 85 | dependency: transitive 86 | description: 87 | name: meta 88 | url: "https://pub.dartlang.org" 89 | source: hosted 90 | version: "1.1.8" 91 | path: 92 | dependency: transitive 93 | description: 94 | name: path 95 | url: "https://pub.dartlang.org" 96 | source: hosted 97 | version: "1.6.4" 98 | pedantic: 99 | dependency: transitive 100 | description: 101 | name: pedantic 102 | url: "https://pub.dartlang.org" 103 | source: hosted 104 | version: "1.8.0+1" 105 | petitparser: 106 | dependency: transitive 107 | description: 108 | name: petitparser 109 | url: "https://pub.dartlang.org" 110 | source: hosted 111 | version: "2.4.0" 112 | quiver: 113 | dependency: transitive 114 | description: 115 | name: quiver 116 | url: "https://pub.dartlang.org" 117 | source: hosted 118 | version: "2.0.5" 119 | sky_engine: 120 | dependency: transitive 121 | description: flutter 122 | source: sdk 123 | version: "0.0.99" 124 | source_span: 125 | dependency: transitive 126 | description: 127 | name: source_span 128 | url: "https://pub.dartlang.org" 129 | source: hosted 130 | version: "1.5.5" 131 | stack_trace: 132 | dependency: transitive 133 | description: 134 | name: stack_trace 135 | url: "https://pub.dartlang.org" 136 | source: hosted 137 | version: "1.9.3" 138 | stream_channel: 139 | dependency: transitive 140 | description: 141 | name: stream_channel 142 | url: "https://pub.dartlang.org" 143 | source: hosted 144 | version: "2.0.0" 145 | string_scanner: 146 | dependency: transitive 147 | description: 148 | name: string_scanner 149 | url: "https://pub.dartlang.org" 150 | source: hosted 151 | version: "1.0.5" 152 | term_glyph: 153 | dependency: transitive 154 | description: 155 | name: term_glyph 156 | url: "https://pub.dartlang.org" 157 | source: hosted 158 | version: "1.1.0" 159 | test_api: 160 | dependency: transitive 161 | description: 162 | name: test_api 163 | url: "https://pub.dartlang.org" 164 | source: hosted 165 | version: "0.2.11" 166 | typed_data: 167 | dependency: transitive 168 | description: 169 | name: typed_data 170 | url: "https://pub.dartlang.org" 171 | source: hosted 172 | version: "1.1.6" 173 | vector_math: 174 | dependency: transitive 175 | description: 176 | name: vector_math 177 | url: "https://pub.dartlang.org" 178 | source: hosted 179 | version: "2.0.8" 180 | xml: 181 | dependency: transitive 182 | description: 183 | name: xml 184 | url: "https://pub.dartlang.org" 185 | source: hosted 186 | version: "3.5.0" 187 | sdks: 188 | dart: ">=2.4.0 <3.0.0" 189 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_app_demo 2 | description: A new Flutter project. 3 | version: 1.0.0+1 4 | environment: 5 | sdk: ">=2.0.0 <3.0.0" 6 | 7 | dependencies: 8 | flutter: 9 | sdk: flutter 10 | 11 | dev_dependencies: 12 | flutter_test: 13 | sdk: flutter 14 | 15 | flutter: 16 | assets: 17 | - assets/ 18 | 19 | fonts: 20 | - family: Roboto 21 | fonts: 22 | - asset: assets/fonts/Roboto-Regular.ttf 23 | - family: MaterialIcons 24 | fonts: 25 | - asset: assets/fonts/MaterialIcons-Regular.ttf 26 | -------------------------------------------------------------------------------- /src/calc_channel.rs: -------------------------------------------------------------------------------- 1 | use flutter_plugins::prelude::*; 2 | 3 | const PLUGIN_NAME: &str = module_path!(); 4 | const CHANNEL_NAME: &str = "rust/calc"; 5 | 6 | pub struct CalcPlugin { 7 | handler: Arc>, 8 | } 9 | 10 | struct Handler; 11 | 12 | impl Default for CalcPlugin { 13 | fn default() -> Self { 14 | Self { 15 | handler: Arc::new(RwLock::new(Handler)), 16 | } 17 | } 18 | } 19 | 20 | impl Plugin for CalcPlugin { 21 | fn plugin_name() -> &'static str { 22 | PLUGIN_NAME 23 | } 24 | 25 | fn init_channels(&mut self, registrar: &mut ChannelRegistrar) { 26 | let method_handler = Arc::downgrade(&self.handler); 27 | registrar.register_channel(StandardMethodChannel::new(CHANNEL_NAME, method_handler)); 28 | } 29 | } 30 | 31 | impl MethodCallHandler for Handler { 32 | fn on_method_call( 33 | &mut self, 34 | call: MethodCall, 35 | _: FlutterEngine, 36 | ) -> Result { 37 | match call.method.as_str() { 38 | "fibonacci" => { 39 | if let Value::String(s) = call.args { 40 | if let Ok(n) = s.parse() { 41 | if n >= 0 { 42 | if let Some(v) = fibonacci(n) { 43 | Ok(Value::I64(v)) 44 | } else { 45 | Err(MethodCallError::CustomError { 46 | code: "100".to_owned(), 47 | message: "Overflow".to_owned(), 48 | details: Value::Null, 49 | }) 50 | } 51 | } else { 52 | Err(MethodCallError::CustomError { 53 | code: "101".to_owned(), 54 | message: "Minus!".to_owned(), 55 | details: Value::Null, 56 | }) 57 | } 58 | } else { 59 | Err(MethodCallError::CustomError { 60 | code: "102".to_owned(), 61 | message: "Not a number!".to_owned(), 62 | details: Value::Null, 63 | }) 64 | } 65 | } else { 66 | Err(MethodCallError::CustomError { 67 | code: "103".to_owned(), 68 | message: "Format error".to_owned(), 69 | details: Value::Null, 70 | }) 71 | } 72 | } 73 | _ => Err(MethodCallError::NotImplemented), 74 | } 75 | } 76 | } 77 | 78 | fn fibonacci(n: i64) -> Option { 79 | if n <= 0 { 80 | return Some(0); 81 | } 82 | let mut a = 0i64; 83 | let mut b = 1i64; 84 | let mut i = 0; 85 | while n > i + 1 { 86 | if let Some(t) = a.checked_add(b) { 87 | a = b; 88 | b = t; 89 | i += 1; 90 | } else { 91 | return None; 92 | } 93 | } 94 | Some(b) 95 | } 96 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use flutter_plugins::settings; 2 | use flutter_winit::FlutterWindow; 3 | use glutin::window::WindowBuilder; 4 | use std::path::Path; 5 | 6 | mod calc_channel; 7 | mod msg_stream_channel; 8 | 9 | #[cfg(not(target_os = "android"))] 10 | fn main() { 11 | env_logger::init(); 12 | 13 | let assets_dir = std::env::var("FLUTTER_ASSET_DIR").expect("FLUTTER_ASSET_DIR"); 14 | 15 | let mut args = Vec::with_capacity(1); 16 | 17 | if let Ok(snapshot) = std::env::var("FLUTTER_AOT_SNAPSHOT") { 18 | if Path::new(&snapshot).exists() { 19 | args.push(format!("--aot-shared-library-name={}", snapshot)); 20 | } 21 | } 22 | 23 | let window = WindowBuilder::new().with_title("Flutter App Demo"); 24 | let flutter = FlutterWindow::new(window).unwrap(); 25 | let flutter = flutter.with_resource_context().unwrap(); 26 | 27 | flutter 28 | .add_plugin(calc_channel::CalcPlugin::default()) 29 | .add_plugin(msg_stream_channel::MsgStreamPlugin::default()); 30 | 31 | flutter.start_engine(Path::new(&assets_dir), &args).unwrap(); 32 | 33 | flutter.with_plugin(|p: &settings::SettingsPlugin| { 34 | p.start_message() 35 | .set_text_scale_factor(1.0) 36 | .set_platform_brightness(settings::PlatformBrightness::Dark) 37 | .send(); 38 | }); 39 | 40 | flutter.run(); 41 | } 42 | 43 | #[cfg(target_os = "android")] 44 | fn main() { 45 | use android_logger::Config; 46 | use android_ndk::android_app::AndroidApp; 47 | use jni_android_sys::android::content::Context; 48 | use log::Level; 49 | use std::ffi::OsStr; 50 | use std::os::unix::ffi::OsStrExt; 51 | use std::path::PathBuf; 52 | 53 | android_logger::init_once( 54 | Config::default() 55 | .with_min_level(Level::Debug) 56 | .with_tag("flutter_app_demo"), 57 | ); 58 | 59 | let android_app = unsafe { AndroidApp::from_ptr(android_glue::get_android_app()) }; 60 | 61 | let assets_dir = PathBuf::from(OsStr::from_bytes( 62 | android_app.activity().internal_data_path().to_bytes(), 63 | )); 64 | 65 | let mut args = Vec::with_capacity(1); 66 | 67 | let vm = unsafe { jni_glue::VM::from_jni_local(&*android_app.activity().vm()) }; 68 | 69 | let snapshot = vm.with_env(|env| { 70 | let context = Context::new(env).unwrap(); 71 | let info = context.getApplicationInfo().unwrap().unwrap(); 72 | let lib_dir = info.nativeLibraryDir().unwrap().to_string().unwrap(); 73 | Path::new(&lib_dir).join("app.so") 74 | }); 75 | 76 | if snapshot.exists() { 77 | args.push(format!("--aot-shared-library-name={}", snapshot.display())); 78 | } else { 79 | std::fs::create_dir_all(&assets_dir).unwrap(); 80 | copy_asset( 81 | &android_app.activity().asset_manager(), 82 | b"kernel_blob.bin\0", 83 | &assets_dir.join("kernel_blob.bin"), 84 | ); 85 | } 86 | 87 | let window = WindowBuilder::new().with_title("Flutter App Demo"); 88 | let flutter = FlutterWindow::new(window).unwrap(); 89 | 90 | flutter 91 | .add_plugin(calc_channel::CalcPlugin::default()) 92 | .add_plugin(msg_stream_channel::MsgStreamPlugin::default()); 93 | 94 | flutter.start_engine(Path::new(&assets_dir), &args).unwrap(); 95 | 96 | flutter.with_plugin(|p: &settings::SettingsPlugin| { 97 | p.start_message() 98 | .set_text_scale_factor(1.0) 99 | .set_platform_brightness(settings::PlatformBrightness::Dark) 100 | .send(); 101 | }); 102 | 103 | flutter.run(); 104 | } 105 | 106 | #[cfg(target_os = "android")] 107 | fn copy_asset(asset_manager: &android_ndk::asset::AssetManager, asset: &[u8], path: &Path) { 108 | use std::ffi::CStr; 109 | use std::io::Read; 110 | 111 | let bytes: Vec = asset_manager 112 | .open(CStr::from_bytes_with_nul(asset).unwrap()) 113 | .unwrap() 114 | .bytes() 115 | .collect::>() 116 | .unwrap(); 117 | std::fs::write(path, bytes).unwrap(); 118 | } 119 | -------------------------------------------------------------------------------- /src/msg_stream_channel.rs: -------------------------------------------------------------------------------- 1 | use async_std::task; 2 | use flutter_plugins::prelude::*; 3 | use log::info; 4 | use std::sync::atomic::{AtomicBool, Ordering}; 5 | use std::time::Duration; 6 | 7 | const PLUGIN_NAME: &str = module_path!(); 8 | const CHANNEL_NAME: &str = "rust/msg_stream"; 9 | 10 | pub struct MsgStreamPlugin { 11 | channel: Weak, 12 | handler: Arc>, 13 | } 14 | 15 | impl Plugin for MsgStreamPlugin { 16 | fn plugin_name() -> &'static str { 17 | PLUGIN_NAME 18 | } 19 | 20 | fn init_channels(&mut self, registrar: &mut ChannelRegistrar) { 21 | let event_handler = Arc::downgrade(&self.handler); 22 | self.channel = registrar.register_channel(EventChannel::new(CHANNEL_NAME, event_handler)); 23 | } 24 | } 25 | 26 | impl Default for MsgStreamPlugin { 27 | fn default() -> Self { 28 | Self { 29 | channel: Weak::new(), 30 | handler: Arc::new(RwLock::new(Handler { 31 | stop_trigger: Default::default(), 32 | })), 33 | } 34 | } 35 | } 36 | 37 | struct Handler { 38 | stop_trigger: Arc, 39 | } 40 | 41 | impl EventHandler for Handler { 42 | fn on_listen(&mut self, args: Value, engine: FlutterEngine) -> Result { 43 | if let Value::I32(n) = args { 44 | info!("Random stream invoked with params {}", n); 45 | } 46 | 47 | let rt = engine.clone(); 48 | let stop_trigger = Arc::new(AtomicBool::new(false)); 49 | self.stop_trigger = stop_trigger.clone(); 50 | engine.run_in_background(async move { 51 | let msgs = vec![ 52 | "Hello?", 53 | "What's your name?", 54 | "How old are you?", 55 | "Maybe we can be friend together...", 56 | "Do you have a brother or sister?", 57 | ]; 58 | 59 | loop { 60 | for msg in msgs.iter() { 61 | task::sleep(Duration::from_secs(1)).await; 62 | if stop_trigger.load(Ordering::Relaxed) { 63 | break; 64 | } 65 | rt.with_channel(CHANNEL_NAME, move |channel| { 66 | if let Some(channel) = channel.try_as_method_channel() { 67 | let ret = Value::String(String::from(*msg)); 68 | channel.send_success_event(&ret); 69 | } 70 | }); 71 | } 72 | } 73 | }); 74 | Ok(Value::Null) 75 | } 76 | 77 | fn on_cancel(&mut self, _: FlutterEngine) -> Result { 78 | self.stop_trigger.store(true, Ordering::Relaxed); 79 | Ok(Value::Null) 80 | } 81 | } 82 | --------------------------------------------------------------------------------