├── .firebaserc ├── .github └── workflows │ ├── firebase-hosting-preview.yml │ ├── gh-pages.yml │ └── pr-review.yml ├── .gitignore ├── .metadata ├── .tool-versions ├── .vscode ├── launch.json └── settings.json ├── CONTRIBUTING.ja.md ├── CONTRIBUTING.md ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── null_safe_app │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── banner.png ├── discord_logo.svg ├── flutterkaigi-navbar_dark_logo.svg ├── flutterkaigi-navbar_light_logo.svg ├── flutterkaigi_logo.svg ├── github_logo.svg ├── medium_logo.svg ├── photo │ ├── katsummy.png │ └── okaryo.png ├── sponsor │ ├── autify.svg │ ├── chompy.svg │ ├── compass.svg │ ├── cyber_agent.svg │ ├── demaecan.svg │ ├── dena.svg │ ├── diverse.svg │ ├── enechain.svg │ ├── excite.svg │ ├── fastdoctor.svg │ ├── hokuto.svg │ ├── layerx.svg │ ├── m3.svg │ ├── studyplus.svg │ ├── tenx.svg │ ├── tokyu.svg │ ├── youtrust.svg │ └── yumemi.svg ├── twitter_logo.svg └── twitter_white.svg ├── firebase.json ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Podfile.lock ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings ├── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ └── LaunchImage.imageset │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ └── README.md │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h └── build │ └── Pods.build │ └── Release-iphonesimulator │ ├── Flutter.build │ └── dgph │ ├── Pods-Runner.build │ └── dgph │ └── url_launcher.build │ └── dgph ├── l10n.yaml ├── lib ├── data │ ├── link.dart │ ├── sponsor.dart │ └── staff.dart ├── entity │ └── timetable_entity.dart ├── gen │ └── assets.gen.dart ├── l10n │ ├── app_en.arb │ └── app_ja.arb ├── main.dart ├── pages │ └── index.dart ├── responsive_layout_builder.dart ├── router │ └── router_provider.dart ├── theme.dart ├── util │ └── scroll_util.dart └── widgets │ ├── background.dart │ ├── custom_button.dart │ ├── divider_with_title.dart │ ├── features.dart │ ├── footer.dart │ ├── sessions.dart │ ├── social.dart │ ├── sponsor.dart │ └── staff.dart ├── linux ├── .gitignore ├── CMakeLists.txt ├── flutter │ ├── CMakeLists.txt │ ├── generated_plugin_registrant.cc │ ├── generated_plugin_registrant.h │ └── generated_plugins.cmake ├── main.cc ├── my_application.cc └── my_application.h ├── macos ├── .gitignore ├── Flutter │ ├── Flutter-Debug.xcconfig │ ├── Flutter-Release.xcconfig │ └── GeneratedPluginRegistrant.swift ├── Podfile ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ └── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── app_icon_1024.png │ │ ├── app_icon_128.png │ │ ├── app_icon_16.png │ │ ├── app_icon_256.png │ │ ├── app_icon_32.png │ │ ├── app_icon_512.png │ │ └── app_icon_64.png │ ├── Base.lproj │ └── MainMenu.xib │ ├── Configs │ ├── AppInfo.xcconfig │ ├── Debug.xcconfig │ ├── Release.xcconfig │ └── Warnings.xcconfig │ ├── DebugProfile.entitlements │ ├── Info.plist │ ├── MainFlutterWindow.swift │ └── Release.entitlements ├── pubspec.lock ├── pubspec.yaml ├── test └── widget_test.dart └── web ├── assets ├── discord_logo.svg ├── flutter.png ├── flutterkaigi-navbar_dark_logo.svg ├── flutterkaigi-navbar_light_logo.svg ├── flutterkaigi_logo.svg ├── flutterkaigi_ogp.png ├── github_logo.svg ├── medium_logo.svg ├── twitter_logo.svg └── twitter_white.svg ├── favicon.png ├── icons ├── Icon-192.png └── Icon-512.png ├── index.html ├── manifest.json └── service-worker.js /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "flutterkaigi-2022-preview" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.github/workflows/firebase-hosting-preview.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to Firebase hosting 2 | 3 | on: pull_request 4 | 5 | jobs: 6 | build-deploy: 7 | runs-on: ubuntu-18.04 8 | 9 | steps: 10 | - uses: actions/checkout@master 11 | 12 | - name: Setup Flutter 13 | uses: subosito/flutter-action@v2 14 | 15 | - name: Install dependencies 16 | run: | 17 | flutter pub get 18 | 19 | - name: Transpile 20 | run: | 21 | flutter build web --web-renderer html 22 | 23 | - name: Deploy 24 | uses: FirebaseExtended/action-hosting-deploy@v0 25 | with: 26 | repoToken: "${{ secrets.GITHUB_TOKEN }}" 27 | firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT_FLUTTERKAIGI }}" 28 | projectId: flutterkaigi-2022-preview 29 | env: 30 | FIREBASE_CLI_PREVIEWS: hostingchannels 31 | -------------------------------------------------------------------------------- /.github/workflows/gh-pages.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to Github pages 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | build-deploy: 10 | runs-on: ubuntu-latest 11 | timeout-minutes: 10 12 | 13 | steps: 14 | - uses: actions/checkout@v3 15 | 16 | - name: Setup Flutter 17 | uses: subosito/flutter-action@v2 18 | with: 19 | channel: 'stable' 20 | cache: true 21 | 22 | - name: Install dependencies 23 | run: | 24 | flutter pub get 25 | 26 | - name: Transpile 27 | run: | 28 | flutter build web --web-renderer html --base-href "/2022/" 29 | 30 | - name: Deploy 31 | uses: peaceiris/actions-gh-pages@v3 32 | with: 33 | github_token: ${{ secrets.GITHUB_TOKEN }} 34 | publish_dir: ./build/web 35 | -------------------------------------------------------------------------------- /.github/workflows/pr-review.yml: -------------------------------------------------------------------------------- 1 | name: PR review 2 | 3 | on: 4 | pull_request: 5 | 6 | jobs: 7 | analyze: 8 | runs-on: ubuntu-latest 9 | timeout-minutes: 10 10 | 11 | steps: 12 | - uses: actions/checkout@v3 13 | - uses: subosito/flutter-action@v2 14 | with: 15 | channel: 'stable' 16 | cache: true 17 | - name: Install dependencies 18 | run: | 19 | flutter pub get 20 | - uses: invertase/github-action-dart-analyzer@v1 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | **/ios/Flutter/.last_build_id 26 | .dart_tool/ 27 | .firebase 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | .fvm 35 | 36 | # Web related 37 | lib/generated_plugin_registrant.dart 38 | 39 | # Symbolication related 40 | app.*.symbols 41 | 42 | # Obfuscation related 43 | app.*.map.json 44 | 45 | # Exceptions to above rules. 46 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 47 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 8badf93609b35c107f9ee71f32377232ac4ee72f 8 | channel: master 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /.tool-versions: -------------------------------------------------------------------------------- 1 | flutter 3.3.0-stable -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "confwebsite2022", 9 | "request": "launch", 10 | "type": "dart" 11 | }, 12 | { 13 | "name": "confwebsite2022 (profile mode)", 14 | "request": "launch", 15 | "type": "dart", 16 | "flutterMode": "profile" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "git.ignoreLimitWarning": true, 3 | 4 | // "dart.flutterSdkPath": ".fvm/flutter_sdk", 5 | // Remove .fvm files from search 6 | "search.exclude": { 7 | "**/.fvm": true, 8 | "**/.history": true, 9 | "**/*.ast.gql.dart": true, 10 | "**/*.req.gql.dart": true, 11 | "**/*.data.gql.dart": true, 12 | "**/*.var.gql.dart": true, 13 | "**/*.gql.g.dart": true 14 | }, 15 | // Remove from file watching 16 | "files.watcherExclude": { 17 | "**/.fvm": true, 18 | "**/.history": true 19 | }, 20 | 21 | // @see https://dartcode.org/docs/settings/#dartlinelength 22 | "dart.lineLength": 80, 23 | 24 | // @see https://dartcode.org/docs/recommended-settings/ 25 | "[dart]": { 26 | // Automatically format code on save and during typing of certain characters 27 | // (like `;` and `}`). 28 | "editor.formatOnSave": true, 29 | "editor.formatOnType": true, 30 | 31 | "editor.codeActionsOnSave": { 32 | "source.organizeImports": true, 33 | }, 34 | 35 | // Draw a guide line at 80 characters, where Dart's formatting will wrap code. 36 | "editor.rulers": [80], 37 | 38 | // Disables built-in highlighting of words that match your selection. Without 39 | // this, all instances of the selected text will be highlighted, interfering 40 | // with Dart's ability to highlight only exact references to the selected variable. 41 | "editor.selectionHighlight": false, 42 | 43 | // By default, VS Code prevents code completion from popping open when in 44 | // "snippet mode" (editing placeholders in inserted code). Setting this option 45 | // to `false` stops that and allows completion to open as normal, as if you 46 | // weren't in a snippet placeholder. 47 | "editor.suggest.snippetsPreventQuickSuggestions": false, 48 | 49 | // By default, VS Code will pre-select the most recently used item from code 50 | // completion. This is usually not the most relevant item. 51 | // 52 | // "first" will always select top item 53 | // "recentlyUsedByPrefix" will filter the recently used items based on the 54 | // text immediately preceding where completion was invoked. 55 | "editor.suggestSelection": "first", 56 | 57 | // Allows pressing to complete snippets such as `for` even when the 58 | // completion list is not visible. 59 | "editor.tabCompletion": "onlySnippets", 60 | 61 | // By default, VS Code will populate code completion with words found in the 62 | // current file when a language service does not provide its own completions. 63 | // This results in code completion suggesting words when editing comments and 64 | // strings. This setting will prevent that. 65 | "editor.wordBasedSuggestions": false, 66 | 67 | "editor.tabSize": 2, 68 | "editor.insertSpaces": true, 69 | "editor.detectIndentation": false, 70 | "editor.suggest.insertMode": "replace", 71 | 72 | "editor.wordWrap": "wordWrapColumn", 73 | "editor.wordWrapColumn": 80 74 | }, 75 | "editor.codeActionsOnSave": { 76 | "source.organizeImports": true 77 | }, 78 | "cSpell.words": [ 79 | "confwebsite", 80 | "flutterkaigi", 81 | "Fortee", 82 | "Handson", 83 | "Kaigi", 84 | "mockito", 85 | "riverpod", 86 | "ultrawide" 87 | ], 88 | 89 | "peacock.color": "#03a9f4", 90 | "workbench.colorCustomizations": { 91 | "activityBar.activeBackground": "#027DFD", 92 | "activityBar.activeBorder": "#422c74", 93 | "activityBar.background": "#027DFD", 94 | "activityBar.foreground": "#e7e7e7", 95 | "activityBar.inactiveForeground": "#e7e7e7", 96 | "activityBarBadge.background": "#F25D50", 97 | "activityBarBadge.foreground": "#e7e7e7", 98 | "editorGroup.border": "#027DFD", 99 | "panel.border": "#027DFD", 100 | "sash.hoverBorder": "#027DFD", 101 | "sideBar.border": "#027DFD", 102 | "statusBar.background": "#0553B1", 103 | "statusBar.foreground": "#b2b2b2", 104 | "statusBarItem.hoverBackground": "#027DFD", 105 | "statusBarItem.remoteBackground": "#0553B1", 106 | "statusBarItem.remoteForeground": "#b2b2b2", 107 | "titleBar.activeBackground": "#042B59", 108 | "titleBar.activeForeground": "#b2b2b2", 109 | "titleBar.inactiveBackground": "#042B59", 110 | "titleBar.inactiveForeground": "#b2b2b2" 111 | } 112 | } -------------------------------------------------------------------------------- /CONTRIBUTING.ja.md: -------------------------------------------------------------------------------- 1 | # コントリビュート 2 | 3 | あなたのコントリビュートをお待ちしております! 4 | 5 | ## コントリビュート方法 6 | 7 | ### タスクの見つけ方 8 | 9 | タスク管理に GitHub Issue を使っています。こちらでコントリビュートしたい Issue をお探しください。 Issue がない Pull Request でも大丈夫です。その場合は Pull Request に理由、原因、解決策などの詳細をご記入ください。 10 | 11 | ### コントリビュートの始め方 12 | 13 | もし取り組みたいタスクを見つけたら、他の人と重複して作業しないようにするため Issue に "🙋" などのコメントをしてください。なるべく早くいただいたコメントにリアクションしますが Issue にコメントを書いたらタスクを始めていただいて構いません。 14 | 15 | ## ウェブサイト FlutterKaigi.jp の改善に貢献する 16 | 17 | ウェブサイト FlutterKaigi.jp (以下・当ウェブサイト) の改善にご協力いただく際の方法について説明します。 18 | 19 | ### バグを報告する 20 | 21 | 当ウェブサイトの改善に貢献する方法の中でも、非常に簡単かつ効果的なものとして、バグの報告があります。 22 | 23 | ### コーディングに貢献する 24 | 25 | FlutterKaigi 実行委員会はコード修正案の投稿を歓迎しており精力的に審査しています。ぜひソースコードをチェックアウトして特定のバグや機能を対象とするコード修正案をご投稿ください。 26 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution 2 | 3 | We look forward to your contribution! 4 | 5 | ## How to contribute 6 | 7 | ### How to find a task 8 | 9 | We are using GitHub Issue for task management. Please find the Issue you want to contribute here. You can also make Pull Requests without relation to any issues. In this case, please provide details such as the reason, cause, and solution in the Pull Request. 10 | 11 | ### How to get started with a contribution 12 | 13 | If you find a task you want to work on, comment on the Issue, such as "🙋", to avoid duplicating work with others. We will react to the comments you received as soon as possible, but you can start the task after writing a comment on the Issue. 14 | 15 | ## Contribute to improving the website FlutterKaigi.jp 16 | 17 | We will explain how to help improve the website FlutterKaigi.jp (referred to as "this website" below). 18 | 19 | ### Report a bug 20 | 21 | One of the easiest and most effective ways to help improve this website is to report a bug. 22 | 23 | ### Contribute to coding 24 | 25 | The FlutterKaigi Executive Committee welcomes submissions of proposed code amendments and is vigorously reviewing them. Please check out the source code and post any code fixes that target specific bugs or features. 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FlutterKaigi 2022 official website 2 | 3 | ## Development 4 | 5 | We will deliver sessions related to FlutterKaigi in accordance with [Figma](https://www.figma.com/file/3jxi4kkyBLUNw1lHfFGHzs/FlutterKaigi?node-id=109%3A49). 6 | 7 | ### Contributing 8 | 9 | We always welcome all contributions! See [CONTRIBUTING.md](./CONTRIBUTING.md) for more information. 10 | 11 | For Japanese, please see [CONTRIBUTING.ja.md](./CONTRIBUTING.ja.md). 12 | 13 | ### Tech Stacks 14 | 15 | - [Flutter](https://flutter.dev/) 16 | - [Flutter Web](https://docs.flutter.dev/deployment/web) 17 | - [Github Pages](https://docs.github.com/ja/pages/getting-started-with-github-pages/about-github-pages) 18 | - [Codemagic Static Pages](https://docs.codemagic.io/flutter-publishing/publishing-to-codemagic-static-pages/) 19 | 20 | ## Thanks 21 | 22 | Thank you for contributing! 23 | 24 | ### Contributors 25 | 26 | GitHub: [Contributors](https://github.com/FlutterKaigi/confwebsite2022/graphs/contributors) 27 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:flutter_lints/flutter.yaml 2 | 3 | analyzer: 4 | strong-mode: 5 | implicit-casts: true 6 | implicit-dynamic: true 7 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion 29 30 | 31 | sourceSets { 32 | main.java.srcDirs += 'src/main/kotlin' 33 | } 34 | 35 | lintOptions { 36 | disable 'InvalidPackage' 37 | } 38 | 39 | defaultConfig { 40 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 41 | applicationId "com.example.confwebsite2022" 42 | minSdkVersion 16 43 | targetSdkVersion 29 44 | versionCode flutterVersionCode.toInteger() 45 | versionName flutterVersionName 46 | } 47 | 48 | buildTypes { 49 | release { 50 | // TODO: Add your own signing config for the release build. 51 | // Signing with the debug keys for now, so `flutter run --release` works. 52 | signingConfig signingConfigs.debug 53 | } 54 | } 55 | } 56 | 57 | flutter { 58 | source '../..' 59 | } 60 | 61 | dependencies { 62 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 63 | } 64 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 13 | 17 | 21 | 26 | 30 | 31 | 32 | 33 | 34 | 35 | 37 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/null_safe_app/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.confwebsite2022 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.50' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.5.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | jcenter() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | android.enableR8=true 5 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip 7 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /assets/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/assets/banner.png -------------------------------------------------------------------------------- /assets/discord_logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/flutterkaigi-navbar_dark_logo.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/flutterkaigi_logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /assets/github_logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/medium_logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/photo/katsummy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/assets/photo/katsummy.png -------------------------------------------------------------------------------- /assets/photo/okaryo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/assets/photo/okaryo.png -------------------------------------------------------------------------------- /assets/sponsor/autify.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | logo_default_bk 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /assets/sponsor/chompy.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/sponsor/compass.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/sponsor/cyber_agent.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 20 | 23 | 26 | 27 | 28 | 38 | 43 | 45 | 48 | 51 | 55 | 56 | 59 | 63 | 64 | 67 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /assets/sponsor/dena.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 65 | -------------------------------------------------------------------------------- /assets/sponsor/enechain.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /assets/sponsor/studyplus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /assets/sponsor/tenx.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | -------------------------------------------------------------------------------- /assets/sponsor/tokyu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /assets/sponsor/youtrust.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 20 | 23 | 26 | 27 | 28 | 38 | 43 | 45 | 48 | 51 | 55 | 56 | 59 | 63 | 64 | 67 | 71 | 72 | 75 | 79 | 80 | 83 | 87 | 88 | 91 | 95 | 96 | 99 | 103 | 104 | 107 | 111 | 112 | 115 | 119 | 120 | 123 | 127 | 128 | 129 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /assets/sponsor/yumemi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 38 | 39 | -------------------------------------------------------------------------------- /assets/twitter_logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/twitter_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 17 | -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "hosting": { 3 | "public": "build/web", 4 | "ignore": [ 5 | "firebase.json", 6 | "**/.*", 7 | "**/node_modules/**" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | end 36 | 37 | post_install do |installer| 38 | installer.pods_project.targets.each do |target| 39 | flutter_additional_ios_build_settings(target) 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Flutter (1.0.0) 3 | - url_launcher (0.0.1): 4 | - Flutter 5 | 6 | DEPENDENCIES: 7 | - Flutter (from `Flutter`) 8 | - url_launcher (from `.symlinks/plugins/url_launcher/ios`) 9 | 10 | EXTERNAL SOURCES: 11 | Flutter: 12 | :path: Flutter 13 | url_launcher: 14 | :path: ".symlinks/plugins/url_launcher/ios" 15 | 16 | SPEC CHECKSUMS: 17 | Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c 18 | url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef 19 | 20 | PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c 21 | 22 | COCOAPODS: 1.10.1 23 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | confwebsite2022 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /ios/build/Pods.build/Release-iphonesimulator/Flutter.build/dgph: -------------------------------------------------------------------------------- 1 | DGPH1.04 Jun 8 202114:00:05/Usersyuukitprojectconfwebsite2021iosPods -------------------------------------------------------------------------------- /ios/build/Pods.build/Release-iphonesimulator/Pods-Runner.build/dgph: -------------------------------------------------------------------------------- 1 | DGPH1.04 Jun 8 202114:00:05/Usersyuukitprojectconfwebsite2021iosPods -------------------------------------------------------------------------------- /ios/build/Pods.build/Release-iphonesimulator/url_launcher.build/dgph: -------------------------------------------------------------------------------- 1 | DGPH1.04 Jun 8 202114:00:05/Usersyuukitprojectconfwebsite2021iosPods -------------------------------------------------------------------------------- /l10n.yaml: -------------------------------------------------------------------------------- 1 | arb-dir: lib/l10n 2 | template-arb-file: app_ja.arb 3 | output-localization-file: app_localizations.dart 4 | -------------------------------------------------------------------------------- /lib/data/link.dart: -------------------------------------------------------------------------------- 1 | final kSocialLinks = >[ 2 | { 3 | 'name': 'twitter_logo', 4 | 'title': 'Twitter', 5 | 'url': 'https://twitter.com/FlutterKaigi', 6 | }, 7 | { 8 | 'name': 'github_logo', 9 | 'title': 'Github', 10 | 'url': 'https://github.com/FlutterKaigi', 11 | }, 12 | { 13 | 'name': 'discord_logo', 14 | 'title': 'Discord', 15 | 'url': 'https://discord.gg/Nr7H8JTJSF', 16 | }, 17 | { 18 | 'name': 'medium_logo', 19 | 'title': 'Medium', 20 | 'url': 'https://medium.com/flutterkaigi', 21 | }, 22 | ]; 23 | 24 | final kPastEvents = >[ 25 | { 26 | 'name': 'Flutter.dev', 27 | 'url': 'https://flutter.dev/', 28 | }, 29 | { 30 | 'name': 'FlutterKaigi 2021', 31 | 'url': 'https://flutterkaigi.jp/2021', 32 | }, 33 | ]; 34 | -------------------------------------------------------------------------------- /lib/data/sponsor.dart: -------------------------------------------------------------------------------- 1 | import 'package:confwebsite2022/gen/assets.gen.dart'; 2 | 3 | final kPlatinumSponsorList = [ 4 | { 5 | 'name': '株式会社ゆめみ', 6 | 'logo': Assets.sponsor.yumemi, 7 | 'url': 'https://www.yumemi.co.jp/', 8 | }, 9 | { 10 | 'name': '株式会社10X', 11 | 'logo': Assets.sponsor.tenx, 12 | 'url': 'https://10x.co.jp/', 13 | }, 14 | { 15 | 'name': '株式会社HOKUTO', 16 | 'logo': Assets.sponsor.hokuto, 17 | 'url': 'https://corp.hokuto.app/', 18 | }, 19 | ]; 20 | 21 | final kGoldSponsorList = [ 22 | { 23 | 'name': 'エムスリー株式会社', 24 | 'logo': Assets.sponsor.m3, 25 | 'url': 'https://jobs.m3.com/product/', 26 | }, 27 | { 28 | 'name': '株式会社COMPASS', 29 | 'logo': Assets.sponsor.compass, 30 | 'url': 'https://qubena.com/', 31 | }, 32 | { 33 | 'name': '株式会社出前館', 34 | 'logo': Assets.sponsor.demaecan, 35 | 'url': 'https://corporate.demae-can.com/', 36 | }, 37 | { 38 | 'name': 'オーティファイ株式会社', 39 | 'logo': Assets.sponsor.autify, 40 | 'url': 'https://autify.com/ja/mobile', 41 | }, 42 | { 43 | 'name': '株式会社サイバーエージェント', 44 | 'logo': Assets.sponsor.cyberAgent, 45 | 'url': 'https://www.cyberagent.co.jp/', 46 | }, 47 | { 48 | 'name': '株式会社ディー・エヌ・エー', 49 | 'logo': Assets.sponsor.dena, 50 | 'url': 'https://dena.com/', 51 | }, 52 | ]; 53 | 54 | final kSilverSponsorList = [ 55 | { 56 | 'name': '株式会社Diverse', 57 | 'logo': Assets.sponsor.diverse, 58 | 'url': 'https://diverse-inc.co.jp/', 59 | }, 60 | { 61 | 'name': 'enechain', 62 | 'logo': Assets.sponsor.enechain, 63 | 'url': 'https://enechain.co.jp/', 64 | }, 65 | { 66 | 'name': '東急株式会社', 67 | 'logo': Assets.sponsor.tokyu, 68 | 'url': 'https://10q89s.jp/', 69 | }, 70 | ]; 71 | 72 | final kBronzeSponsorList = [ 73 | { 74 | 'name': '株式会社Chompy', 75 | 'logo': Assets.sponsor.chompy, 76 | 'url': 'https://chompy-inc.com/', 77 | }, 78 | { 79 | 'name': 'スタディプラス株式会社', 80 | 'logo': Assets.sponsor.studyplus, 81 | 'url': 'https://info.studyplus.co.jp', 82 | }, 83 | { 84 | 'name': 'YOUTRUST', 85 | 'logo': Assets.sponsor.youtrust, 86 | 'url': 'https://youtrust.jp/', 87 | }, 88 | { 89 | 'name': 'エキサイト株式会社', 90 | 'logo': Assets.sponsor.excite, 91 | 'url': 'https://info.excite.co.jp/', 92 | }, 93 | { 94 | 'name': 'ファストドクター株式会社', 95 | 'logo': Assets.sponsor.fastdoctor, 96 | 'url': 'https://www.fastdoctor.co.jp/', 97 | }, 98 | { 99 | 'name': '株式会社LayerX', 100 | 'logo': Assets.sponsor.layerx, 101 | 'url': 'https://layerx.co.jp/', 102 | }, 103 | ]; 104 | -------------------------------------------------------------------------------- /lib/data/staff.dart: -------------------------------------------------------------------------------- 1 | final kStaffList = [ 2 | { 3 | 'name': 'yagitatsu', 4 | 'photo': 5 | 'https://pbs.twimg.com/profile_images/1435550945157337091/GNxormVJ_400x400.jpg', 6 | 'url': 'https://twitter.com/yagitatsu3', 7 | }, 8 | { 9 | 'name': 'y-shika', 10 | 'photo': 'https://avatars.githubusercontent.com/u/34807109?v=4', 11 | 'url': 'https://twitter.com/y_sh1ka', 12 | }, 13 | { 14 | 'name': 'wasabeef', 15 | 'photo': 'https://avatars.githubusercontent.com/u/1833474?v=4', 16 | 'url': 'https://twitter.com/wasabeef_jp', 17 | }, 18 | { 19 | 'name': 'ssoejima', 20 | 'photo': 21 | 'https://pbs.twimg.com/profile_images/1433810816633999362/IYkUyXNP_400x400.jpg', 22 | 'url': 'https://twitter.com/highballegg', 23 | }, 24 | { 25 | 'name': 'm.kosuke', 26 | 'photo': 27 | 'https://pbs.twimg.com/profile_images/949876562035290112/WHda0iOA_400x400.jpg', 28 | 'url': 'https://twitter.com/kosuke_mtm', 29 | }, 30 | { 31 | 'name': 'kikuchy', 32 | 'photo': 33 | 'https://pbs.twimg.com/profile_images/481267728/icon_128_400x400.png', 34 | 'url': 'https://twitter.com/kikuchy', 35 | }, 36 | { 37 | 'name': 'robo', 38 | 'photo': 39 | 'https://pbs.twimg.com/profile_images/1419301002/robo_2_400x400.png', 40 | 'url': 'https://twitter.com/cch_robo', 41 | }, 42 | { 43 | 'name': 'ストクロ', 44 | 'photo': 45 | 'https://pbs.twimg.com/profile_images/678582858991034368/pcfPc0XB_400x400.jpg', 46 | 'url': 'https://twitter.com/kurotyann9696', 47 | }, 48 | { 49 | 'name': 'キンパツ', 50 | 'photo': 51 | 'https://pbs.twimg.com/profile_images/1382266781826383873/-L96g3tE_400x400.jpg', 52 | 'url': 'https://twitter.com/operandoOS', 53 | }, 54 | { 55 | 'name': 'jiyuujin', 56 | 'photo': 57 | 'https://pbs.twimg.com/profile_images/1154037739035119620/IX0vq03C_400x400.jpg', 58 | 'url': 'https://twitter.com/jiyuujinlab', 59 | }, 60 | { 61 | 'name': 'katsummy', 62 | // 'photo': Assets.photo.katsummy.path, 63 | 'photo': 64 | 'https://pbs.twimg.com/profile_images/378800000593680476/aa0280b76541ed89ca802472ea174c57_400x400.png', 65 | 'url': 'https://twitter.com/katsummy', 66 | }, 67 | { 68 | 'name': '為藤アキラ', 69 | 'photo': 70 | 'https://pbs.twimg.com/profile_images/1017186161024856065/zI2avEVC_400x400.jpg', 71 | 'url': 'https://twitter.com/AkiraTameto', 72 | }, 73 | { 74 | 'name': 'AkiraTsuboi', 75 | 'photo': 76 | 'https://pbs.twimg.com/profile_images/1301542495428337670/B0QvQ2rC_400x400.jpg', 77 | 'url': 'https://twitter.com/akira_tsuboi', 78 | }, 79 | { 80 | 'name': 'Kurogoma4D', 81 | 'photo': 82 | 'https://pbs.twimg.com/profile_images/1289002876430213120/G2A564li_400x400.jpg', 83 | 'url': 'https://twitter.com/Krgm4D', 84 | }, 85 | { 86 | 'name': 'machi', 87 | 'photo': 88 | 'https://pbs.twimg.com/profile_images/1400716314864357377/2YRCNyts_400x400.jpg', 89 | 'url': 'https://twitter.com/kmachida12345', 90 | }, 91 | { 92 | 'name': 'techkeito', 93 | 'photo': 94 | 'https://pbs.twimg.com/profile_images/1409543044467093507/qPwOdAG2_400x400.jpg', 95 | 'url': 'https://twitter.com/techkeito', 96 | }, 97 | { 98 | 'name': 'Takuma Kato', 99 | 'photo': 100 | 'https://pbs.twimg.com/profile_images/1177612141760667648/3co12wQD_400x400.jpg', 101 | 'url': 'https://twitter.com/table_house', 102 | }, 103 | { 104 | 'name': 'ashdik', 105 | 'photo': 106 | 'https://pbs.twimg.com/profile_images/1261189066822828032/9FHFE3Mr_400x400.jpg', 107 | 'url': 'https://twitter.com/daiki1003', 108 | }, 109 | { 110 | 'name': 'heavenOSK', 111 | 'photo': 112 | 'https://pbs.twimg.com/profile_images/1227984665165742082/UiAeVhmX_400x400.jpg', 113 | 'url': 'https://twitter.com/heavenosk', 114 | }, 115 | { 116 | 'name': 'Yuki Sakai', 117 | 'photo': 118 | 'https://pbs.twimg.com/profile_images/1480887241237200899/Lz28HNr4_400x400.jpg', 119 | 'url': 'https://twitter.com/yu12k25i', 120 | }, 121 | { 122 | 'name': 'NuumA', 123 | 'photo': 124 | 'https://pbs.twimg.com/profile_images/1297474423310544897/iXJJY8z7_400x400.jpg', 125 | 'url': 'https://twitter.com/Nuum_A', 126 | }, 127 | { 128 | 'name': 'Kazuhito Nakayama', 129 | 'photo': 130 | 'https://pbs.twimg.com/profile_images/1546990476091281409/Ma0BdiNm_400x400.jpg', 131 | 'url': 'https://twitter.com/kazuhitonakayam', 132 | }, 133 | { 134 | 'name': 'okaryo', 135 | // 'photo': Assets.photo.okaryo.path, 136 | 'photo': 137 | 'https://pbs.twimg.com/profile_images/1591957067035774977/tdJ83ft0_400x400.png', 138 | 'url': 'https://twitter.com/okaryoX', 139 | }, 140 | ]; 141 | -------------------------------------------------------------------------------- /lib/entity/timetable_entity.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/foundation.dart'; 2 | 3 | enum SessionType { talk, timeslot } 4 | 5 | extension SessionTypePatternMatch on SessionType { 6 | T when({ 7 | required T Function() talk, 8 | required T Function() timeslot, 9 | }) { 10 | switch (this) { 11 | case SessionType.talk: 12 | return talk(); 13 | case SessionType.timeslot: 14 | return timeslot(); 15 | } 16 | } 17 | } 18 | 19 | @immutable 20 | class TimetableEntity { 21 | final List timetable; 22 | 23 | const TimetableEntity({this.timetable = const []}); 24 | 25 | factory TimetableEntity.fromJson(Map json) { 26 | if (json['timetable'] == null) return const TimetableEntity(); 27 | 28 | final List timetable = (json['timetable'] as List) 29 | .map((e) => Timetable.fromJson(e)) 30 | .toList(); 31 | return TimetableEntity(timetable: timetable); 32 | } 33 | 34 | Map? toJson() { 35 | final data = {}; 36 | data['timetable'] = timetable.map((v) => v.toJson()).toList(); 37 | return data; 38 | } 39 | 40 | @override 41 | String toString() => 'TimetableEntity(timetable: $timetable)'; 42 | } 43 | 44 | @immutable 45 | class Timetable { 46 | final SessionType type; 47 | final String uuid; 48 | final String title; 49 | final String abstract; 50 | final Track track; 51 | final DateTime? startsAt; 52 | final int lengthMin; 53 | final Speaker speaker; 54 | final int favCount; 55 | final String url; 56 | final List tags; 57 | 58 | const Timetable({ 59 | this.type = SessionType.talk, 60 | this.uuid = '', 61 | this.title = '', 62 | this.abstract = '', 63 | this.track = const Track(), 64 | this.startsAt, 65 | this.lengthMin = 0, 66 | this.speaker = const Speaker(), 67 | this.favCount = 0, 68 | this.url = '', 69 | this.tags = const [], 70 | }); 71 | 72 | bool get isSponsored => tags.where((e) => e.name == 'Sponsored').isNotEmpty; 73 | 74 | factory Timetable.fromJson(Map json) => Timetable( 75 | type: SessionType.values.byName(json['type'] ?? ''), 76 | uuid: json['uuid'] ?? '', 77 | title: json['title'] ?? '', 78 | abstract: json['abstract'] ?? '', 79 | track: Track.fromJson(json['track'] ?? {}), 80 | startsAt: DateTime.tryParse(json['starts_at'] ?? ''), 81 | lengthMin: json['length_min'] ?? 0, 82 | speaker: Speaker.fromJson(json['speaker'] ?? {}), 83 | favCount: json['fav_count'] ?? 0, 84 | url: json['url'] ?? '', 85 | tags: json['tags'] != null 86 | ? (json['tags'] as List) 87 | .map((e) => Tag.fromJson(e)) 88 | .toList() 89 | : [], 90 | ); 91 | 92 | Map toJson() { 93 | final data = {}; 94 | data['type'] = type; 95 | data['uuid'] = uuid; 96 | data['title'] = title; 97 | data['abstract'] = abstract; 98 | data['track'] = track.toJson(); 99 | data['starts_at'] = startsAt?.toIso8601String(); 100 | data['length_min'] = lengthMin; 101 | data['speaker'] = speaker.toJson(); 102 | data['fav_count'] = favCount; 103 | data['url'] = url; 104 | data['tags'] = tags.map((e) => e.toJson()).toList(); 105 | return data; 106 | } 107 | 108 | @override 109 | String toString() { 110 | return 'Timetable(type: $type, uuid: $uuid, title: $title, abstract: $abstract, track: $track, startsAt: $startsAt, lengthMin: $lengthMin, speaker: $speaker, favCount: $favCount, url: $url, tags: $tags)'; 111 | } 112 | } 113 | 114 | @immutable 115 | class Tag { 116 | final String name; 117 | 118 | const Tag({ 119 | this.name = '', 120 | }); 121 | 122 | factory Tag.fromJson(Map json) => Tag( 123 | name: json['name'] ?? '', 124 | ); 125 | 126 | Map toJson() { 127 | final data = {}; 128 | data['name'] = name; 129 | return data; 130 | } 131 | 132 | @override 133 | String toString() => 'Tag(name: $name)'; 134 | } 135 | 136 | @immutable 137 | class Track { 138 | final String name; 139 | final int sort; 140 | 141 | const Track({ 142 | this.name = '', 143 | this.sort = 0, 144 | }); 145 | 146 | factory Track.fromJson(Map json) => Track( 147 | name: json['name'] ?? '', 148 | sort: json['sort'] ?? '', 149 | ); 150 | 151 | Map toJson() { 152 | final data = {}; 153 | data['name'] = name; 154 | data['sort'] = sort; 155 | return data; 156 | } 157 | 158 | @override 159 | String toString() => 'Track(name: $name, sort: $sort)'; 160 | } 161 | 162 | @immutable 163 | class Speaker { 164 | final String name; 165 | final String kana; 166 | final String twitter; 167 | final String avatarUrl; 168 | 169 | const Speaker({ 170 | this.name = '', 171 | this.kana = '', 172 | this.twitter = '', 173 | this.avatarUrl = '', 174 | }); 175 | 176 | factory Speaker.fromJson(Map json) => Speaker( 177 | name: json['name'] ?? '', 178 | kana: json['kana'] ?? '', 179 | twitter: json['twitter'] ?? '', 180 | avatarUrl: json['avatar_url'] ?? '', 181 | ); 182 | 183 | Map toJson() { 184 | final data = {}; 185 | data['name'] = name; 186 | data['kana'] = kana; 187 | data['twitter'] = twitter; 188 | data['avatar_url'] = avatarUrl; 189 | return data; 190 | } 191 | 192 | @override 193 | String toString() { 194 | return 'Speaker(name: $name, kana: $kana, twitter: $twitter, avatarUrl: $avatarUrl)'; 195 | } 196 | } 197 | -------------------------------------------------------------------------------- /lib/gen/assets.gen.dart: -------------------------------------------------------------------------------- 1 | /// GENERATED CODE - DO NOT MODIFY BY HAND 2 | /// ***************************************************** 3 | /// FlutterGen 4 | /// ***************************************************** 5 | import 'package:flutter/widgets.dart'; 6 | 7 | class $AssetsPhotoGen { 8 | const $AssetsPhotoGen(); 9 | 10 | /// File path: assets/photo/katsummy.png 11 | AssetGenImage get katsummy => 12 | const AssetGenImage('assets/photo/katsummy.png'); 13 | AssetGenImage get okaryo => const AssetGenImage('assets/photo/okaryo.png'); 14 | } 15 | 16 | class $AssetsSponsorGen { 17 | const $AssetsSponsorGen(); 18 | 19 | /// File path: assets/sponsor/autify.svg 20 | String get autify => 'assets/sponsor/autify.svg'; 21 | 22 | /// File path: assets/sponsor/chompy.svg 23 | String get chompy => 'assets/sponsor/chompy.svg'; 24 | 25 | /// File path: assets/sponsor/compass.svg 26 | String get compass => 'assets/sponsor/compass.svg'; 27 | 28 | /// File path: assets/sponsor/cyber_agent.svg 29 | String get cyberAgent => 'assets/sponsor/cyber_agent.svg'; 30 | 31 | /// File path: assets/sponsor/demaecan.svg 32 | String get demaecan => 'assets/sponsor/demaecan.svg'; 33 | 34 | /// File path: assets/sponsor/dena.svg 35 | String get dena => 'assets/sponsor/dena.svg'; 36 | 37 | /// File path: assets/sponsor/diverse.svg 38 | String get diverse => 'assets/sponsor/diverse.svg'; 39 | 40 | /// File path: assets/sponsor/enechain.svg 41 | String get enechain => 'assets/sponsor/enechain.svg'; 42 | 43 | /// File path: assets/sponsor/excite.svg 44 | String get excite => 'assets/sponsor/excite.svg'; 45 | 46 | /// File path: assets/sponsor/fastdoctor.svg 47 | String get fastdoctor => 'assets/sponsor/fastdoctor.svg'; 48 | 49 | /// File path: assets/sponsor/hokuto.svg 50 | String get hokuto => 'assets/sponsor/hokuto.svg'; 51 | 52 | /// File path: assets/sponsor/layerx.svg 53 | String get layerx => 'assets/sponsor/layerx.svg'; 54 | 55 | /// File path: assets/sponsor/m3.svg 56 | String get m3 => 'assets/sponsor/m3.svg'; 57 | 58 | /// File path: assets/sponsor/studyplus.svg 59 | String get studyplus => 'assets/sponsor/studyplus.svg'; 60 | 61 | /// File path: assets/sponsor/tenx.svg 62 | String get tenx => 'assets/sponsor/tenx.svg'; 63 | 64 | /// File path: assets/sponsor/tokyu.svg 65 | String get tokyu => 'assets/sponsor/tokyu.svg'; 66 | 67 | /// File path: assets/sponsor/youtrust.svg 68 | String get youtrust => 'assets/sponsor/youtrust.svg'; 69 | 70 | /// File path: assets/sponsor/yumemi.svg 71 | String get yumemi => 'assets/sponsor/yumemi.svg'; 72 | } 73 | 74 | class Assets { 75 | Assets._(); 76 | 77 | static const AssetGenImage banner = AssetGenImage('assets/banner.png'); 78 | static const String discordLogo = 'assets/discord_logo.svg'; 79 | static const String flutterkaigiNavbarDarkLogo = 80 | 'assets/flutterkaigi-navbar_dark_logo.svg'; 81 | static const String flutterkaigiNavbarLightLogo = 82 | 'assets/flutterkaigi-navbar_light_logo.svg'; 83 | static const String flutterkaigiLogo = 'assets/flutterkaigi_logo.svg'; 84 | static const String githubLogo = 'assets/github_logo.svg'; 85 | static const String mediumLogo = 'assets/medium_logo.svg'; 86 | static const $AssetsPhotoGen photo = $AssetsPhotoGen(); 87 | static const $AssetsSponsorGen sponsor = $AssetsSponsorGen(); 88 | static const String twitterLogo = 'assets/twitter_logo.svg'; 89 | static const String twitterWhite = 'assets/twitter_white.svg'; 90 | } 91 | 92 | class AssetGenImage extends AssetImage { 93 | const AssetGenImage(String assetName) : super(assetName); 94 | 95 | Image image({ 96 | Key? key, 97 | ImageFrameBuilder? frameBuilder, 98 | ImageLoadingBuilder? loadingBuilder, 99 | ImageErrorWidgetBuilder? errorBuilder, 100 | String? semanticLabel, 101 | bool excludeFromSemantics = false, 102 | double? width, 103 | double? height, 104 | Color? color, 105 | BlendMode? colorBlendMode, 106 | BoxFit? fit, 107 | AlignmentGeometry alignment = Alignment.center, 108 | ImageRepeat repeat = ImageRepeat.noRepeat, 109 | Rect? centerSlice, 110 | bool matchTextDirection = false, 111 | bool gaplessPlayback = false, 112 | bool isAntiAlias = false, 113 | FilterQuality filterQuality = FilterQuality.low, 114 | }) { 115 | return Image( 116 | key: key, 117 | image: this, 118 | frameBuilder: frameBuilder, 119 | loadingBuilder: loadingBuilder, 120 | errorBuilder: errorBuilder, 121 | semanticLabel: semanticLabel, 122 | excludeFromSemantics: excludeFromSemantics, 123 | width: width, 124 | height: height, 125 | color: color, 126 | colorBlendMode: colorBlendMode, 127 | fit: fit, 128 | alignment: alignment, 129 | repeat: repeat, 130 | centerSlice: centerSlice, 131 | matchTextDirection: matchTextDirection, 132 | gaplessPlayback: gaplessPlayback, 133 | isAntiAlias: isAntiAlias, 134 | filterQuality: filterQuality, 135 | ); 136 | } 137 | 138 | String get path => assetName; 139 | } 140 | -------------------------------------------------------------------------------- /lib/l10n/app_en.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home": "Home", 3 | "event": "Past Events", 4 | "tweet": "Tweet", 5 | "questionnaire": "Questionnaire", 6 | "letsTweet": "Tweet #FlutterKaigi!", 7 | "checkLatestNews": "Check our official Twitter account for the latest news!", 8 | "proposalSubmissionStart": "Talk Submission Has Started!", 9 | "proposalList": "List of Proposals", 10 | "sponsor": "Sponsors", 11 | "sponsorPlatinum": "Platinum", 12 | "sponsorGold": "Gold", 13 | "sponsorSilver": "Silver", 14 | "sponsorBronze": "Bronze", 15 | "sponsorMedia": "Media", 16 | "becomeSponsor": "Become a Sponsor", 17 | "waitFor": "To be announced", 18 | "schedule": "Schedule", 19 | "showSchedule": "Show the schedule", 20 | "applyMainEvent": "Register now", 21 | "applyHandsonEvent": "Register handson now", 22 | "openMainEventPage": "Open the registration page", 23 | "openHandsonEventPage": "Open the registration page", 24 | "submitProposal": "Submit Talk Proposals", 25 | "showProposals": "Show all submitted talk proposals", 26 | "codeOfConduct": "Code of Conduct", 27 | "privacyPolicy": "Privacy Policy", 28 | "contactUs": "Contact Us", 29 | "executive_committee": "Executive Committee", 30 | "session": "Sessions", 31 | "checkSessionDetailsInFortee": "Check session details in fortee", 32 | "checkSessionDetailsInYouTube": "Check session details in YouTube", 33 | "alphabeticalOrder": "listed alphabetically", 34 | "timetableOrder": "Ordered by start time", 35 | "copyright" : "© 2021-2022 FlutterKaigi Executive Committee", 36 | "licenses": "Licenses", 37 | "disclaimer": "Flutter and the related logo are trademarks of Google LLC. FlutterKaigi is not affiliated with or otherwise sponsored by Google LLC.", 38 | "trademark" : "The \"Flutter\" name and the Flutter logo (the \"Flutter Marks\") are trademarks owned by Google.", 39 | "other_event": "Other events", 40 | "back": "Go back", 41 | "questionnaireTitle": "Day {day} questionnaire for attendee", 42 | "@questionnaireTitle": { 43 | "placeholders": { 44 | "day": { 45 | "type": "int" 46 | } 47 | } 48 | }, 49 | "youTubeVideo": "Day {day} YouTube", 50 | "@youTubeVideo": { 51 | "placeholders": { 52 | "day": { 53 | "type": "int" 54 | } 55 | } 56 | }, 57 | "checkYouTubeVideo": "Check Day {day} YouTube", 58 | "@checkYouTubeVideo": { 59 | "placeholders": { 60 | "day": { 61 | "type": "int" 62 | } 63 | } 64 | }, 65 | "thanksToJoined": "FlutterKaigi 2022 is over. Thank you so much for joining!", 66 | "afterEventQuestionnaireTitle": "Answer the questionnaire about whole of FlutterKaigi 2022", 67 | "afterEventQuestionnaireMessage": "We are waiting for your answer!" 68 | } 69 | -------------------------------------------------------------------------------- /lib/l10n/app_ja.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home": "ホーム", 3 | "event": "イベント", 4 | "tweet": "ツイート", 5 | "questionnaire": "アンケート", 6 | "letsTweet": "#FlutterKaigi でツイートしよう!", 7 | "checkLatestNews": "最新情報は公式 Twitter アカウントをチェック!", 8 | "proposalSubmissionStart": "トーク募集開始!", 9 | "proposalList": "プロポーザル一覧", 10 | "sponsor": "スポンサー", 11 | "sponsorPlatinum": "プラチナ", 12 | "sponsorGold": "ゴールド", 13 | "sponsorSilver": "シルバー", 14 | "sponsorBronze": "ブロンズ", 15 | "sponsorMedia": "メディア", 16 | "becomeSponsor": "スポンサーになる", 17 | "waitFor": "公開まで暫くお待ちください", 18 | "schedule": "タイムテーブル", 19 | "showSchedule": "タイムテーブルを開く", 20 | "applyMainEvent": "イベントに申し込む", 21 | "applyHandsonEvent": "ハンズオンに申し込む", 22 | "openMainEventPage": "イベントページを開く", 23 | "openHandsonEventPage": "ハンズオンページを開く", 24 | "submitProposal": "トークを提出する", 25 | "showProposals": "プロポーザル一覧を開く", 26 | "codeOfConduct": "行動規範", 27 | "privacyPolicy": "プライバシーポリシー", 28 | "contactUs": "お問い合わせ", 29 | "executive_committee": "実行委員", 30 | "session": "セッション", 31 | "checkSessionDetailsInFortee": "forteeでセッションの詳細をチェック", 32 | "checkSessionDetailsInYouTube": "YouTubeでセッションの詳細をチェック", 33 | "alphabeticalOrder": "アルファベット順", 34 | "timetableOrder": "タイムテーブル順", 35 | "copyright" : "© 2021-2022 FlutterKaigi 実行委員会", 36 | "licenses": "ライセンス", 37 | "disclaimer": "Flutter and the related logo are trademarks of Google LLC. FlutterKaigi is not affiliated with or otherwise sponsored by Google LLC.", 38 | "trademark" : "The \"Flutter\" name and the Flutter logo (the \"Flutter Marks\") are trademarks owned by Google.", 39 | "other_event": "その他のイベント", 40 | "back": "戻る", 41 | "questionnaireTitle": "Day {day} 本編 参加者アンケート", 42 | "@questionnaireTitle": { 43 | "placeholders": { 44 | "day": { 45 | "type": "int" 46 | } 47 | } 48 | }, 49 | "youTubeVideo": "Day {day} YouTube", 50 | "@youTubeVideo": { 51 | "placeholders": { 52 | "day": { 53 | "type": "int" 54 | } 55 | } 56 | }, 57 | "checkYouTubeVideo": "Day {day} の YouTube を確認する", 58 | "@checkYouTubeVideo": { 59 | "placeholders": { 60 | "day": { 61 | "type": "int" 62 | } 63 | } 64 | }, 65 | "thanksToJoined": "FlutterKaigi 2022は終了しました。沢山の方にご参加いただき、誠にありがとうございます。", 66 | "afterEventQuestionnaireTitle": "FlutterKaigi 2022 全体アンケートに回答する", 67 | "afterEventQuestionnaireMessage": "ご回答お待ちしています" 68 | } 69 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:confwebsite2022/router/router_provider.dart'; 2 | import 'package:confwebsite2022/theme.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_gen/gen_l10n/app_localizations.dart'; 5 | import 'package:flutter_web_plugins/flutter_web_plugins.dart'; 6 | import 'package:hooks_riverpod/hooks_riverpod.dart'; 7 | 8 | void main() { 9 | setUrlStrategy(PathUrlStrategy()); 10 | runApp(const ProviderScope(child: MyApp())); 11 | } 12 | 13 | class MyApp extends ConsumerWidget { 14 | const MyApp({super.key}); 15 | 16 | @override 17 | Widget build(BuildContext context, WidgetRef ref) { 18 | final router = ref.watch(routerProvider); 19 | return MaterialApp.router( 20 | debugShowCheckedModeBanner: false, 21 | title: 'FlutterKaigi 2022', 22 | theme: AppTheme.theme, 23 | routerDelegate: router.routerDelegate, 24 | routeInformationParser: router.routeInformationParser, 25 | localizationsDelegates: AppLocalizations.localizationsDelegates, 26 | supportedLocales: AppLocalizations.supportedLocales, 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/responsive_layout_builder.dart: -------------------------------------------------------------------------------- 1 | /// ref. 2 | /// developer_quest/rpg_layout_builder.dart at master · 2d-inc/developer_quest https://github.com/2d-inc/developer_quest/blob/master/lib/src/rpg_layout_builder.dart 3 | /// 4 | import 'package:flutter/material.dart'; 5 | 6 | /// Once the logic screen pixel width exceeds this number, show the ultrawide 7 | /// layout. 8 | const double ultraWideLayoutThreshold = 1200; 9 | 10 | /// Once the logic screen pixel width exceeds this number, show the wide layout. 11 | const double wideLayoutThreshold = 800; 12 | 13 | /// Layout for the dev_rpg game. 14 | enum ResponsiveLayout { slim, wide, ultrawide } 15 | 16 | /// Signature for a function that builds a widget given an [ResponsiveLayout]. 17 | /// 18 | /// Used by [ResponsiveLayoutBuilder.builder]. 19 | typedef ResponsiveLayoutWidgetBuilder = Widget Function( 20 | BuildContext context, ResponsiveLayout layout, double width); 21 | 22 | /// Builds a widget tree that can depend on the parent widget's width 23 | class ResponsiveLayoutBuilder extends StatelessWidget { 24 | const ResponsiveLayoutBuilder({super.key, required this.builder}); 25 | 26 | /// Builds the widgets below this widget given this widget's layout width. 27 | final ResponsiveLayoutWidgetBuilder builder; 28 | 29 | Widget _build(BuildContext context, BoxConstraints constraints) { 30 | final mediaWidth = MediaQuery.of(context).size.width; 31 | final layout = mediaWidth >= ultraWideLayoutThreshold 32 | ? ResponsiveLayout.ultrawide 33 | : mediaWidth > wideLayoutThreshold 34 | ? ResponsiveLayout.wide 35 | : ResponsiveLayout.slim; 36 | return builder(context, layout, mediaWidth); 37 | } 38 | 39 | @override 40 | Widget build(BuildContext context) { 41 | return LayoutBuilder(builder: _build); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/router/router_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:confwebsite2022/pages/index.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:go_router/go_router.dart'; 4 | import 'package:hooks_riverpod/hooks_riverpod.dart'; 5 | 6 | final routerProvider = Provider( 7 | (ref) => GoRouter( 8 | debugLogDiagnostics: true, 9 | routes: [ 10 | GoRoute( 11 | path: '/', 12 | builder: (_, __) => const TopPage(), 13 | ), 14 | ], 15 | errorPageBuilder: (context, state) => MaterialPage( 16 | key: state.pageKey, 17 | child: Scaffold( 18 | body: Center( 19 | child: Text(state.error.toString()), 20 | ), 21 | ), 22 | ), 23 | ), 24 | ); 25 | -------------------------------------------------------------------------------- /lib/theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/foundation.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | // ignore: avoid_classes_with_only_static_members 5 | class AppTheme { 6 | static ThemeData get theme { 7 | // Typography 8 | final originTypography = 9 | (Typography.material2018(platform: defaultTargetPlatform).black).merge( 10 | Typography.material2018(platform: defaultTargetPlatform).dense); 11 | 12 | final textTheme = originTypography.copyWith( 13 | // Button 14 | button: originTypography.button?.merge(const TextStyle( 15 | fontFamily: 'Montserrat-Bold', fontWeight: FontWeight.bold)), 16 | ); 17 | 18 | return ThemeData( 19 | fontFamily: 'Montserrat', 20 | textTheme: textTheme, 21 | primarySwatch: Colors.blue, 22 | backgroundColor: Colors.white, 23 | textButtonTheme: TextButtonThemeData( 24 | style: TextButton.styleFrom( 25 | foregroundColor: Colors.black, // text 26 | // enabledMouseCursor: MouseCursor.defer, 27 | ), 28 | ), 29 | elevatedButtonTheme: ElevatedButtonThemeData( 30 | style: ElevatedButton.styleFrom( 31 | foregroundColor: Colors.white, // foreground(text) 32 | // enabledMouseCursor: MouseCursor.defer, 33 | ), 34 | ), 35 | ); 36 | } 37 | } 38 | 39 | const kSkyblue = Color(0xFF4ACCEB); 40 | const kBlue = Color(0xFF174C90); 41 | const kRed = Color(0xFFCA2421); 42 | -------------------------------------------------------------------------------- /lib/util/scroll_util.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | 3 | /// This method can scroll to a specific widget 4 | /// 5 | /// Usage 6 | /// ``` 7 | /// final anchor="This is example anchor"; 8 | /// ~~~~~ 9 | /// AnyButton(onPressed:() async => await animationScroll(anchor)), 10 | /// ~~~~~ 11 | /// AnyWidget(key:GlobalObjectKey(anchor)), 12 | /// ``` 13 | Future animationScroll(Object anchor) async { 14 | final context = GlobalObjectKey(anchor).currentContext; 15 | if (context == null) { 16 | throw ErrorDescription( 17 | "An unregistered object was passed in animationScroll.\nYou should register GlobalObjectKey for some widget."); 18 | } 19 | await Scrollable.ensureVisible(context, 20 | duration: const Duration(milliseconds: 1000), 21 | curve: Curves.fastOutSlowIn); 22 | } 23 | -------------------------------------------------------------------------------- /lib/widgets/background.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math' as math; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | final _random = math.Random(); 6 | 7 | class Logo { 8 | Offset position = Offset.zero; 9 | double angle = 0.0; 10 | 11 | final double rotateSpeed = _random.nextDouble() * math.pi * 0.01; 12 | final double speed = _random.nextDouble() * 1 + 0.5; 13 | final double size = _random.nextDouble() * 60 + 30; 14 | 15 | Logo(this.position); 16 | } 17 | 18 | final logos = ValueNotifier>([]); 19 | 20 | class BackgroundCanvas extends StatefulWidget { 21 | const BackgroundCanvas({super.key, required this.size}); 22 | 23 | final Size size; 24 | 25 | @override 26 | _BackgroundCanvasState createState() => _BackgroundCanvasState(); 27 | } 28 | 29 | class _BackgroundCanvasState extends State 30 | with SingleTickerProviderStateMixin { 31 | late final _controller = 32 | AnimationController(vsync: this, duration: const Duration(days: 1)) 33 | ..addListener( 34 | () { 35 | final update = [...logos.value]; 36 | for (final logo in update) { 37 | logo.position += Offset(0, -logo.speed); 38 | logo.angle += logo.rotateSpeed; 39 | if (logo.position.dy < widget.size.height / 3) { 40 | final index = logos.value.indexOf(logo); 41 | update[index] = generateLogo(); 42 | } 43 | } 44 | logos.value = update; 45 | }, 46 | ); 47 | 48 | @override 49 | void initState() { 50 | logos.value = List.generate(10, (index) => generateLogo()); 51 | _controller.forward(); 52 | super.initState(); 53 | } 54 | 55 | Logo generateLogo() => Logo(Offset( 56 | widget.size.width * _random.nextDouble(), 57 | widget.size.height, 58 | )); 59 | 60 | @override 61 | Widget build(BuildContext context) { 62 | return ValueListenableBuilder( 63 | valueListenable: logos, 64 | builder: (context, List value, _) => _Background(logos: value), 65 | ); 66 | } 67 | 68 | @override 69 | void dispose() { 70 | _controller.dispose(); 71 | super.dispose(); 72 | } 73 | } 74 | 75 | class _Background extends StatelessWidget { 76 | const _Background({Key? key, required this.logos}) : super(key: key); 77 | 78 | final List logos; 79 | 80 | @override 81 | Widget build(BuildContext context) { 82 | final height = MediaQuery.of(context).size.height; 83 | return Stack( 84 | children: [ 85 | for (final logo in logos) 86 | Positioned( 87 | top: logo.position.dy, 88 | left: logo.position.dx, 89 | child: Opacity( 90 | opacity: (logo.position.dy - height / 3) / height / 3, 91 | child: Transform.rotate( 92 | angle: logo.angle, 93 | child: FlutterLogo( 94 | size: logo.size, 95 | ), 96 | ), 97 | ), 98 | ) 99 | ], 100 | ); 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /lib/widgets/custom_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:url_launcher/link.dart'; 3 | 4 | class CustomButton extends StatelessWidget { 5 | const CustomButton( 6 | {super.key, 7 | required this.isShow, 8 | required this.colors, 9 | required this.title, 10 | required this.message, 11 | required this.url, 12 | this.onPress}); 13 | 14 | final bool isShow; 15 | final List? colors; 16 | final String title; 17 | final String message; 18 | final String url; 19 | final Function()? onPress; 20 | 21 | @override 22 | Widget build(BuildContext context) { 23 | if (!isShow) return const SizedBox.shrink(); 24 | 25 | if (colors == null) { 26 | return Container( 27 | margin: const EdgeInsets.all(8), 28 | child: ClipRRect( 29 | borderRadius: BorderRadius.circular(48.0), 30 | child: Container( 31 | margin: const EdgeInsets.all(8), 32 | child: Tooltip( 33 | message: message, 34 | child: Link( 35 | uri: Uri.parse(url), 36 | target: LinkTarget.blank, 37 | builder: (BuildContext ctx, FollowLink? openLink) { 38 | return ElevatedButton( 39 | onPressed: onPress ?? openLink, 40 | style: ElevatedButton.styleFrom( 41 | shape: const StadiumBorder(), 42 | padding: const EdgeInsets.all(28), 43 | backgroundColor: Colors.orange, 44 | foregroundColor: Colors.black87, 45 | ), 46 | child: Text( 47 | title, 48 | style: const TextStyle( 49 | color: Colors.white, 50 | fontSize: 20, 51 | ), 52 | ), 53 | ); 54 | }, 55 | ), 56 | ), 57 | ), 58 | ), 59 | ); 60 | } 61 | 62 | return Container( 63 | margin: const EdgeInsets.all(8), 64 | child: ClipRRect( 65 | borderRadius: BorderRadius.circular(48.0), 66 | child: Container( 67 | decoration: BoxDecoration( 68 | gradient: LinearGradient( 69 | colors: colors as List, 70 | ), 71 | ), 72 | child: Tooltip( 73 | message: message, 74 | child: Link( 75 | uri: Uri.parse(url), 76 | target: LinkTarget.blank, 77 | builder: (BuildContext ctx, FollowLink? openLink) { 78 | return TextButton( 79 | onPressed: onPress ?? openLink, 80 | child: Padding( 81 | padding: const EdgeInsets.all(20), 82 | child: Text( 83 | title, 84 | textAlign: TextAlign.center, 85 | style: const TextStyle( 86 | color: Colors.white, 87 | fontSize: 20, 88 | ), 89 | ), 90 | ), 91 | ); 92 | }, 93 | ), 94 | ), 95 | ), 96 | ), 97 | ); 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /lib/widgets/divider_with_title.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class DividerWithTitle extends StatelessWidget { 4 | const DividerWithTitle({super.key, required this.text}); 5 | 6 | final String text; 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | final dividerLine = Expanded( 11 | child: Container( 12 | margin: const EdgeInsets.only(left: 10, right: 10), 13 | child: const Divider(height: 20, thickness: 5), 14 | )); 15 | 16 | return Row(children: [ 17 | dividerLine, 18 | Text( 19 | text, 20 | style: const TextStyle( 21 | fontWeight: FontWeight.bold, 22 | fontSize: 24, 23 | ), 24 | ), 25 | dividerLine 26 | ]); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/widgets/features.dart: -------------------------------------------------------------------------------- 1 | /// 初期ローンチ 2 | const initialLaunched = false; 3 | 4 | /// セッション公募の開始 5 | const startSession = false; 6 | 7 | /// スポンサー公募の周知 8 | const announceSponsor = false; 9 | 10 | /// スポンサー公募の開始 (前提として上記周知のフラグを true にする) 11 | const startSponsor = false; 12 | 13 | /// タイムテーブル公開の開始 14 | const showSchedule = true; 15 | 16 | /// スポンサーロゴ公開の開始 17 | const showSponsorLogo = true; 18 | 19 | /// 受付開始 20 | const startApply = false; 21 | 22 | /// 日毎のアンケートリンク 23 | const questionnaireLinkEnabled = false; 24 | 25 | /// 全体アンケートリンク 26 | const afterEventQuestionnaire = false; 27 | 28 | /// アーカイヴ動画 29 | const showArchives = true; 30 | -------------------------------------------------------------------------------- /lib/widgets/social.dart: -------------------------------------------------------------------------------- 1 | import 'package:confwebsite2022/data/link.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_svg/flutter_svg.dart'; 4 | import 'package:url_launcher/link.dart'; 5 | 6 | class LinkModel { 7 | LinkModel(this.name, this.url); 8 | 9 | final String name; 10 | final String url; 11 | } 12 | 13 | class Social extends StatelessWidget { 14 | const Social({super.key}); 15 | 16 | @override 17 | Widget build(BuildContext context) { 18 | List socialItem() { 19 | return kSocialLinks.map((link) { 20 | return Link( 21 | uri: Uri.parse(link['url']!), 22 | target: LinkTarget.blank, 23 | builder: (BuildContext ctx, FollowLink? openLink) { 24 | return IconButton( 25 | tooltip: link['url'], 26 | icon: SvgPicture.asset( 27 | '/${link['name']}.svg', 28 | width: 60, 29 | ), 30 | onPressed: openLink, 31 | mouseCursor: SystemMouseCursors.click, 32 | ); 33 | }, 34 | ); 35 | }).toList(); 36 | } 37 | 38 | return Row( 39 | mainAxisAlignment: MainAxisAlignment.center, 40 | children: [...socialItem()], 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/widgets/sponsor.dart: -------------------------------------------------------------------------------- 1 | import 'package:confwebsite2022/data/sponsor.dart'; 2 | import 'package:confwebsite2022/widgets/divider_with_title.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_gen/gen_l10n/app_localizations.dart'; 5 | import 'package:flutter_svg/flutter_svg.dart'; 6 | import 'package:url_launcher/link.dart'; 7 | 8 | class SponsorSection extends StatelessWidget { 9 | const SponsorSection({super.key}); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | final appLocalizations = AppLocalizations.of(context)!; 14 | 15 | return Container( 16 | padding: const EdgeInsets.symmetric(vertical: 16), 17 | child: Column( 18 | children: [ 19 | DividerWithTitle(text: appLocalizations.sponsor), 20 | Container( 21 | alignment: Alignment.center, 22 | child: Column( 23 | children: [ 24 | SponsorList( 25 | header: appLocalizations.sponsorPlatinum, 26 | sponsors: kPlatinumSponsorList, 27 | ), 28 | SponsorList( 29 | header: appLocalizations.sponsorGold, 30 | sponsors: kGoldSponsorList, 31 | ), 32 | SponsorList( 33 | header: appLocalizations.sponsorSilver, 34 | sponsors: kSilverSponsorList, 35 | ), 36 | SponsorList( 37 | header: appLocalizations.sponsorBronze, 38 | sponsors: kBronzeSponsorList, 39 | ), 40 | ], 41 | ), 42 | ), 43 | ], 44 | ), 45 | ); 46 | } 47 | } 48 | 49 | class SponsorList extends StatelessWidget { 50 | const SponsorList({ 51 | super.key, 52 | required this.header, 53 | required this.sponsors, 54 | }); 55 | final String header; 56 | final List> sponsors; 57 | 58 | @override 59 | Widget build(BuildContext context) { 60 | return Container( 61 | alignment: Alignment.center, 62 | margin: const EdgeInsets.only(top: 16), 63 | child: Column( 64 | children: [ 65 | Text( 66 | header, 67 | style: const TextStyle( 68 | fontWeight: FontWeight.bold, 69 | fontSize: 20, 70 | ), 71 | ), 72 | Wrap( 73 | children: sponsors.map((sponsor) { 74 | return SponsorItem( 75 | name: sponsor['name']!, 76 | logo: sponsor['logo']!, 77 | url: sponsor['url']!, 78 | ); 79 | }).toList(), 80 | ), 81 | ], 82 | ), 83 | ); 84 | } 85 | } 86 | 87 | class SponsorItem extends StatelessWidget { 88 | const SponsorItem({ 89 | super.key, 90 | required this.name, 91 | required this.logo, 92 | required this.url, 93 | }); 94 | final String name; 95 | final String logo; 96 | final String url; 97 | 98 | @override 99 | Widget build(BuildContext context) { 100 | return Link( 101 | uri: Uri.parse(url), 102 | target: LinkTarget.blank, 103 | builder: (BuildContext ctx, FollowLink? openLink) { 104 | return InkWell( 105 | onTap: openLink, 106 | child: Padding( 107 | padding: const EdgeInsets.all(16.0), 108 | child: SizedBox( 109 | height: 120, 110 | width: 120, 111 | child: SvgPicture.asset( 112 | logo, 113 | semanticsLabel: name, 114 | ), 115 | ), 116 | ), 117 | ); 118 | }, 119 | ); 120 | } 121 | 122 | bool validUrl(String url) { 123 | try { 124 | Uri.parse(url); 125 | } on FormatException catch (_) { 126 | return false; 127 | } 128 | return true; 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /lib/widgets/staff.dart: -------------------------------------------------------------------------------- 1 | import 'package:confwebsite2022/data/staff.dart'; 2 | import 'package:confwebsite2022/gen/assets.gen.dart'; 3 | import 'package:confwebsite2022/widgets/divider_with_title.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_gen/gen_l10n/app_localizations.dart'; 6 | import 'package:flutter_svg_provider/flutter_svg_provider.dart'; 7 | import 'package:transparent_image/transparent_image.dart'; 8 | import 'package:url_launcher/link.dart'; 9 | 10 | class StaffSection extends StatelessWidget { 11 | const StaffSection({super.key}); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | final appLocalizations = AppLocalizations.of(context)!; 16 | kStaffList.sort((a, b) => (a['name'] ?? '').compareTo(b['name'] ?? '')); 17 | 18 | return Container( 19 | padding: const EdgeInsets.symmetric(vertical: 16), 20 | child: Column( 21 | children: [ 22 | DividerWithTitle(text: appLocalizations.executive_committee), 23 | Container( 24 | alignment: Alignment.center, 25 | child: Wrap( 26 | children: kStaffList 27 | .map( 28 | (e) => SizedBox( 29 | height: 128, 30 | width: 128, 31 | child: StaffItem( 32 | name: e['name'] ?? '', 33 | photo: e['photo'] ?? '', 34 | url: e['url'] ?? '', 35 | ), 36 | ), 37 | ) 38 | .toList(), 39 | ), 40 | ), 41 | ], 42 | ), 43 | ); 44 | } 45 | } 46 | 47 | class StaffItem extends StatelessWidget { 48 | const StaffItem({ 49 | super.key, 50 | required this.name, 51 | required this.photo, 52 | required this.url, 53 | }); 54 | final String name; 55 | final String photo; 56 | final String url; 57 | 58 | @override 59 | Widget build(BuildContext context) { 60 | // final image = (photo.isNotEmpty 61 | // ? AssetImage(photo) 62 | // : const Svg(Assets.flutterkaigiLog)) as ImageProvider; 63 | 64 | final image = (photo.isNotEmpty && validUrl(photo) 65 | ? NetworkImage(photo) 66 | : const Svg(Assets.flutterkaigiLogo)) as ImageProvider; 67 | 68 | return Link( 69 | uri: Uri.parse(url), 70 | target: LinkTarget.blank, 71 | builder: (BuildContext ctx, FollowLink? openLink) { 72 | return InkWell( 73 | onTap: openLink, 74 | child: Column( 75 | mainAxisAlignment: MainAxisAlignment.center, 76 | children: [ 77 | SizedBox( 78 | height: 64, 79 | width: 64, 80 | child: ClipOval( 81 | child: FadeInImage( 82 | fit: BoxFit.cover, 83 | image: image, 84 | placeholder: MemoryImage(kTransparentImage), 85 | ), 86 | ), 87 | ), 88 | FittedBox(child: Text(name)), 89 | ], 90 | ), 91 | ); 92 | }, 93 | ); 94 | } 95 | 96 | bool validUrl(String url) { 97 | try { 98 | Uri.parse(url); 99 | } on FormatException catch (_) { 100 | return false; 101 | } 102 | return true; 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /linux/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | project(runner LANGUAGES CXX) 3 | 4 | set(BINARY_NAME "confwebsite2022") 5 | 6 | cmake_policy(SET CMP0063 NEW) 7 | 8 | set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") 9 | 10 | # Configure build options. 11 | if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) 12 | set(CMAKE_BUILD_TYPE "Debug" CACHE 13 | STRING "Flutter build mode" FORCE) 14 | set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS 15 | "Debug" "Profile" "Release") 16 | endif() 17 | 18 | # Compilation settings that should be applied to most targets. 19 | function(APPLY_STANDARD_SETTINGS TARGET) 20 | target_compile_features(${TARGET} PUBLIC cxx_std_14) 21 | target_compile_options(${TARGET} PRIVATE -Wall -Werror) 22 | target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") 23 | target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") 24 | endfunction() 25 | 26 | set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") 27 | 28 | # Flutter library and tool build rules. 29 | add_subdirectory(${FLUTTER_MANAGED_DIR}) 30 | 31 | # System-level dependencies. 32 | find_package(PkgConfig REQUIRED) 33 | pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) 34 | 35 | # Application build 36 | add_executable(${BINARY_NAME} 37 | "main.cc" 38 | "my_application.cc" 39 | "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" 40 | ) 41 | apply_standard_settings(${BINARY_NAME}) 42 | target_link_libraries(${BINARY_NAME} PRIVATE flutter) 43 | target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) 44 | add_dependencies(${BINARY_NAME} flutter_assemble) 45 | 46 | # Generated plugin build rules, which manage building the plugins and adding 47 | # them to the application. 48 | include(flutter/generated_plugins.cmake) 49 | 50 | 51 | # === Installation === 52 | # By default, "installing" just makes a relocatable bundle in the build 53 | # directory. 54 | set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") 55 | if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) 56 | set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) 57 | endif() 58 | 59 | # Start with a clean build bundle directory every time. 60 | install(CODE " 61 | file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") 62 | " COMPONENT Runtime) 63 | 64 | set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") 65 | set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") 66 | 67 | install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" 68 | COMPONENT Runtime) 69 | 70 | install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" 71 | COMPONENT Runtime) 72 | 73 | install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" 74 | COMPONENT Runtime) 75 | 76 | if(PLUGIN_BUNDLED_LIBRARIES) 77 | install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" 78 | DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" 79 | COMPONENT Runtime) 80 | endif() 81 | 82 | # Fully re-copy the assets directory on each build to avoid having stale files 83 | # from a previous install. 84 | set(FLUTTER_ASSET_DIR_NAME "flutter_assets") 85 | install(CODE " 86 | file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") 87 | " COMPONENT Runtime) 88 | install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" 89 | DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) 90 | 91 | # Install the AOT library on non-Debug builds only. 92 | if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") 93 | install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" 94 | COMPONENT Runtime) 95 | endif() 96 | -------------------------------------------------------------------------------- /linux/flutter/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | 3 | set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") 4 | 5 | # Configuration provided via flutter tool. 6 | include(${EPHEMERAL_DIR}/generated_config.cmake) 7 | 8 | # TODO: Move the rest of this into files in ephemeral. See 9 | # https://github.com/flutter/flutter/issues/57146. 10 | 11 | # Serves the same purpose as list(TRANSFORM ... PREPEND ...), 12 | # which isn't available in 3.10. 13 | function(list_prepend LIST_NAME PREFIX) 14 | set(NEW_LIST "") 15 | foreach(element ${${LIST_NAME}}) 16 | list(APPEND NEW_LIST "${PREFIX}${element}") 17 | endforeach(element) 18 | set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) 19 | endfunction() 20 | 21 | # === Flutter Library === 22 | # System-level dependencies. 23 | find_package(PkgConfig REQUIRED) 24 | pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) 25 | pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) 26 | pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) 27 | 28 | set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") 29 | 30 | # Published to parent scope for install step. 31 | set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) 32 | set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) 33 | set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) 34 | set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) 35 | 36 | list(APPEND FLUTTER_LIBRARY_HEADERS 37 | "fl_basic_message_channel.h" 38 | "fl_binary_codec.h" 39 | "fl_binary_messenger.h" 40 | "fl_dart_project.h" 41 | "fl_engine.h" 42 | "fl_json_message_codec.h" 43 | "fl_json_method_codec.h" 44 | "fl_message_codec.h" 45 | "fl_method_call.h" 46 | "fl_method_channel.h" 47 | "fl_method_codec.h" 48 | "fl_method_response.h" 49 | "fl_plugin_registrar.h" 50 | "fl_plugin_registry.h" 51 | "fl_standard_message_codec.h" 52 | "fl_standard_method_codec.h" 53 | "fl_string_codec.h" 54 | "fl_value.h" 55 | "fl_view.h" 56 | "flutter_linux.h" 57 | ) 58 | list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") 59 | add_library(flutter INTERFACE) 60 | target_include_directories(flutter INTERFACE 61 | "${EPHEMERAL_DIR}" 62 | ) 63 | target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") 64 | target_link_libraries(flutter INTERFACE 65 | PkgConfig::GTK 66 | PkgConfig::GLIB 67 | PkgConfig::GIO 68 | ) 69 | add_dependencies(flutter flutter_assemble) 70 | 71 | # === Flutter tool backend === 72 | # _phony_ is a non-existent file to force this command to run every time, 73 | # since currently there's no way to get a full input/output list from the 74 | # flutter tool. 75 | add_custom_command( 76 | OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} 77 | ${CMAKE_CURRENT_BINARY_DIR}/_phony_ 78 | COMMAND ${CMAKE_COMMAND} -E env 79 | ${FLUTTER_TOOL_ENVIRONMENT} 80 | "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" 81 | linux-x64 ${CMAKE_BUILD_TYPE} 82 | ) 83 | add_custom_target(flutter_assemble DEPENDS 84 | "${FLUTTER_LIBRARY}" 85 | ${FLUTTER_LIBRARY_HEADERS} 86 | ) 87 | -------------------------------------------------------------------------------- /linux/flutter/generated_plugin_registrant.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #include "generated_plugin_registrant.h" 8 | 9 | #include 10 | 11 | void fl_register_plugins(FlPluginRegistry* registry) { 12 | g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = 13 | fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); 14 | url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); 15 | } 16 | -------------------------------------------------------------------------------- /linux/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void fl_register_plugins(FlPluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /linux/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | url_launcher_linux 7 | ) 8 | 9 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 10 | ) 11 | 12 | set(PLUGIN_BUNDLED_LIBRARIES) 13 | 14 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 15 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) 16 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 17 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 18 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 19 | endforeach(plugin) 20 | 21 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 22 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) 23 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 24 | endforeach(ffi_plugin) 25 | -------------------------------------------------------------------------------- /linux/main.cc: -------------------------------------------------------------------------------- 1 | #include "my_application.h" 2 | 3 | int main(int argc, char** argv) { 4 | // Only X11 is currently supported. 5 | // Wayland support is being developed: https://github.com/flutter/flutter/issues/57932. 6 | gdk_set_allowed_backends("x11"); 7 | 8 | g_autoptr(MyApplication) app = my_application_new(); 9 | return g_application_run(G_APPLICATION(app), argc, argv); 10 | } 11 | -------------------------------------------------------------------------------- /linux/my_application.cc: -------------------------------------------------------------------------------- 1 | #include "my_application.h" 2 | 3 | #include 4 | 5 | #include "flutter/generated_plugin_registrant.h" 6 | 7 | struct _MyApplication { 8 | GtkApplication parent_instance; 9 | }; 10 | 11 | G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) 12 | 13 | // Implements GApplication::activate. 14 | static void my_application_activate(GApplication* application) { 15 | GtkWindow* window = 16 | GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); 17 | GtkHeaderBar *header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); 18 | gtk_widget_show(GTK_WIDGET(header_bar)); 19 | gtk_header_bar_set_title(header_bar, "confwebsite2022"); 20 | gtk_header_bar_set_show_close_button(header_bar, TRUE); 21 | gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); 22 | gtk_window_set_default_size(window, 1280, 720); 23 | gtk_widget_show(GTK_WIDGET(window)); 24 | 25 | g_autoptr(FlDartProject) project = fl_dart_project_new(); 26 | 27 | FlView* view = fl_view_new(project); 28 | gtk_widget_show(GTK_WIDGET(view)); 29 | gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); 30 | 31 | fl_register_plugins(FL_PLUGIN_REGISTRY(view)); 32 | 33 | gtk_widget_grab_focus(GTK_WIDGET(view)); 34 | } 35 | 36 | static void my_application_class_init(MyApplicationClass* klass) { 37 | G_APPLICATION_CLASS(klass)->activate = my_application_activate; 38 | } 39 | 40 | static void my_application_init(MyApplication* self) {} 41 | 42 | MyApplication* my_application_new() { 43 | return MY_APPLICATION(g_object_new(my_application_get_type(), nullptr)); 44 | } 45 | -------------------------------------------------------------------------------- /linux/my_application.h: -------------------------------------------------------------------------------- 1 | #ifndef FLUTTER_MY_APPLICATION_H_ 2 | #define FLUTTER_MY_APPLICATION_H_ 3 | 4 | #include 5 | 6 | G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, 7 | GtkApplication) 8 | 9 | /** 10 | * my_application_new: 11 | * 12 | * Creates a new Flutter-based application. 13 | * 14 | * Returns: a new #MyApplication. 15 | */ 16 | MyApplication* my_application_new(); 17 | 18 | #endif // FLUTTER_MY_APPLICATION_H_ 19 | -------------------------------------------------------------------------------- /macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/xcuserdata/ 7 | -------------------------------------------------------------------------------- /macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Flutter/GeneratedPluginRegistrant.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | import FlutterMacOS 6 | import Foundation 7 | 8 | import path_provider_macos 9 | import url_launcher_macos 10 | 11 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 12 | PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) 13 | UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) 14 | } 15 | -------------------------------------------------------------------------------- /macos/Podfile: -------------------------------------------------------------------------------- 1 | platform :osx, '10.11' 2 | 3 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 4 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 5 | 6 | project 'Runner', { 7 | 'Debug' => :debug, 8 | 'Profile' => :release, 9 | 'Release' => :release, 10 | } 11 | 12 | def parse_KV_file(file, separator='=') 13 | file_abs_path = File.expand_path(file) 14 | if !File.exists? file_abs_path 15 | return []; 16 | end 17 | pods_ary = [] 18 | skip_line_start_symbols = ["#", "/"] 19 | File.foreach(file_abs_path) { |line| 20 | next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } 21 | plugin = line.split(pattern=separator) 22 | if plugin.length == 2 23 | podname = plugin[0].strip() 24 | path = plugin[1].strip() 25 | podpath = File.expand_path("#{path}", file_abs_path) 26 | pods_ary.push({:name => podname, :path => podpath}); 27 | else 28 | puts "Invalid plugin specification: #{line}" 29 | end 30 | } 31 | return pods_ary 32 | end 33 | 34 | def pubspec_supports_macos(file) 35 | file_abs_path = File.expand_path(file) 36 | if !File.exists? file_abs_path 37 | return false; 38 | end 39 | File.foreach(file_abs_path) { |line| 40 | return true if line =~ /^\s*macos:/ 41 | } 42 | return false 43 | end 44 | 45 | target 'Runner' do 46 | use_frameworks! 47 | use_modular_headers! 48 | 49 | # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock 50 | # referring to absolute paths on developers' machines. 51 | ephemeral_dir = File.join('Flutter', 'ephemeral') 52 | symlink_dir = File.join(ephemeral_dir, '.symlinks') 53 | symlink_plugins_dir = File.join(symlink_dir, 'plugins') 54 | system("rm -rf #{symlink_dir}") 55 | system("mkdir -p #{symlink_plugins_dir}") 56 | 57 | # Flutter Pods 58 | generated_xcconfig = parse_KV_file(File.join(ephemeral_dir, 'Flutter-Generated.xcconfig')) 59 | if generated_xcconfig.empty? 60 | puts "Flutter-Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first." 61 | end 62 | generated_xcconfig.map { |p| 63 | if p[:name] == 'FLUTTER_FRAMEWORK_DIR' 64 | symlink = File.join(symlink_dir, 'flutter') 65 | File.symlink(File.dirname(p[:path]), symlink) 66 | pod 'FlutterMacOS', :path => File.join(symlink, File.basename(p[:path])) 67 | end 68 | } 69 | 70 | # Plugin Pods 71 | plugin_pods = parse_KV_file('../.flutter-plugins') 72 | plugin_pods.map { |p| 73 | symlink = File.join(symlink_plugins_dir, p[:name]) 74 | File.symlink(p[:path], symlink) 75 | if pubspec_supports_macos(File.join(symlink, 'pubspec.yaml')) 76 | pod p[:name], :path => File.join(symlink, 'macos') 77 | end 78 | } 79 | end 80 | 81 | # Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. 82 | install! 'cocoapods', :disable_input_output_paths => true 83 | -------------------------------------------------------------------------------- /macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "app_icon_16.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "app_icon_32.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "app_icon_32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "app_icon_64.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "app_icon_128.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "app_icon_256.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "app_icon_256.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "app_icon_512.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "app_icon_512.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "app_icon_1024.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = confwebsite2022 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.example.confwebsite2022 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2020 com.example. All rights reserved. 15 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.network.server 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /macos/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSHumanReadableCopyright 26 | $(PRODUCT_COPYRIGHT) 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController.init() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: confwebsite2022 2 | description: A new Flutter project. 3 | 4 | publish_to: 'none' 5 | 6 | version: 1.0.0+1 7 | 8 | environment: 9 | sdk: '>=2.18.0 <3.0.0' 10 | 11 | dependencies: 12 | cupertino_icons: ^1.0.4 13 | flutter: 14 | sdk: flutter 15 | flutter_localizations: 16 | sdk: flutter 17 | flutter_web_plugins: 18 | sdk: flutter 19 | flutter_svg: ^1.0.3 20 | flutter_svg_provider: ^1.0.3 21 | gap: ^2.0.0 22 | go_router: ^5.2.1 23 | google_fonts: 24 | hooks_riverpod: ^2.1.1 25 | intl: ^0.17.0 26 | styled_text: ^6.0.0 27 | transparent_image: 28 | git: 29 | url: https://github.com/jiyuujin/transparent_image 30 | ref: bugfix/bitmap-test 31 | 32 | dev_dependencies: 33 | build_runner: 34 | flutter_gen_runner: 35 | flutter_lints: ^2.0.1 36 | flutter_test: 37 | sdk: flutter 38 | url_launcher: ^6.0.20 39 | 40 | flutter: 41 | uses-material-design: true 42 | generate: true 43 | assets: 44 | - assets/ 45 | - assets/photo/ 46 | - assets/sponsor/ 47 | -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:confwebsite2022/main.dart'; 9 | import 'package:flutter/material.dart'; 10 | import 'package:flutter_test/flutter_test.dart'; 11 | 12 | void main() { 13 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 14 | // Build our app and trigger a frame. 15 | await tester.pumpWidget(const MyApp()); 16 | 17 | // Verify that our counter starts at 0. 18 | expect(find.text('0'), findsOneWidget); 19 | expect(find.text('1'), findsNothing); 20 | 21 | // Tap the '+' icon and trigger a frame. 22 | await tester.tap(find.byIcon(Icons.add)); 23 | await tester.pump(); 24 | 25 | // Verify that our counter has incremented. 26 | expect(find.text('0'), findsNothing); 27 | expect(find.text('1'), findsOneWidget); 28 | }); 29 | } 30 | -------------------------------------------------------------------------------- /web/assets/discord_logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/assets/flutter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/web/assets/flutter.png -------------------------------------------------------------------------------- /web/assets/flutterkaigi-navbar_dark_logo.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /web/assets/flutterkaigi_logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /web/assets/flutterkaigi_ogp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/web/assets/flutterkaigi_ogp.png -------------------------------------------------------------------------------- /web/assets/github_logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/assets/medium_logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/assets/twitter_logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/assets/twitter_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 17 | -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/web/favicon.png -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterKaigi/2022/2c96d47c5f7d7d05c76be7c62cee7a028a858085/web/icons/Icon-512.png -------------------------------------------------------------------------------- /web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 36 | 37 | FlutterKaigi 2022 38 | 39 | 40 | 41 | 44 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FlutterKaigi 2022", 3 | "short_name": "FlutterKaigi 2022", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "2022年、日本国内でFlutterをメインに扱う技術カンファレンス。FlutterやDartの深い知見を持つ開発者によるセッションを多数企画します。", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /web/service-worker.js: -------------------------------------------------------------------------------- 1 | self.addEventListener('fetch', function(event) {}); 2 | --------------------------------------------------------------------------------