├── .gitignore
├── .metadata
├── .mockend.json
├── README.md
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── top
│ │ │ │ └── ovo
│ │ │ │ └── flutterame
│ │ │ │ └── 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
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── bin
├── add_module.sh
├── add_plugin.sh
├── optimize_cn_network.py
├── run_module.sh
└── run_plugin.sh
├── blog.md
├── 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
├── lib
├── about.dart
├── home.dart
├── main.dart
├── mine.dart
└── routes.dart
├── 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
├── modules
├── gallery
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── datas
│ │ └── gallery_source.json
│ ├── lib
│ │ ├── about.dart
│ │ ├── detail.dart
│ │ ├── environment_config.dart
│ │ ├── galleria.dart
│ │ ├── gallery_home.dart
│ │ ├── main.dart
│ │ └── routes.dart
│ ├── project.txt
│ ├── pubspec.lock
│ ├── pubspec.yaml
│ └── test
│ │ └── widget_test.dart
└── utils
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── lib
│ ├── adapt.dart
│ └── https.dart
│ ├── pubspec.lock
│ ├── pubspec.yaml
│ └── test
│ └── https_test.dart
├── plugins
└── plugin_demo
│ ├── .gitignore
│ ├── .metadata
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── android
│ ├── .gitignore
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ └── gradle-wrapper.properties
│ ├── settings.gradle
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── kotlin
│ │ └── top
│ │ └── ovo
│ │ └── plugin_demo
│ │ ├── PluginDemoPlugin.kt
│ │ ├── PluginView.kt
│ │ └── PluginViewFactory.kt
│ ├── example
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── android
│ │ ├── .gitignore
│ │ ├── app
│ │ │ ├── build.gradle
│ │ │ └── src
│ │ │ │ ├── debug
│ │ │ │ └── AndroidManifest.xml
│ │ │ │ ├── main
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin
│ │ │ │ │ └── top
│ │ │ │ │ │ └── ovo
│ │ │ │ │ │ └── plugin_demo_example
│ │ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res
│ │ │ │ │ ├── drawable-v21
│ │ │ │ │ └── launch_background.xml
│ │ │ │ │ ├── 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
│ ├── 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
│ ├── lib
│ │ └── main.dart
│ ├── 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
│ │ ├── favicon.png
│ │ ├── icons
│ │ ├── Icon-192.png
│ │ └── Icon-512.png
│ │ ├── index.html
│ │ └── manifest.json
│ ├── ios
│ ├── .gitignore
│ ├── Assets
│ │ └── .gitkeep
│ ├── Classes
│ │ ├── PluginDemoPlugin.h
│ │ ├── PluginDemoPlugin.m
│ │ ├── PluginDemoView.swift
│ │ └── SwiftPluginDemoPlugin.swift
│ └── plugin_demo.podspec
│ ├── lib
│ ├── android_hybrid_composition_plugin.dart
│ ├── android_virtual_display_plugin.dart
│ ├── ios_ui_kit_view_plugin.dart
│ ├── plugin_demo.dart
│ ├── plugin_demo_view.dart
│ └── plugin_demo_web.dart
│ ├── macos
│ ├── Classes
│ │ └── PluginDemoPlugin.swift
│ └── plugin_demo.podspec
│ ├── pubspec.lock
│ ├── pubspec.yaml
│ └── test
│ └── plugin_demo_test.dart
├── pubspec.lock
├── pubspec.yaml
├── screenshot
├── cover.png
├── flutterame.webp
└── gallery.webp
├── test
└── widget_test.dart
└── web
├── favicon.png
├── icons
├── Icon-192.png
└── Icon-512.png
├── index.html
└── manifest.json
/.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 | .flutter-plugins
28 | .flutter-plugins-dependencies
29 | .packages
30 | .pub-cache/
31 | .pub/
32 | /build/
33 |
34 | # Web related
35 | lib/generated_plugin_registrant.dart
36 |
37 | # Symbolication related
38 | app.*.symbols
39 |
40 | # Obfuscation related
41 | app.*.map.json
42 |
--------------------------------------------------------------------------------
/.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: 78910062997c3a836feee883712c241a5fd22983
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/.mockend.json:
--------------------------------------------------------------------------------
1 | {
2 | "Comment": {
3 | "body": "string",
4 | "title": "string"
5 | },
6 | "Post": {
7 | "title": "string",
8 | "views": "int",
9 | "published": "boolean",
10 | "createdAt": "date",
11 | "comments": "Comment[]"
12 | }
13 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Flutterame
2 |
3 | **Flutterame = Flutter + Frame**
4 |
5 | 
6 |
7 | ## Getting Started
8 |
9 | 添加组件:
10 |
11 | ```
12 | bin/add_module.sh module1
13 | ```
14 |
15 | 中国大陆的优化网速:
16 | ```
17 | bin/optimize_cn_network.py android/
18 | bin/optimize_cn_network.py module1/.android/
19 | ```
20 |
21 | 运行组件:
22 |
23 | ```
24 | bin/run_module.sh module1
25 | ```
26 | 运行整个app:
27 | ```
28 | 还是 flutter run
29 | ```
30 |
31 | 组件中运行|app中运行
32 | :----:|:----:
33 | |
34 |
35 | 博客:[Flutter组件化框架](https://juejin.cn/post/6913460020529070087)
36 |
37 | [添加utils组件](modules/utils/README.md)
--------------------------------------------------------------------------------
/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 "top.ovo.flutterame"
42 | minSdkVersion 20
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 |
8 |
13 |
20 |
24 |
28 |
33 |
37 |
38 |
39 |
40 |
41 |
42 |
44 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/top/ovo/flutterame/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package top.ovo.flutterame
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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/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 | maven { url 'https://maven.aliyun.com/repository/google'} // google()
5 | maven { url 'https://maven.aliyun.com/repository/jcenter'} // 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 | maven { url 'https://maven.aliyun.com/repository/google'} // google()
17 | maven { url 'https://maven.aliyun.com/repository/jcenter'} // 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 |
--------------------------------------------------------------------------------
/bin/add_module.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [ -z $1 ];then
4 | read -p "Input your module name:" module_name
5 | else
6 | module_name=$1
7 | fi
8 |
9 | MODULES_DIR="modules/"
10 |
11 | if [ ! -d ${MODULES_DIR} ];then
12 | mkdir ${MODULES_DIR}
13 | fi
14 |
15 | CURRENT_DIR=`pwd`
16 | cd $MODULES_DIR
17 | flutter create -t module --org top.ovo $module_name
18 | cd ${CURRENT_DIR}
19 |
20 | #TODO insert dependencies in pubspec.yaml
21 | #TODO Chinese network optimat
--------------------------------------------------------------------------------
/bin/add_plugin.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [ -z $1 ];then
4 | read -p "Input your plugin name:" plugin_name
5 | else
6 | plugin_name=$1
7 | fi
8 |
9 | if [ -z $2 ];then
10 | read -p "Input your platforms('android,ios,macos,web'):" platforms
11 | else
12 | platforms=$2
13 | fi
14 |
15 | PLUGINS_DIR="plugins/"
16 |
17 | if [ ! -d ${PLUGINS_DIR} ];then
18 | mkdir ${PLUGINS_DIR}
19 | fi
20 |
21 | CURRENT_DIR=`pwd`
22 | cd $PLUGINS_DIR
23 | flutter create -t plugin --platforms $platforms --org top.ovo $plugin_name
24 | cd ${CURRENT_DIR}
25 |
26 | #TODO insert dependencies in pubspec.yaml
27 | #TODO Chinese network optimat
--------------------------------------------------------------------------------
/bin/optimize_cn_network.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 |
3 | import os
4 | import sys
5 | import re
6 | from time import strftime, localtime
7 | from ezutils.files import readlines, writelines
8 | dir = os.path.abspath(os.path.dirname(__file__))
9 | parent_dir = os.path.dirname(dir)
10 |
11 |
12 | def replace_lines(target_reg, *, by_lines, begin_reg, end_reg, in_lines):
13 | re_begin = re.compile(begin_reg)
14 | re_target = re.compile(target_reg)
15 | re_end = re.compile(end_reg)
16 |
17 | indexs = []
18 | state = 'find_begin'
19 | index = -1
20 | for line in in_lines:
21 | index += 1
22 | if state == 'find_begin' and re_begin.match(line):
23 | state = 'find_target'
24 | continue
25 | if state == 'find_target' and re_target.match(line):
26 | indexs.insert(0, index)
27 | state == 'find_end'
28 | continue
29 | if state == 'find_end' and re_end.match(line):
30 | state == 'find_begin'
31 | continue
32 |
33 | if len(indexs) == 0:
34 | return None
35 |
36 | new_lines = in_lines
37 | for index in indexs:
38 | new_lines = new_lines[:index]+by_lines+new_lines[index+1:]
39 | return new_lines
40 |
41 |
42 | def optimize_cn_network(target_file):
43 | print(f'Optimizing cn network: {target_file}')
44 | lines = readlines(target_file)
45 | has_google = True
46 | new_lines = replace_lines(
47 | r'\s*google().*',
48 | by_lines=[
49 | " maven {"
50 | " url 'https://maven.aliyun.com/repository/google'}"
51 | " // google()"],
52 | begin_reg=r'\s*repositories\s*{.*',
53 | end_reg=r'\s*}.*',
54 | in_lines=lines)
55 |
56 | if(new_lines is None):
57 | has_google = False
58 | new_lines = lines
59 |
60 | new_lines = replace_lines(
61 | r'\s*jcenter().*',
62 | by_lines=[
63 | " maven {"
64 | " url 'https://maven.aliyun.com/repository/jcenter'}"
65 | " // jcenter()"],
66 | begin_reg=r'\s*repositories\s*{.*',
67 | end_reg=r'\s*}.*',
68 | in_lines=new_lines)
69 |
70 | if new_lines is None and not has_google:
71 | print(f"No line to optimize in file: {target_file}")
72 | return
73 |
74 | writelines(new_lines, f'{target_file}.tmp')
75 | current_time = strftime("%Y-%m-%d_%H:%M:%S", localtime())
76 | os.rename(target_file, f'{target_file}.backup_{current_time}')
77 | os.rename(f'{target_file}.tmp', target_file)
78 |
79 |
80 | if __name__ == "__main__":
81 | if len(sys.argv) == 1:
82 | print(
83 | "Input android project dir("
84 | "example: 'android/' or 'modules/xxx/.android' ):")
85 | target_dir = input()
86 | else:
87 | target_dir = sys.argv[1]
88 |
89 | target_file = os.path.join(parent_dir, target_dir, 'build.gradle')
90 | optimize_cn_network(target_file)
91 |
--------------------------------------------------------------------------------
/bin/run_module.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [ -z $1 ];then
4 | read -p "Input your module name:" module_name
5 | else
6 | module_name=$1
7 | fi
8 |
9 | if [ -d modules/$module_name/.android ];then
10 | bin/optimize_cn_network.py modules/$module_name/.android
11 | fi
12 |
13 | last_dir=`pwd`
14 |
15 | cd modules/$module_name/
16 | flutter run --dart-define=IS_RUN_ALONE=true
17 | cd $last_dir
18 |
19 |
--------------------------------------------------------------------------------
/bin/run_plugin.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [ -z $1 ];then
4 | read -p "Input your plugin name:" plugin_name
5 | else
6 | plugin_name=$1
7 | fi
8 |
9 | if [ -d plugins/$plugin_name/.android ];then
10 | bin/optimize_cn_network.py plugins/$plugin_name/.android
11 | fi
12 |
13 | last_dir=`pwd`
14 |
15 | cd plugins/$plugin_name/example
16 | flutter run --dart-define=IS_RUN_ALONE=true
17 | cd $last_dir
18 |
19 |
--------------------------------------------------------------------------------
/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 | - plugin_demo (0.0.1):
4 | - Flutter
5 |
6 | DEPENDENCIES:
7 | - Flutter (from `Flutter`)
8 | - plugin_demo (from `.symlinks/plugins/plugin_demo/ios`)
9 |
10 | EXTERNAL SOURCES:
11 | Flutter:
12 | :path: Flutter
13 | plugin_demo:
14 | :path: ".symlinks/plugins/plugin_demo/ios"
15 |
16 | SPEC CHECKSUMS:
17 | Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
18 | plugin_demo: 04641716cc533ed7529cee6890ffad3f337954e1
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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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 | NSAppTransportSecurity
6 |
7 | NSAllowsArbitraryLoads
8 |
9 |
10 | CFBundleDevelopmentRegion
11 | $(DEVELOPMENT_LANGUAGE)
12 | CFBundleExecutable
13 | $(EXECUTABLE_NAME)
14 | CFBundleIdentifier
15 | $(PRODUCT_BUNDLE_IDENTIFIER)
16 | CFBundleInfoDictionaryVersion
17 | 6.0
18 | CFBundleName
19 | flutterame
20 | CFBundlePackageType
21 | APPL
22 | CFBundleShortVersionString
23 | $(FLUTTER_BUILD_NAME)
24 | CFBundleSignature
25 | ????
26 | CFBundleVersion
27 | $(FLUTTER_BUILD_NUMBER)
28 | LSRequiresIPhoneOS
29 |
30 | UILaunchStoryboardName
31 | LaunchScreen
32 | UIMainStoryboardFile
33 | Main
34 | UISupportedInterfaceOrientations
35 |
36 | UIInterfaceOrientationPortrait
37 | UIInterfaceOrientationLandscapeLeft
38 | UIInterfaceOrientationLandscapeRight
39 |
40 | UISupportedInterfaceOrientations~ipad
41 |
42 | UIInterfaceOrientationPortrait
43 | UIInterfaceOrientationPortraitUpsideDown
44 | UIInterfaceOrientationLandscapeLeft
45 | UIInterfaceOrientationLandscapeRight
46 |
47 | UIViewControllerBasedStatusBarAppearance
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/lib/about.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | class About extends StatelessWidget{
3 | @override
4 | Widget build(BuildContext context) {
5 | return Scaffold(
6 | appBar: AppBar(
7 | // Here we take the value from the MyHomePage object that was created by
8 | // the App.build method, and use it to set our appbar title.
9 | title: Hero(
10 | tag: 'about_title',
11 | child: Material(
12 | color: Colors.orange,
13 | child: SizedBox(
14 | child: Column(
15 | mainAxisAlignment: MainAxisAlignment.center,
16 | crossAxisAlignment: CrossAxisAlignment.start,
17 | children: [Text("about",
18 | style: TextStyle(
19 | fontSize: 20,
20 | fontWeight: FontWeight.w500
21 | )
22 | ),],
23 | ),
24 | width: 300,
25 | height:40,
26 | ),
27 | )
28 | ),
29 | ),
30 | body: Center(
31 | child: Text("about"),
32 | ),
33 | );
34 | }
35 | }
--------------------------------------------------------------------------------
/lib/home.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:gallery/galleria.dart';
3 | import 'package:plugin_demo/plugin_demo_view.dart';
4 | import 'package:flutterame/mine.dart';
5 |
6 | class MyHomePage extends StatefulWidget {
7 | MyHomePage({Key? key, required this.title}) : super(key: key);
8 |
9 | final String title;
10 |
11 | @override
12 | _MyHomePageState createState() => _MyHomePageState();
13 | }
14 |
15 | enum TabItem { galleria, plugin, mine }
16 |
17 | // https://api.flutter.dev/flutter/material/Icons-class.html
18 | const TabItems = {
19 | TabItem.galleria: {
20 | 'icon': Icons.extension,
21 | 'title': '组件',
22 | 'widget': Galleria()
23 | },
24 | TabItem.plugin: {
25 | 'icon': Icons.power,
26 | 'title': '插件',
27 | 'widget': PluginDemoView()
28 | },
29 | TabItem.mine: {'icon': Icons.face, 'title': '我的', 'widget': Mine()}
30 | };
31 |
32 | TabItem _getTypeByIndex(int index) {
33 | var type = TabItem.galleria;
34 | TabItems.forEach((TabItem key, Map value) {
35 | if (key.index == index) {
36 | type = key;
37 | }
38 | });
39 | return type;
40 | }
41 |
42 | class _MyHomePageState extends State {
43 | int _selectIndex = 0;
44 | TabItem _currentTab = TabItem.galleria;
45 | void _onItemTapped(int index) {
46 | setState(() {
47 | var tab = _getTypeByIndex(index);
48 | _selectIndex = index;
49 | _currentTab = tab;
50 | print('_selectIndex($_selectIndex)');
51 | print('_currentTab($_currentTab)');
52 | });
53 | }
54 |
55 | List _createTabs() {
56 | List list = [];
57 | TabItems.forEach((TabItem key, Map value) {
58 | list.add(BottomNavigationBarItem(
59 | icon: Icon(value['icon']), label: value['title']));
60 | });
61 | return list;
62 | }
63 |
64 | @override
65 | Widget build(BuildContext context) {
66 | return Scaffold(
67 | appBar: AppBar(
68 | title: Text(widget.title),
69 | ),
70 | body: TabItems[_currentTab]!['widget'] as Widget?,
71 | bottomNavigationBar: BottomNavigationBar(
72 | items: _createTabs(),
73 | currentIndex: _selectIndex,
74 | onTap: _onItemTapped,
75 | ),
76 | );
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutterame/home.dart';
3 | import 'package:flutterame/routes.dart';
4 |
5 | void main() {
6 | runApp(MyApp());
7 | }
8 |
9 | class MyApp extends StatelessWidget {
10 | // This widget is the root of your application.
11 | @override
12 | Widget build(BuildContext context) {
13 | return MaterialApp(
14 | title: 'Flutter Demo',
15 | theme: ThemeData(
16 | // This is the theme of your application.
17 | //
18 | // Try running your application with "flutter run". You'll see the
19 | // application has a blue toolbar. Then, without quitting the app, try
20 | // changing the primarySwatch below to Colors.green and then invoke
21 | // "hot reload" (press "r" in the console where you ran "flutter run",
22 | // or simply save your changes to "hot reload" in a Flutter IDE).
23 | // Notice that the counter didn't reset back to zero; the application
24 | // is not restarted.
25 | primarySwatch: Colors.orange,
26 | // This makes the visual density adapt to the platform that you run
27 | // the app on. For desktop platforms, the controls will be smaller and
28 | // closer together (more dense) than on mobile platforms.
29 | visualDensity: VisualDensity.adaptivePlatformDensity,
30 | ),
31 | home: MyHomePage(title: 'Flutterame'),
32 | initialRoute: '/',
33 | onGenerateRoute: RouteGenerator.generateRoute,
34 | );
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/lib/mine.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class Mine extends StatelessWidget {
4 | const Mine();
5 |
6 | @override
7 | Widget build(BuildContext context) {
8 | return Column(children: [
9 | Expanded(flex: 1, child: Center(child: Text("mine"))),
10 | SizedBox(
11 | height: 100,
12 | child: Row(
13 | mainAxisAlignment: MainAxisAlignment.spaceEvenly,
14 | children: [
15 | Hero(
16 | tag: 'about_title',
17 | child: OutlineButton(
18 | onPressed: () => {Navigator.pushNamed(context, "/about")},
19 | child: Text("about"),
20 | )),
21 | OutlineButton(
22 | onPressed: () =>
23 | {Navigator.pushNamed(context, "/gallery/about")},
24 | child: Text("gallery about"),
25 | )
26 | ],
27 | ))
28 | ]);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/lib/routes.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutterame/about.dart';
3 | import 'package:flutterame/home.dart';
4 | import 'package:gallery/routes.dart';
5 |
6 | class RouteGenerator {
7 | //配置路由
8 | static final routes = {
9 | ...GalleryRouteGenerator.routes,
10 | "/": (context, {arguments}) => MyHomePage(title: '画廊'),
11 | "/about": (context, {arguments}) => About(),
12 | };
13 |
14 | static Route generateRoute(RouteSettings settings) {
15 | final String? name = settings.name;
16 | final Function? pageContentBuilder = routes[name!];
17 | if (pageContentBuilder != null) {
18 | return PageRouteBuilder(
19 | pageBuilder: (context, __, ___) =>
20 | pageContentBuilder(context, arguments: settings.arguments),
21 | transitionDuration: Duration(milliseconds: 150),
22 | transitionsBuilder: (_, a, __, c) =>
23 | FadeTransition(opacity: a, child: c));
24 |
25 | // final Route route = MaterialPageRoute(
26 | // builder: (context) =>
27 | // å(context, arguments: settings.arguments));
28 | // return route;
29 | } else {
30 | return _errorPage('找不到页面');
31 | }
32 | }
33 |
34 | static Route _errorPage(msg) {
35 | return MaterialPageRoute(builder: (_) {
36 | return Scaffold(
37 | appBar: AppBar(title: Text('未知页面')), body: Center(child: Text(msg)));
38 | });
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/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 plugin_demo
9 |
10 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
11 | PluginDemoPlugin.register(with: registry.registrar(forPlugin: "PluginDemoPlugin"))
12 | }
13 |
--------------------------------------------------------------------------------
/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 flutter_root
13 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
14 | unless File.exist?(generated_xcode_build_settings_path)
15 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
16 | end
17 |
18 | File.foreach(generated_xcode_build_settings_path) do |line|
19 | matches = line.match(/FLUTTER_ROOT\=(.*)/)
20 | return matches[1].strip if matches
21 | end
22 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
23 | end
24 |
25 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
26 |
27 | flutter_macos_podfile_setup
28 |
29 | target 'Runner' do
30 | use_frameworks!
31 | use_modular_headers!
32 |
33 | flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
34 | end
35 |
36 | post_install do |installer|
37 | installer.pods_project.targets.each do |target|
38 | flutter_additional_macos_build_settings(target)
39 | end
40 | end
41 |
--------------------------------------------------------------------------------
/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 |
37 |
38 |
39 |
40 |
41 |
42 |
52 |
54 |
60 |
61 |
62 |
63 |
64 |
65 |
71 |
73 |
79 |
80 |
81 |
82 |
84 |
85 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/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/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/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 = flutterame
9 |
10 | // The application's bundle identifier
11 | PRODUCT_BUNDLE_IDENTIFIER = top.ovo.flutterame
12 |
13 | // The copyright displayed in application information
14 | PRODUCT_COPYRIGHT = Copyright © 2021 top.ovo. 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 | com.apple.security.network.client
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/macos/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | NSAppTransportSecurity
6 |
7 | NSAllowsArbitraryLoads
8 |
9 |
10 |
11 | CFBundleDevelopmentRegion
12 | $(DEVELOPMENT_LANGUAGE)
13 | CFBundleExecutable
14 | $(EXECUTABLE_NAME)
15 | CFBundleIconFile
16 |
17 | CFBundleIdentifier
18 | $(PRODUCT_BUNDLE_IDENTIFIER)
19 | CFBundleInfoDictionaryVersion
20 | 6.0
21 | CFBundleName
22 | $(PRODUCT_NAME)
23 | CFBundlePackageType
24 | APPL
25 | CFBundleShortVersionString
26 | $(FLUTTER_BUILD_NAME)
27 | CFBundleVersion
28 | $(FLUTTER_BUILD_NUMBER)
29 | LSMinimumSystemVersion
30 | $(MACOSX_DEPLOYMENT_TARGET)
31 | NSHumanReadableCopyright
32 | $(PRODUCT_COPYRIGHT)
33 | NSMainNibFile
34 | MainMenu
35 | NSPrincipalClass
36 | NSApplication
37 |
38 |
39 |
--------------------------------------------------------------------------------
/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 | com.apple.security.network.server
8 |
9 | com.apple.security.network.client
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/modules/gallery/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .dart_tool/
3 |
4 | .packages
5 | .pub/
6 |
7 | .idea/
8 | .vagrant/
9 | .sconsign.dblite
10 | .svn/
11 |
12 | *.swp
13 | profile
14 |
15 | DerivedData/
16 |
17 | .generated/
18 |
19 | *.pbxuser
20 | *.mode1v3
21 | *.mode2v3
22 | *.perspectivev3
23 |
24 | !default.pbxuser
25 | !default.mode1v3
26 | !default.mode2v3
27 | !default.perspectivev3
28 |
29 | xcuserdata
30 |
31 | *.moved-aside
32 |
33 | *.pyc
34 | *sync/
35 | Icon?
36 | .tags*
37 |
38 | build/
39 | .android/
40 | .ios/
41 | .flutter-plugins
42 | .flutter-plugins-dependencies
43 |
44 | # Symbolication related
45 | app.*.symbols
46 |
47 | # Obfuscation related
48 | app.*.map.json
49 |
--------------------------------------------------------------------------------
/modules/gallery/.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: 78910062997c3a836feee883712c241a5fd22983
8 | channel: stable
9 |
10 | project_type: module
11 |
--------------------------------------------------------------------------------
/modules/gallery/README.md:
--------------------------------------------------------------------------------
1 | # gallery
2 |
3 | A new flutter module project.
4 |
5 | ## Getting Started
6 |
7 | For help getting started with Flutter, view our online
8 | [documentation](https://flutter.dev/).
9 |
10 | For instructions integrating Flutter modules to your existing applications,
11 | see the [add-to-app documentation](https://flutter.dev/docs/development/add-to-app).
12 |
--------------------------------------------------------------------------------
/modules/gallery/datas/gallery_source.json:
--------------------------------------------------------------------------------
1 | {
2 | "galleries": [
3 | {
4 | "name": "《每天和每天不一样》系列1-8辑",
5 | "cover": "http://pics.ovo.top/diff_ev_day_1608473963036010zu1nw8kflrqoih5p.jpg",
6 | "page": {
7 | "index": 0,
8 | "items": [
9 | {
10 | "type": "image",
11 | "url": "http://pics.ovo.top/diff_ev_day_16084739630360005qxwl7rj2guyezpi.jpg"
12 | },
13 | {
14 | "type": "image",
15 | "url": "http://pics.ovo.top/diff_ev_day_16084739630360016qxep4hnv3o9mjwc.jpg"
16 | }
17 | ]
18 | }
19 | }
20 | ]
21 | }
--------------------------------------------------------------------------------
/modules/gallery/lib/about.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class GalleryAbout extends StatelessWidget {
4 | @override
5 | Widget build(BuildContext context) {
6 | return Scaffold(
7 | appBar: AppBar(
8 | title: Text("about gallery"),
9 | ),
10 | body: Center(
11 | child: Text("about gallery"),
12 | ),
13 | );
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/modules/gallery/lib/detail.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class Detail extends StatelessWidget {
4 | final gallery;
5 | Detail({this.gallery});
6 | @override
7 | Widget build(BuildContext context) {
8 | bool hasName = this.gallery != null && this.gallery["name"] != null;
9 | bool hasCover = this.gallery != null && this.gallery["cover"] != null;
10 | return Scaffold(
11 | appBar: AppBar(
12 | // Here we take the value from the MyHomePage object that was created by
13 | // the App.build method, and use it to set our appbar title.
14 | title: Hero(
15 | tag: 'title',
16 | child: Material(
17 | color: Colors.transparent,
18 | child: Text(hasName ? this.gallery["name"] : "detail",
19 | style: TextStyle(color: Colors.white, fontSize: 20))),
20 | ),
21 | ),
22 | body: Container(
23 | color: Colors.orange,
24 | child: Center(
25 | child: hasCover
26 | ? Hero(
27 | tag: 'cover',
28 | child: Image.network(this.gallery["cover"],
29 | fit: BoxFit.cover))
30 | : Text("cover not found"))),
31 | );
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/modules/gallery/lib/environment_config.dart:
--------------------------------------------------------------------------------
1 | class EnvironmentConfig {
2 | static const IS_RUN_ALONE =
3 | bool.fromEnvironment('IS_RUN_ALONE', defaultValue: false);
4 | }
5 |
--------------------------------------------------------------------------------
/modules/gallery/lib/galleria.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'dart:convert';
3 | import 'package:gallery/environment_config.dart';
4 |
5 | var fontColor = Colors.white;
6 | var cardColor = Colors.orange;
7 |
8 | class Galleria extends StatelessWidget {
9 | const Galleria();
10 | Widget _buildItem(context, gallery) {
11 | return InkWell(
12 | onTap: () {
13 | Navigator.pushNamed(context, "/gallery/detail", arguments: gallery);
14 | },
15 | child: AspectRatio(
16 | aspectRatio: 4 / 3,
17 | child: Card(
18 | margin: EdgeInsets.all(8),
19 | color: cardColor,
20 | shape: ContinuousRectangleBorder(
21 | borderRadius: BorderRadius.circular(32),
22 | ),
23 | child: Container(
24 | child: Column(
25 | crossAxisAlignment: CrossAxisAlignment.start,
26 | mainAxisAlignment: MainAxisAlignment.spaceEvenly,
27 | children: [
28 | Container(
29 | child: Hero(
30 | tag: 'title',
31 | child: Material(
32 | color: Colors.transparent,
33 | child: Text(gallery["name"],
34 | style: TextStyle(
35 | color: fontColor, fontSize: 20)))),
36 | padding: EdgeInsets.only(left: 8)),
37 | AspectRatio(
38 | aspectRatio: 16 / 9,
39 | child: Hero(
40 | tag: 'cover',
41 | child: Image.network(gallery["cover"],
42 | fit: BoxFit.cover))),
43 | Container(
44 | child: Text('${gallery["page"].length}P',
45 | style: TextStyle(color: fontColor, fontSize: 8)),
46 | padding: EdgeInsets.only(right: 8),
47 | alignment: Alignment.centerRight,
48 | ),
49 | ])))));
50 | }
51 |
52 | Widget _buildLoaded(data) {
53 | var galleries = data['galleries'];
54 | return Center(
55 | child: AspectRatio(
56 | aspectRatio: 0.8,
57 | child: Container(
58 | // decoration: BoxDecoration(color: Colors.red),
59 | child: ListView.builder(
60 | itemBuilder: (context, index) {
61 | var gallery = galleries[index];
62 | return _buildItem(context, gallery);
63 | },
64 | itemCount: galleries.length,
65 | ))));
66 | }
67 |
68 | @override
69 | Widget build(BuildContext context) {
70 | const isRunAlone = EnvironmentConfig.IS_RUN_ALONE;
71 | return FutureBuilder(
72 | future: DefaultAssetBundle.of(context).loadString(isRunAlone
73 | ? 'datas/gallery_source.json'
74 | : 'packages/gallery/datas/gallery_source.json'),
75 | builder: (context, snapshot) {
76 | switch (snapshot.connectionState) {
77 | case ConnectionState.none:
78 | case ConnectionState.waiting:
79 | return Center(child: Text('Loading...'));
80 | default:
81 | if (snapshot.hasError)
82 | return Center(child: Text('Error: ${snapshot.error}'));
83 | else {
84 | //若_calculation执行正常完成
85 | const json = const JsonCodec();
86 | var data = json.decode(snapshot.data.toString());
87 | return _buildLoaded(data);
88 | }
89 | }
90 | });
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/modules/gallery/lib/gallery_home.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:gallery/galleria.dart';
3 |
4 | class MyHomePage extends StatelessWidget {
5 | MyHomePage({Key? key, required this.title}) : super(key: key);
6 |
7 | void _gotoAbout(BuildContext context) {
8 | // Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => GalleryAbout()));
9 | Navigator.pushNamed(context, "/gallery/about");
10 | }
11 |
12 | final String title;
13 | @override
14 | Widget build(BuildContext context) {
15 | return Scaffold(
16 | appBar: AppBar(
17 | title: Text(title),
18 | ),
19 | body: Center(child: Galleria()),
20 | floatingActionButton: FloatingActionButton(
21 | onPressed: () {
22 | this._gotoAbout(context);
23 | },
24 | child: Text("About"),
25 | ),
26 | );
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/modules/gallery/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:gallery/routes.dart';
3 | import 'package:gallery/gallery_home.dart';
4 |
5 | void main() => runApp(MyApp());
6 |
7 | class MyApp extends StatelessWidget {
8 | @override
9 | Widget build(BuildContext context) {
10 | return MaterialApp(
11 | title: 'Flutter Demo',
12 | theme: ThemeData(
13 | primarySwatch: Colors.blue,
14 | ),
15 | home: MyHomePage(title: 'Module: gallery'),
16 | initialRoute: '/',
17 | onGenerateRoute: GalleryRouteGenerator.generateRoute,
18 | );
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/modules/gallery/lib/routes.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:gallery/gallery_home.dart';
3 | import 'package:gallery/detail.dart';
4 | import 'package:gallery/about.dart';
5 |
6 | class GalleryRouteGenerator {
7 | //配置路由
8 | static final routes = {
9 | "/": (context, {arguments}) => MyHomePage(title: '画廊'),
10 | "/gallery/detail": (context, {arguments}) => Detail(gallery: arguments),
11 | "/gallery/about": (context, {arguments}) => GalleryAbout(),
12 | };
13 |
14 | static Route generateRoute(RouteSettings settings) {
15 | final String? name = settings.name;
16 | final Function? pageContentBuilder = routes[name!];
17 | if (pageContentBuilder != null) {
18 | final Route route = MaterialPageRoute(
19 | builder: (context) =>
20 | pageContentBuilder(context, arguments: settings.arguments));
21 | return route;
22 | } else {
23 | return _errorPage('找不到页面');
24 | }
25 | }
26 |
27 | static Route _errorPage(msg) {
28 | return MaterialPageRoute(builder: (_) {
29 | return Scaffold(
30 | appBar: AppBar(title: Text('未知页面')), body: Center(child: Text(msg)));
31 | });
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/modules/gallery/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | async:
5 | dependency: transitive
6 | description:
7 | name: async
8 | url: "https://pub.flutter-io.cn"
9 | source: hosted
10 | version: "2.5.0"
11 | boolean_selector:
12 | dependency: transitive
13 | description:
14 | name: boolean_selector
15 | url: "https://pub.flutter-io.cn"
16 | source: hosted
17 | version: "2.1.0"
18 | characters:
19 | dependency: transitive
20 | description:
21 | name: characters
22 | url: "https://pub.flutter-io.cn"
23 | source: hosted
24 | version: "1.1.0"
25 | charcode:
26 | dependency: transitive
27 | description:
28 | name: charcode
29 | url: "https://pub.flutter-io.cn"
30 | source: hosted
31 | version: "1.2.0"
32 | clock:
33 | dependency: transitive
34 | description:
35 | name: clock
36 | url: "https://pub.flutter-io.cn"
37 | source: hosted
38 | version: "1.1.0"
39 | collection:
40 | dependency: transitive
41 | description:
42 | name: collection
43 | url: "https://pub.flutter-io.cn"
44 | source: hosted
45 | version: "1.15.0"
46 | cupertino_icons:
47 | dependency: "direct main"
48 | description:
49 | name: cupertino_icons
50 | url: "https://pub.flutter-io.cn"
51 | source: hosted
52 | version: "1.0.2"
53 | fake_async:
54 | dependency: transitive
55 | description:
56 | name: fake_async
57 | url: "https://pub.flutter-io.cn"
58 | source: hosted
59 | version: "1.2.0"
60 | flutter:
61 | dependency: "direct main"
62 | description: flutter
63 | source: sdk
64 | version: "0.0.0"
65 | flutter_test:
66 | dependency: "direct dev"
67 | description: flutter
68 | source: sdk
69 | version: "0.0.0"
70 | matcher:
71 | dependency: transitive
72 | description:
73 | name: matcher
74 | url: "https://pub.flutter-io.cn"
75 | source: hosted
76 | version: "0.12.10"
77 | meta:
78 | dependency: transitive
79 | description:
80 | name: meta
81 | url: "https://pub.flutter-io.cn"
82 | source: hosted
83 | version: "1.3.0"
84 | path:
85 | dependency: transitive
86 | description:
87 | name: path
88 | url: "https://pub.flutter-io.cn"
89 | source: hosted
90 | version: "1.8.0"
91 | sky_engine:
92 | dependency: transitive
93 | description: flutter
94 | source: sdk
95 | version: "0.0.99"
96 | source_span:
97 | dependency: transitive
98 | description:
99 | name: source_span
100 | url: "https://pub.flutter-io.cn"
101 | source: hosted
102 | version: "1.8.0"
103 | stack_trace:
104 | dependency: transitive
105 | description:
106 | name: stack_trace
107 | url: "https://pub.flutter-io.cn"
108 | source: hosted
109 | version: "1.10.0"
110 | stream_channel:
111 | dependency: transitive
112 | description:
113 | name: stream_channel
114 | url: "https://pub.flutter-io.cn"
115 | source: hosted
116 | version: "2.1.0"
117 | string_scanner:
118 | dependency: transitive
119 | description:
120 | name: string_scanner
121 | url: "https://pub.flutter-io.cn"
122 | source: hosted
123 | version: "1.1.0"
124 | term_glyph:
125 | dependency: transitive
126 | description:
127 | name: term_glyph
128 | url: "https://pub.flutter-io.cn"
129 | source: hosted
130 | version: "1.2.0"
131 | test_api:
132 | dependency: transitive
133 | description:
134 | name: test_api
135 | url: "https://pub.flutter-io.cn"
136 | source: hosted
137 | version: "0.2.19"
138 | typed_data:
139 | dependency: transitive
140 | description:
141 | name: typed_data
142 | url: "https://pub.flutter-io.cn"
143 | source: hosted
144 | version: "1.3.0"
145 | vector_math:
146 | dependency: transitive
147 | description:
148 | name: vector_math
149 | url: "https://pub.flutter-io.cn"
150 | source: hosted
151 | version: "2.1.0"
152 | sdks:
153 | dart: ">=2.12.0 <3.0.0"
154 |
--------------------------------------------------------------------------------
/modules/gallery/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: gallery
2 | description: A new flutter module project.
3 |
4 | # The following defines the version and build number for your application.
5 | # A version number is three numbers separated by dots, like 1.2.43
6 | # followed by an optional build number separated by a +.
7 | # Both the version and the builder number may be overridden in flutter
8 | # build by specifying --build-name and --build-number, respectively.
9 | # In Android, build-name is used as versionName while build-number used as versionCode.
10 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning
11 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
12 | # Read more about iOS versioning at
13 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
14 | #
15 | # This version is used _only_ for the Runner app, which is used if you just do
16 | # a `flutter run` or a `flutter make-host-app-editable`. It has no impact
17 | # on any other native host app that you embed your Flutter project into.
18 | version: 1.0.0+1
19 |
20 | environment:
21 | sdk: '>=2.12.0 <3.0.0'
22 |
23 | dependencies:
24 | flutter:
25 | sdk: flutter
26 |
27 | # The following adds the Cupertino Icons font to your application.
28 | # Use with the CupertinoIcons class for iOS style icons.
29 | cupertino_icons: ^1.0.2
30 |
31 | dev_dependencies:
32 | flutter_test:
33 | sdk: flutter
34 |
35 | # For information on the generic Dart part of this file, see the
36 | # following page: https://dart.dev/tools/pub/pubspec
37 |
38 | flutter:
39 | # The following line ensures that the Material Icons font is
40 | # included with your application, so that you can use the icons in
41 | # the material Icons class.
42 | uses-material-design: true
43 |
44 | # To add Flutter specific assets to your application, add an assets section,
45 | # like this:
46 | assets:
47 | - datas/gallery_source.json
48 | # - images/a_dot_burr.jpeg
49 | # - images/a_dot_ham.jpeg
50 |
51 | # An image asset can refer to one or more resolution-specific "variants", see
52 | # https://flutter.dev/assets-and-images/#resolution-aware.
53 |
54 | # For details regarding adding assets from package dependencies, see
55 | # https://flutter.dev/assets-and-images/#from-packages
56 |
57 | # To add Flutter specific custom fonts to your application, add a fonts
58 | # section here, in this "flutter" section. Each entry in this list should
59 | # have a "family" key with the font family name, and a "fonts" key with a
60 | # list giving the asset and other descriptors for the font. For
61 | # example:
62 | # fonts:
63 | # - family: Schyler
64 | # fonts:
65 | # - asset: fonts/Schyler-Regular.ttf
66 | # - asset: fonts/Schyler-Italic.ttf
67 | # style: italic
68 | # - family: Trajan Pro
69 | # fonts:
70 | # - asset: fonts/TrajanPro.ttf
71 | # - asset: fonts/TrajanPro_Bold.ttf
72 | # weight: 700
73 | #
74 | # For details regarding fonts from package dependencies,
75 | # see https://flutter.dev/custom-fonts/#from-packages
76 |
77 |
78 | # This section identifies your Flutter project as a module meant for
79 | # embedding in a native host app. These identifiers should _not_ ordinarily
80 | # be changed after generation - they are used to ensure that the tooling can
81 | # maintain consistency when adding or modifying assets and plugins.
82 | # They also do not have any bearing on your native host application's
83 | # identifiers, which may be completely independent or the same as these.
84 | module:
85 | androidX: true
86 | androidPackage: top.ovo.gallery
87 | iosBundleIdentifier: top.ovo.gallery
88 |
--------------------------------------------------------------------------------
/modules/gallery/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:flutter/material.dart';
9 | import 'package:flutter_test/flutter_test.dart';
10 |
11 | import 'package:gallery/main.dart';
12 |
13 | void main() {
14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async {
15 | // Build our app and trigger a frame.
16 | await tester.pumpWidget(MyApp());
17 |
18 | // Verify that our counter starts at 0.
19 | expect(find.text('0'), findsOneWidget);
20 | expect(find.text('1'), findsNothing);
21 |
22 | // Tap the '+' icon and trigger a frame.
23 | await tester.tap(find.byIcon(Icons.add));
24 | await tester.pump();
25 |
26 | // Verify that our counter has incremented.
27 | expect(find.text('0'), findsNothing);
28 | expect(find.text('1'), findsOneWidget);
29 | });
30 | }
31 |
--------------------------------------------------------------------------------
/modules/utils/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .dart_tool/
3 |
4 | .packages
5 | .pub/
6 |
7 | .idea/
8 | .vagrant/
9 | .sconsign.dblite
10 | .svn/
11 |
12 | *.swp
13 | profile
14 |
15 | DerivedData/
16 |
17 | .generated/
18 |
19 | *.pbxuser
20 | *.mode1v3
21 | *.mode2v3
22 | *.perspectivev3
23 |
24 | !default.pbxuser
25 | !default.mode1v3
26 | !default.mode2v3
27 | !default.perspectivev3
28 |
29 | xcuserdata
30 |
31 | *.moved-aside
32 |
33 | *.pyc
34 | *sync/
35 | Icon?
36 | .tags*
37 |
38 | build/
39 | .android/
40 | .ios/
41 | .flutter-plugins
42 | .flutter-plugins-dependencies
43 |
44 | # Symbolication related
45 | app.*.symbols
46 |
47 | # Obfuscation related
48 | app.*.map.json
49 |
--------------------------------------------------------------------------------
/modules/utils/.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: 78910062997c3a836feee883712c241a5fd22983
8 | channel: stable
9 |
10 | project_type: module
11 |
--------------------------------------------------------------------------------
/modules/utils/README.md:
--------------------------------------------------------------------------------
1 | # utils
2 | 本模块用来演示如何构建你的工具库并复用它。
3 | utils中将对外提供界面无关,业务无关的工具类和函数。
4 |
5 | ## 创建utils模块
6 | ```
7 | bin/add_module.sh utils
8 | ```
9 |
10 | 新创建的模块目录如下:
11 | ```text
12 | ./modules/utils
13 | ├── README.md
14 | ├── lib
15 | │ └── main.dart
16 | ├── pubspec.lock
17 | ├── pubspec.yaml
18 | ├── test
19 | │ └── widget_test.dart
20 | ├── utils.iml
21 | └── utils_android.iml
22 |
23 | ```
24 |
25 |
26 | 因为这个模块都是界面无关的工具类和函数,
27 | 删掉其中的"lib/main.dart"和"test/widget_test.dart".
28 |
29 |
30 | ## 添加第一个工具类Https
31 |
32 | ### 添加要用到的dio库
33 | 修改modules/utils/pubspect.yaml:
34 | ```yaml
35 | name: utils
36 | #...
37 | dependencies:
38 | flutter:
39 | sdk: flutter
40 |
41 | # The following adds the Cupertino Icons font to your application.
42 | # Use with the CupertinoIcons class for iOS style icons.
43 | cupertino_icons: ^1.0.0
44 | dev_dependencies:
45 | #...
46 | ```
47 | 修改后
48 | ```yaml
49 | name: utils
50 | #...
51 | dependencies:
52 | flutter:
53 | sdk: flutter
54 | dio: 3.x
55 | dev_dependencies:
56 | #...
57 | ```
58 | 在lib下创建https.dart并在文件中添加类Https.(编程规范:文件名小写单词间用下划线分割。类名首字母大写的驼峰。)
59 |
60 | ```dart
61 | import 'package:dio/dio.dart';
62 |
63 | class Https {
64 | static void get(String url, Map params) async {
65 | try {
66 | Response response = await Dio().get(url, queryParameters: params);
67 | print(response);
68 | } catch (e) {
69 | print(e);
70 | }
71 | }
72 | }
73 |
74 | ```
75 |
76 | ### 添加Https测试代码
77 | 在flutterame/modules/utils/test/下添加https_test.dart:
78 | ```dart
79 | import 'package:flutter_test/flutter_test.dart';
80 |
81 | import 'package:utils/https.dart';
82 |
83 | void main() {
84 | test('Https.get', () async {
85 | await Https.get("https://jsonplaceholder.typicode.com/users", {"id": 3});
86 | print("done");
87 | });
88 | }
89 |
90 | ```
91 |
92 | ### 运行单元测试
93 |
94 | 进入目录flutterame/modules/utils并执行:
95 | ```bash
96 | $ flutter test test/https_test.dart
97 | 00:14 +0: Https.get
98 | {"id":3,"name":"Clementine Bauch","username":"Samantha","email":"Nathan@yesenia.net","address":{"street":"Douglas Extension","suite":"Suite 847","city":"McKenziehaven","zipcode":"59590-4157","geo":{"lat":"-68.6102","lng":"-47.0653"}},"phone":"1-463-123-4447","website":"ramiro.info","company":{"name":"Romaguera-Jacobson","catchPhrase":"Face to face bifurcated interface","bs":"e-enable strategic applications"}}
99 | done
100 | 00:14 +1: All tests passed!
101 | ```
102 |
103 | 修改我们的Https.get使其返回json。
104 |
105 |
106 |
107 |
108 |
--------------------------------------------------------------------------------
/modules/utils/lib/adapt.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'dart:ui';
3 |
4 | // https://www.jianshu.com/p/b2ad65064ea0
5 | class Adapt {
6 | static MediaQueryData mediaQuery = MediaQueryData.fromWindow(window);
7 | static double _width = mediaQuery.size.width;
8 | static double _height = mediaQuery.size.height;
9 | static double _topbarH = mediaQuery.padding.top;
10 | static double _botbarH = mediaQuery.padding.bottom;
11 | static double _pixelRatio = mediaQuery.devicePixelRatio;
12 | static var _ratio;
13 | static init(int number) {
14 | int uiwidth = number is int ? number : 375;
15 | _ratio = _width / uiwidth;
16 | }
17 |
18 | static pxByDp(number) {
19 | if (!(_ratio is double || _ratio is int)) {
20 | Adapt.init(375);
21 | }
22 | return number * _ratio;
23 | }
24 |
25 | static onePx() {
26 | return 1 / _pixelRatio;
27 | }
28 |
29 | static screenWidth() {
30 | return _width;
31 | }
32 |
33 | static screenHeight() {
34 | return _height;
35 | }
36 |
37 | static topPadding() {
38 | return _topbarH;
39 | }
40 |
41 | static bottomPadding() {
42 | return _botbarH;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/modules/utils/lib/https.dart:
--------------------------------------------------------------------------------
1 | import 'package:dio/dio.dart';
2 | import 'dart:convert';
3 |
4 | class Https {
5 | static dynamic get(String url, Map params) async {
6 | try {
7 | Response response = await Dio().get(url, queryParameters: params);
8 | print(response.toString());
9 | Map? data = jsonDecode(response.toString());
10 | return data;
11 | } catch (e) {
12 | print(e);
13 | return {};
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/modules/utils/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | async:
5 | dependency: transitive
6 | description:
7 | name: async
8 | url: "https://pub.flutter-io.cn"
9 | source: hosted
10 | version: "2.5.0"
11 | boolean_selector:
12 | dependency: transitive
13 | description:
14 | name: boolean_selector
15 | url: "https://pub.flutter-io.cn"
16 | source: hosted
17 | version: "2.1.0"
18 | characters:
19 | dependency: transitive
20 | description:
21 | name: characters
22 | url: "https://pub.flutter-io.cn"
23 | source: hosted
24 | version: "1.1.0"
25 | charcode:
26 | dependency: transitive
27 | description:
28 | name: charcode
29 | url: "https://pub.flutter-io.cn"
30 | source: hosted
31 | version: "1.2.0"
32 | clock:
33 | dependency: transitive
34 | description:
35 | name: clock
36 | url: "https://pub.flutter-io.cn"
37 | source: hosted
38 | version: "1.1.0"
39 | collection:
40 | dependency: transitive
41 | description:
42 | name: collection
43 | url: "https://pub.flutter-io.cn"
44 | source: hosted
45 | version: "1.15.0"
46 | dio:
47 | dependency: "direct main"
48 | description:
49 | name: dio
50 | url: "https://pub.flutter-io.cn"
51 | source: hosted
52 | version: "4.0.0-beta7"
53 | fake_async:
54 | dependency: transitive
55 | description:
56 | name: fake_async
57 | url: "https://pub.flutter-io.cn"
58 | source: hosted
59 | version: "1.2.0"
60 | flutter:
61 | dependency: "direct main"
62 | description: flutter
63 | source: sdk
64 | version: "0.0.0"
65 | flutter_test:
66 | dependency: "direct dev"
67 | description: flutter
68 | source: sdk
69 | version: "0.0.0"
70 | http_parser:
71 | dependency: transitive
72 | description:
73 | name: http_parser
74 | url: "https://pub.flutter-io.cn"
75 | source: hosted
76 | version: "4.0.0"
77 | matcher:
78 | dependency: transitive
79 | description:
80 | name: matcher
81 | url: "https://pub.flutter-io.cn"
82 | source: hosted
83 | version: "0.12.10"
84 | meta:
85 | dependency: transitive
86 | description:
87 | name: meta
88 | url: "https://pub.flutter-io.cn"
89 | source: hosted
90 | version: "1.3.0"
91 | path:
92 | dependency: transitive
93 | description:
94 | name: path
95 | url: "https://pub.flutter-io.cn"
96 | source: hosted
97 | version: "1.8.0"
98 | sky_engine:
99 | dependency: transitive
100 | description: flutter
101 | source: sdk
102 | version: "0.0.99"
103 | source_span:
104 | dependency: transitive
105 | description:
106 | name: source_span
107 | url: "https://pub.flutter-io.cn"
108 | source: hosted
109 | version: "1.8.0"
110 | stack_trace:
111 | dependency: transitive
112 | description:
113 | name: stack_trace
114 | url: "https://pub.flutter-io.cn"
115 | source: hosted
116 | version: "1.10.0"
117 | stream_channel:
118 | dependency: transitive
119 | description:
120 | name: stream_channel
121 | url: "https://pub.flutter-io.cn"
122 | source: hosted
123 | version: "2.1.0"
124 | string_scanner:
125 | dependency: transitive
126 | description:
127 | name: string_scanner
128 | url: "https://pub.flutter-io.cn"
129 | source: hosted
130 | version: "1.1.0"
131 | term_glyph:
132 | dependency: transitive
133 | description:
134 | name: term_glyph
135 | url: "https://pub.flutter-io.cn"
136 | source: hosted
137 | version: "1.2.0"
138 | test_api:
139 | dependency: transitive
140 | description:
141 | name: test_api
142 | url: "https://pub.flutter-io.cn"
143 | source: hosted
144 | version: "0.2.19"
145 | typed_data:
146 | dependency: transitive
147 | description:
148 | name: typed_data
149 | url: "https://pub.flutter-io.cn"
150 | source: hosted
151 | version: "1.3.0"
152 | vector_math:
153 | dependency: transitive
154 | description:
155 | name: vector_math
156 | url: "https://pub.flutter-io.cn"
157 | source: hosted
158 | version: "2.1.0"
159 | sdks:
160 | dart: ">=2.12.0 <3.0.0"
161 |
--------------------------------------------------------------------------------
/modules/utils/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: utils
2 | description: A new flutter module project.
3 |
4 | # The following defines the version and build number for your application.
5 | # A version number is three numbers separated by dots, like 1.2.43
6 | # followed by an optional build number separated by a +.
7 | # Both the version and the builder number may be overridden in flutter
8 | # build by specifying --build-name and --build-number, respectively.
9 | # In Android, build-name is used as versionName while build-number used as versionCode.
10 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning
11 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
12 | # Read more about iOS versioning at
13 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
14 | #
15 | # This version is used _only_ for the Runner app, which is used if you just do
16 | # a `flutter run` or a `flutter make-host-app-editable`. It has no impact
17 | # on any other native host app that you embed your Flutter project into.
18 | version: 1.0.0+1
19 |
20 | environment:
21 | sdk: '>=2.12.0 <3.0.0'
22 |
23 | dependencies:
24 | flutter:
25 | sdk: flutter
26 | dio: 4.0.0-beta7
27 | dev_dependencies:
28 | flutter_test:
29 | sdk: flutter
30 |
31 | # For information on the generic Dart part of this file, see the
32 | # following page: https://dart.dev/tools/pub/pubspec
33 |
34 | flutter:
35 | # The following line ensures that the Material Icons font is
36 | # included with your application, so that you can use the icons in
37 | # the material Icons class.
38 | uses-material-design: true
39 |
40 | # To add Flutter specific assets to your application, add an assets section,
41 | # like this:
42 | # assets:
43 | # - images/a_dot_burr.jpeg
44 | # - images/a_dot_ham.jpeg
45 |
46 | # An image asset can refer to one or more resolution-specific "variants", see
47 | # https://flutter.dev/assets-and-images/#resolution-aware.
48 |
49 | # For details regarding adding assets from package dependencies, see
50 | # https://flutter.dev/assets-and-images/#from-packages
51 |
52 | # To add Flutter specific custom fonts to your application, add a fonts
53 | # section here, in this "flutter" section. Each entry in this list should
54 | # have a "family" key with the font family name, and a "fonts" key with a
55 | # list giving the asset and other descriptors for the font. For
56 | # example:
57 | # fonts:
58 | # - family: Schyler
59 | # fonts:
60 | # - asset: fonts/Schyler-Regular.ttf
61 | # - asset: fonts/Schyler-Italic.ttf
62 | # style: italic
63 | # - family: Trajan Pro
64 | # fonts:
65 | # - asset: fonts/TrajanPro.ttf
66 | # - asset: fonts/TrajanPro_Bold.ttf
67 | # weight: 700
68 | #
69 | # For details regarding fonts from package dependencies,
70 | # see https://flutter.dev/custom-fonts/#from-packages
71 |
72 |
73 | # This section identifies your Flutter project as a module meant for
74 | # embedding in a native host app. These identifiers should _not_ ordinarily
75 | # be changed after generation - they are used to ensure that the tooling can
76 | # maintain consistency when adding or modifying assets and plugins.
77 | # They also do not have any bearing on your native host application's
78 | # identifiers, which may be completely independent or the same as these.
79 | module:
80 | androidX: true
81 | androidPackage: top.ovo.utils
82 | iosBundleIdentifier: top.ovo.utils
83 |
--------------------------------------------------------------------------------
/modules/utils/test/https_test.dart:
--------------------------------------------------------------------------------
1 | @Timeout(const Duration(seconds: 45))
2 |
3 | import 'package:flutter_test/flutter_test.dart';
4 |
5 | import 'package:utils/https.dart';
6 |
7 | void main() {
8 | test('Https.get', () async {
9 | var users = await Https.get(
10 | "https://jsonplaceholder.typicode.com/users", {"id": 3});
11 |
12 | print(users.runtimeType);
13 | print(users);
14 | // var datasMap = new Map.from(users);
15 | // const
16 | // expect(datas.length, 1);
17 | expect(users['username'], 'Samantha');
18 | });
19 | }
20 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .dart_tool/
3 |
4 | .packages
5 | .pub/
6 |
7 | build/
8 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/.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: 4d7946a68d26794349189cf21b3f68cc6fe61dcb
8 | channel: stable
9 |
10 | project_type: plugin
11 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## 0.0.1
2 |
3 | * TODO: Describe initial release.
4 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/LICENSE:
--------------------------------------------------------------------------------
1 | TODO: Add your license here.
2 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/README.md:
--------------------------------------------------------------------------------
1 | # plugin_demo
2 |
3 | A new flutter plugin project.
4 |
5 | ## Getting Started
6 |
7 | This project is a starting point for a Flutter
8 | [plug-in package](https://flutter.dev/developing-packages/),
9 | a specialized package that includes platform-specific implementation code for
10 | Android and/or iOS.
11 |
12 | For help getting started with Flutter, view our
13 | [online documentation](https://flutter.dev/docs), which offers tutorials,
14 | samples, guidance on mobile development, and a full API reference.
15 |
16 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/android/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/android/build.gradle:
--------------------------------------------------------------------------------
1 | group 'top.ovo.plugin_demo'
2 | version '1.0-SNAPSHOT'
3 |
4 | buildscript {
5 | ext.kotlin_version = '1.3.50'
6 | repositories {
7 | google()
8 | jcenter()
9 | }
10 |
11 | dependencies {
12 | classpath 'com.android.tools.build:gradle:4.1.0'
13 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
14 | }
15 | }
16 |
17 | rootProject.allprojects {
18 | repositories {
19 | google()
20 | jcenter()
21 | }
22 | }
23 |
24 | apply plugin: 'com.android.library'
25 | apply plugin: 'kotlin-android'
26 |
27 | android {
28 | compileSdkVersion 30
29 |
30 | sourceSets {
31 | main.java.srcDirs += 'src/main/kotlin'
32 | }
33 | defaultConfig {
34 | minSdkVersion 20
35 | }
36 | }
37 |
38 | dependencies {
39 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
40 | }
41 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
6 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/android/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'plugin_demo'
2 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/android/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/android/src/main/kotlin/top/ovo/plugin_demo/PluginDemoPlugin.kt:
--------------------------------------------------------------------------------
1 | package top.ovo.plugin_demo
2 |
3 | import androidx.annotation.NonNull
4 |
5 | import io.flutter.embedding.engine.plugins.FlutterPlugin
6 | import io.flutter.plugin.common.MethodCall
7 | import io.flutter.plugin.common.MethodChannel
8 | import io.flutter.plugin.common.MethodChannel.MethodCallHandler
9 | import io.flutter.plugin.common.MethodChannel.Result
10 | import io.flutter.plugin.common.PluginRegistry.Registrar
11 |
12 | import top.ovo.plugin_demo.PluginViewFactory
13 |
14 | /** PluginDemoPlugin */
15 | class PluginDemoPlugin: FlutterPlugin, MethodCallHandler {
16 | /// The MethodChannel that will the communication between Flutter and native Android
17 | ///
18 | /// This local reference serves to register the plugin with the Flutter Engine and unregister it
19 | /// when the Flutter Engine is detached from the Activity
20 | private lateinit var channel : MethodChannel
21 |
22 | override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
23 | channel = MethodChannel(flutterPluginBinding.binaryMessenger, "plugin_demo")
24 | channel.setMethodCallHandler(this)
25 |
26 | flutterPluginBinding
27 | .platformViewRegistry
28 | .registerViewFactory("hybrid-composition-plugin-view", PluginViewFactory())
29 |
30 | flutterPluginBinding
31 | .platformViewRegistry
32 | .registerViewFactory("virtual-display-plugin-view", PluginViewFactory())
33 | }
34 |
35 | override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
36 | if (call.method == "getPlatformVersion") {
37 | result.success("Android ${android.os.Build.VERSION.RELEASE}")
38 | } else {
39 | result.notImplemented()
40 | }
41 | }
42 |
43 | override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
44 | channel.setMethodCallHandler(null)
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/android/src/main/kotlin/top/ovo/plugin_demo/PluginView.kt:
--------------------------------------------------------------------------------
1 | package top.ovo.plugin_demo
2 |
3 | import android.content.Context
4 | import android.graphics.Color
5 | import android.view.View
6 | import android.widget.TextView
7 | import io.flutter.plugin.platform.PlatformView
8 |
9 | internal class PluginView(context: Context, id: Int, creationParams: Map?) : PlatformView {
10 | private val textView: TextView
11 |
12 | override fun getView(): View {
13 | return textView
14 | }
15 |
16 | override fun dispose() {}
17 |
18 | init {
19 | textView = TextView(context)
20 | textView.textSize = 16f
21 | textView.setBackgroundColor(Color.rgb(127, 255, 127))
22 | textView.text = "Rendered on a native Android view (id: $id)"
23 | }
24 | }
--------------------------------------------------------------------------------
/plugins/plugin_demo/android/src/main/kotlin/top/ovo/plugin_demo/PluginViewFactory.kt:
--------------------------------------------------------------------------------
1 | package top.ovo.plugin_demo
2 |
3 | import android.content.Context
4 | import android.view.View
5 | import io.flutter.plugin.common.StandardMessageCodec
6 | import io.flutter.plugin.platform.PlatformView
7 | import io.flutter.plugin.platform.PlatformViewFactory
8 |
9 | class PluginViewFactory : PlatformViewFactory(StandardMessageCodec.INSTANCE) {
10 | override fun create(context: Context, viewId: Int, args: Any?): PlatformView {
11 | val creationParams = args as Map?
12 | return PluginView(context, viewId, creationParams)
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/.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 | .flutter-plugins
28 | .flutter-plugins-dependencies
29 | .packages
30 | .pub-cache/
31 | .pub/
32 | /build/
33 |
34 | # Web related
35 | lib/generated_plugin_registrant.dart
36 |
37 | # Symbolication related
38 | app.*.symbols
39 |
40 | # Obfuscation related
41 | app.*.map.json
42 |
43 | # Android Studio will place build artifacts here
44 | /android/app/debug
45 | /android/app/profile
46 | /android/app/release
47 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/.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: 4d7946a68d26794349189cf21b3f68cc6fe61dcb
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/README.md:
--------------------------------------------------------------------------------
1 | # plugin_demo_example
2 |
3 |
4 | ## PlatformView
5 | [Hosting native Android and iOS views in your Flutter app with Platform Views](https://flutter.dev/docs/development/platform-integration/platform-views)
6 |
7 | [Flutter PlatformView: How to create Widgets from Native Views](https://medium.com/flutter-community/flutter-platformview-how-to-create-flutter-widgets-from-native-views-366e378115b6)
8 |
9 |
10 | [Implement PlatformView support on macOS #41722](https://github.com/flutter/flutter/issues/41722)
11 | [Support Texture widget in macOS embedding #30717](https://github.com/flutter/flutter/issues/30717)
12 | [PR:Add texture support for macOS shell. #8507](https://github.com/flutter/engine/pull/8507)
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 30
30 |
31 | sourceSets {
32 | main.java.srcDirs += 'src/main/kotlin'
33 | }
34 |
35 | defaultConfig {
36 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
37 | applicationId "top.ovo.plugin_demo_example"
38 | minSdkVersion 20
39 | targetSdkVersion 30
40 | versionCode flutterVersionCode.toInteger()
41 | versionName flutterVersionName
42 | }
43 |
44 | buildTypes {
45 | release {
46 | // TODO: Add your own signing config for the release build.
47 | // Signing with the debug keys for now, so `flutter run --release` works.
48 | signingConfig signingConfigs.debug
49 | }
50 | }
51 | }
52 |
53 | flutter {
54 | source '../..'
55 | }
56 |
57 | dependencies {
58 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
59 | }
60 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
13 |
17 |
21 |
26 |
30 |
31 |
32 |
33 |
34 |
35 |
37 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/app/src/main/kotlin/top/ovo/plugin_demo_example/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package top.ovo.plugin_demo_example
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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:4.1.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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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-6.7-all.zip
7 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Flutter (1.0.0)
3 | - plugin_demo (0.0.1):
4 | - Flutter
5 |
6 | DEPENDENCIES:
7 | - Flutter (from `Flutter`)
8 | - plugin_demo (from `.symlinks/plugins/plugin_demo/ios`)
9 |
10 | EXTERNAL SOURCES:
11 | Flutter:
12 | :path: Flutter
13 | plugin_demo:
14 | :path: ".symlinks/plugins/plugin_demo/ios"
15 |
16 | SPEC CHECKSUMS:
17 | Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
18 | plugin_demo: 04641716cc533ed7529cee6890ffad3f337954e1
19 |
20 | PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
21 |
22 | COCOAPODS: 1.10.1
23 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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.
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 | plugin_demo_example
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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'dart:async';
3 |
4 | import 'package:flutter/services.dart';
5 | import 'package:plugin_demo/plugin_demo.dart';
6 | import 'package:plugin_demo/plugin_demo_view.dart';
7 |
8 | void main() {
9 | runApp(MyApp());
10 | }
11 |
12 | class MyApp extends StatefulWidget {
13 | @override
14 | _MyAppState createState() => _MyAppState();
15 | }
16 |
17 | class _MyAppState extends State {
18 | String _platformVersion = 'Unknown';
19 |
20 | @override
21 | void initState() {
22 | super.initState();
23 | initPlatformState();
24 | }
25 |
26 | // Platform messages are asynchronous, so we initialize in an async method.
27 | Future initPlatformState() async {
28 | String platformVersion;
29 | // Platform messages may fail, so we use a try/catch PlatformException.
30 | try {
31 | platformVersion = await PluginDemo.platformVersion;
32 | } on PlatformException {
33 | platformVersion = 'Failed to get platform version.';
34 | }
35 |
36 | // If the widget was removed from the tree while the asynchronous platform
37 | // message was in flight, we want to discard the reply rather than calling
38 | // setState to update our non-existent appearance.
39 | if (!mounted) return;
40 |
41 | setState(() {
42 | _platformVersion = platformVersion;
43 | });
44 | }
45 |
46 | @override
47 | Widget build(BuildContext context) {
48 | return MaterialApp(
49 | home: Scaffold(
50 | appBar: AppBar(
51 | title: const Text('Plugin example app'),
52 | ),
53 | body: SingleChildScrollView(
54 | child: Column(
55 | children: [
56 | SizedBox(
57 | child:
58 | Center(child: Text('Running on: $_platformVersion\n')),
59 | height: 100),
60 | PluginDemoView()
61 | ],
62 | ),
63 | )),
64 | );
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/.gitignore:
--------------------------------------------------------------------------------
1 | # Flutter-related
2 | **/Flutter/ephemeral/
3 | **/Pods/
4 |
5 | # Xcode-related
6 | **/xcuserdata/
7 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Flutter/Flutter-Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "ephemeral/Flutter-Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Flutter/Flutter-Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "ephemeral/Flutter-Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Flutter/GeneratedPluginRegistrant.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Generated file. Do not edit.
3 | //
4 |
5 | import FlutterMacOS
6 | import Foundation
7 |
8 | import plugin_demo
9 |
10 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
11 | PluginDemoPlugin.register(with: registry.registrar(forPlugin: "PluginDemoPlugin"))
12 | }
13 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 flutter_root
13 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
14 | unless File.exist?(generated_xcode_build_settings_path)
15 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
16 | end
17 |
18 | File.foreach(generated_xcode_build_settings_path) do |line|
19 | matches = line.match(/FLUTTER_ROOT\=(.*)/)
20 | return matches[1].strip if matches
21 | end
22 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
23 | end
24 |
25 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
26 |
27 | flutter_macos_podfile_setup
28 |
29 | target 'Runner' do
30 | use_frameworks!
31 | use_modular_headers!
32 |
33 | flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
34 | end
35 |
36 | post_install do |installer|
37 | installer.pods_project.targets.each do |target|
38 | flutter_additional_macos_build_settings(target)
39 | end
40 | end
41 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
41 |
42 |
52 |
54 |
60 |
61 |
62 |
63 |
64 |
65 |
71 |
73 |
79 |
80 |
81 |
82 |
84 |
85 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 = plugin_demo_example
9 |
10 | // The application's bundle identifier
11 | PRODUCT_BUNDLE_IDENTIFIER = top.ovo.pluginDemoExample
12 |
13 | // The copyright displayed in application information
14 | PRODUCT_COPYRIGHT = Copyright © 2021 top.ovo. All rights reserved.
15 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner/Configs/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "../../Flutter/Flutter-Debug.xcconfig"
2 | #include "Warnings.xcconfig"
3 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner/Configs/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "../../Flutter/Flutter-Release.xcconfig"
2 | #include "Warnings.xcconfig"
3 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/macos/Runner/Release.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: plugin_demo_example
2 | description: Demonstrates how to use the plugin_demo plugin.
3 | version: 1.0.0+1
4 |
5 | # The following line prevents the package from being accidentally published to
6 | # pub.dev using `pub publish`. This is preferred for private packages.
7 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev
8 |
9 | environment:
10 | sdk: ">=2.7.0 <3.0.0"
11 |
12 | dependencies:
13 | flutter:
14 | sdk: flutter
15 |
16 | plugin_demo:
17 | # When depending on this package from a real application you should use:
18 | # plugin_demo: ^x.y.z
19 | # See https://dart.dev/tools/pub/dependencies#version-constraints
20 | # The example app is bundled with the plugin so we use a path dependency on
21 | # the parent directory to use the current plugin's version.
22 | path: ../
23 |
24 | # The following adds the Cupertino Icons font to your application.
25 | # Use with the CupertinoIcons class for iOS style icons.
26 | cupertino_icons: ^1.0.2
27 |
28 | dev_dependencies:
29 | flutter_test:
30 | sdk: flutter
31 |
32 | # For information on the generic Dart part of this file, see the
33 | # following page: https://dart.dev/tools/pub/pubspec
34 |
35 | # The following section is specific to Flutter.
36 | flutter:
37 |
38 | # The following line ensures that the Material Icons font is
39 | # included with your application, so that you can use the icons in
40 | # the material Icons class.
41 | uses-material-design: true
42 |
43 | # To add assets to your application, add an assets section, like this:
44 | # assets:
45 | # - images/a_dot_burr.jpeg
46 | # - images/a_dot_ham.jpeg
47 |
48 | # An image asset can refer to one or more resolution-specific "variants", see
49 | # https://flutter.dev/assets-and-images/#resolution-aware.
50 |
51 | # For details regarding adding assets from package dependencies, see
52 | # https://flutter.dev/assets-and-images/#from-packages
53 |
54 | # To add custom fonts to your application, add a fonts section here,
55 | # in this "flutter" section. Each entry in this list should have a
56 | # "family" key with the font family name, and a "fonts" key with a
57 | # list giving the asset and other descriptors for the font. For
58 | # example:
59 | # fonts:
60 | # - family: Schyler
61 | # fonts:
62 | # - asset: fonts/Schyler-Regular.ttf
63 | # - asset: fonts/Schyler-Italic.ttf
64 | # style: italic
65 | # - family: Trajan Pro
66 | # fonts:
67 | # - asset: fonts/TrajanPro.ttf
68 | # - asset: fonts/TrajanPro_Bold.ttf
69 | # weight: 700
70 | #
71 | # For details regarding fonts from package dependencies,
72 | # see https://flutter.dev/custom-fonts/#from-packages
73 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/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:flutter/material.dart';
9 | import 'package:flutter_test/flutter_test.dart';
10 |
11 | import 'package:plugin_demo_example/main.dart';
12 |
13 | void main() {
14 | testWidgets('Verify Platform version', (WidgetTester tester) async {
15 | // Build our app and trigger a frame.
16 | await tester.pumpWidget(MyApp());
17 |
18 | // Verify that platform version is retrieved.
19 | expect(
20 | find.byWidgetPredicate(
21 | (Widget widget) => widget is Text &&
22 | widget.data.startsWith('Running on:'),
23 | ),
24 | findsOneWidget,
25 | );
26 | });
27 | }
28 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/web/favicon.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/example/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | plugin_demo_example
30 |
31 |
32 |
33 |
36 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/example/web/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "plugin_demo_example",
3 | "short_name": "plugin_demo_example",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "background_color": "#0175C2",
7 | "theme_color": "#0175C2",
8 | "description": "Demonstrates how to use the plugin_demo plugin.",
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 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/ios/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | .vagrant/
3 | .sconsign.dblite
4 | .svn/
5 |
6 | .DS_Store
7 | *.swp
8 | profile
9 |
10 | DerivedData/
11 | build/
12 | GeneratedPluginRegistrant.h
13 | GeneratedPluginRegistrant.m
14 |
15 | .generated/
16 |
17 | *.pbxuser
18 | *.mode1v3
19 | *.mode2v3
20 | *.perspectivev3
21 |
22 | !default.pbxuser
23 | !default.mode1v3
24 | !default.mode2v3
25 | !default.perspectivev3
26 |
27 | xcuserdata
28 |
29 | *.moved-aside
30 |
31 | *.pyc
32 | *sync/
33 | Icon?
34 | .tags*
35 |
36 | /Flutter/Generated.xcconfig
37 | /Flutter/flutter_export_environment.sh
--------------------------------------------------------------------------------
/plugins/plugin_demo/ios/Assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/plugins/plugin_demo/ios/Assets/.gitkeep
--------------------------------------------------------------------------------
/plugins/plugin_demo/ios/Classes/PluginDemoPlugin.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | @interface PluginDemoPlugin : NSObject
4 | @end
5 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/ios/Classes/PluginDemoPlugin.m:
--------------------------------------------------------------------------------
1 | #import "PluginDemoPlugin.h"
2 | #if __has_include()
3 | #import
4 | #else
5 | // Support project import fallback if the generated compatibility header
6 | // is not copied when this plugin is created as a library.
7 | // https://forums.swift.org/t/swift-static-libraries-dont-copy-generated-objective-c-header/19816
8 | #import "plugin_demo-Swift.h"
9 | #endif
10 |
11 | @implementation PluginDemoPlugin
12 | + (void)registerWithRegistrar:(NSObject*)registrar {
13 | [SwiftPluginDemoPlugin registerWithRegistrar:registrar];
14 | }
15 | @end
16 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/ios/Classes/PluginDemoView.swift:
--------------------------------------------------------------------------------
1 | import Flutter
2 | import UIKit
3 |
4 | class PluginViewFactory: NSObject, FlutterPlatformViewFactory {
5 | private var messenger: FlutterBinaryMessenger
6 |
7 | init(messenger: FlutterBinaryMessenger) {
8 | self.messenger = messenger
9 | super.init()
10 | }
11 |
12 | func create(
13 | withFrame frame: CGRect,
14 | viewIdentifier viewId: Int64,
15 | arguments args: Any?
16 | ) -> FlutterPlatformView {
17 | return PluginView(
18 | frame: frame,
19 | viewIdentifier: viewId,
20 | arguments: args,
21 | binaryMessenger: messenger)
22 | }
23 | }
24 |
25 | class PluginView: NSObject, FlutterPlatformView {
26 | private var _view: UIView
27 |
28 | init(
29 | frame: CGRect,
30 | viewIdentifier viewId: Int64,
31 | arguments args: Any?,
32 | binaryMessenger messenger: FlutterBinaryMessenger?
33 | ) {
34 | _view = UIView()
35 | super.init()
36 | // iOS views can be created here
37 | createNativeView(view: _view)
38 | }
39 |
40 | func view() -> UIView {
41 | return _view
42 | }
43 |
44 | func createNativeView(view _view: UIView){
45 | _view.backgroundColor = UIColor.blue
46 | let nativeLabel = UILabel()
47 | nativeLabel.text = "Native text from iOS"
48 | nativeLabel.textColor = UIColor.white
49 | nativeLabel.textAlignment = .center
50 | nativeLabel.frame = CGRect(x: 0, y: 0, width: 180, height: 48.0)
51 | _view.addSubview(nativeLabel)
52 | }
53 | }
--------------------------------------------------------------------------------
/plugins/plugin_demo/ios/Classes/SwiftPluginDemoPlugin.swift:
--------------------------------------------------------------------------------
1 | import Flutter
2 | import UIKit
3 |
4 | public class SwiftPluginDemoPlugin: NSObject, FlutterPlugin {
5 | public static func register(with registrar: FlutterPluginRegistrar) {
6 | let channel = FlutterMethodChannel(name: "plugin_demo", binaryMessenger: registrar.messenger())
7 | let instance = SwiftPluginDemoPlugin()
8 | registrar.addMethodCallDelegate(instance, channel: channel)
9 |
10 | let factory = PluginViewFactory(messenger: (registrar.messenger()))
11 | registrar.register(factory, withId: "ui-kit-plugin-view")
12 | }
13 |
14 | public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
15 | result("iOS " + UIDevice.current.systemVersion)
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/ios/plugin_demo.podspec:
--------------------------------------------------------------------------------
1 | #
2 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
3 | # Run `pod lib lint plugin_demo.podspec` to validate before publishing.
4 | #
5 | Pod::Spec.new do |s|
6 | s.name = 'plugin_demo'
7 | s.version = '0.0.1'
8 | s.summary = 'A new flutter plugin project.'
9 | s.description = <<-DESC
10 | A new flutter plugin project.
11 | DESC
12 | s.homepage = 'http://example.com'
13 | s.license = { :file => '../LICENSE' }
14 | s.author = { 'Your Company' => 'email@example.com' }
15 | s.source = { :path => '.' }
16 | s.source_files = 'Classes/**/*'
17 | s.dependency 'Flutter'
18 | s.platform = :ios, '8.0'
19 |
20 | # Flutter.framework does not contain a i386 slice.
21 | s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
22 | s.swift_version = '5.0'
23 | end
24 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/lib/android_hybrid_composition_plugin.dart:
--------------------------------------------------------------------------------
1 | // https://flutter.dev/docs/development/platform-integration/platform-views
2 | // Hybrid Composition
3 |
4 | import 'package:flutter/foundation.dart';
5 | import 'package:flutter/gestures.dart';
6 | import 'package:flutter/rendering.dart';
7 | import 'package:flutter/services.dart';
8 | import 'package:flutter/material.dart';
9 |
10 | class AndroidHybridCompositionPluginView extends StatelessWidget {
11 | const AndroidHybridCompositionPluginView();
12 |
13 | Widget build(BuildContext context) {
14 | // This is used in the platform side to register the view.
15 | final String viewType = 'hybrid-composition-plugin-view';
16 | // Pass parameters to the platform side.
17 | final Map creationParams = {};
18 |
19 | return PlatformViewLink(
20 | viewType: viewType,
21 | surfaceFactory:
22 | (BuildContext context, PlatformViewController controller) {
23 | return AndroidViewSurface(
24 | controller: controller as AndroidViewController,
25 | gestureRecognizers: const >{},
26 | hitTestBehavior: PlatformViewHitTestBehavior.opaque,
27 | );
28 | },
29 | onCreatePlatformView: (PlatformViewCreationParams params) {
30 | return PlatformViewsService.initSurfaceAndroidView(
31 | id: params.id,
32 | viewType: viewType,
33 | layoutDirection: TextDirection.ltr,
34 | creationParams: creationParams,
35 | creationParamsCodec: StandardMessageCodec(),
36 | )
37 | ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated)
38 | ..create();
39 | },
40 | );
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/lib/android_virtual_display_plugin.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter/foundation.dart';
3 | import 'package:flutter/gestures.dart';
4 | import 'package:flutter/rendering.dart';
5 | import 'package:flutter/services.dart';
6 |
7 | class AndroidVirtualDisplayPluginView extends StatelessWidget {
8 | const AndroidVirtualDisplayPluginView();
9 | Widget build(BuildContext context) {
10 | // This is used in the platform side to register the view.
11 | final String viewType = 'virtual-display-plugin-view';
12 | // Pass parameters to the platform side.
13 | final Map creationParams = {};
14 |
15 | return AndroidView(
16 | viewType: viewType,
17 | layoutDirection: TextDirection.ltr,
18 | creationParams: creationParams,
19 | creationParamsCodec: const StandardMessageCodec(),
20 | );
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/lib/ios_ui_kit_view_plugin.dart:
--------------------------------------------------------------------------------
1 | // https://flutter.dev/docs/development/platform-integration/platform-views
2 | // UiKitView
3 |
4 | import 'package:flutter/material.dart';
5 | import 'package:flutter/rendering.dart';
6 | import 'package:flutter/services.dart';
7 |
8 | class IOSUiKitView extends StatelessWidget {
9 | const IOSUiKitView();
10 | Widget build(BuildContext context) {
11 | // This is used in the platform side to register the view.
12 | final String viewType = 'ui-kit-plugin-view';
13 | // Pass parameters to the platform side.
14 | final Map creationParams = {};
15 |
16 | return UiKitView(
17 | viewType: viewType,
18 | layoutDirection: TextDirection.ltr,
19 | creationParams: creationParams,
20 | creationParamsCodec: const StandardMessageCodec(),
21 | );
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/lib/plugin_demo.dart:
--------------------------------------------------------------------------------
1 |
2 | import 'dart:async';
3 |
4 | import 'package:flutter/services.dart';
5 |
6 | class PluginDemo {
7 | static const MethodChannel _channel =
8 | const MethodChannel('plugin_demo');
9 |
10 | static Future get platformVersion async {
11 | final String? version = await _channel.invokeMethod('getPlatformVersion');
12 | return version;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/lib/plugin_demo_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter/foundation.dart';
3 | import 'android_hybrid_composition_plugin.dart';
4 | import 'android_virtual_display_plugin.dart';
5 | import 'ios_ui_kit_view_plugin.dart';
6 |
7 | class PluginDemoView extends StatelessWidget {
8 | const PluginDemoView();
9 |
10 | List buildChildren() {
11 | switch (defaultTargetPlatform) {
12 | case TargetPlatform.android:
13 | return [
14 | Text('AndroidVirtualDisplayPluginView'),
15 | SizedBox(
16 | child: Center(child: AndroidVirtualDisplayPluginView()),
17 | height: 200),
18 | SizedBox(height: 10),
19 | Text('AndroidHybridCompositionPluginView'),
20 | SizedBox(
21 | child: Center(child: AndroidHybridCompositionPluginView()),
22 | height: 200),
23 | SizedBox(height: 10),
24 | ];
25 | case TargetPlatform.iOS:
26 | return [
27 | Text('iOSUikitView'),
28 | SizedBox(child: Center(child: IOSUiKitView()), height: 200),
29 | ];
30 | default:
31 | return [];
32 | }
33 | }
34 |
35 | @override
36 | Widget build(BuildContext context) {
37 | return Column(children: buildChildren());
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/lib/plugin_demo_web.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | // In order to *not* need this ignore, consider extracting the "web" version
3 | // of your plugin as a separate package, instead of inlining it in the same
4 | // package as the core of your plugin.
5 | // ignore: avoid_web_libraries_in_flutter
6 | import 'dart:html' as html show window;
7 |
8 | import 'package:flutter/services.dart';
9 | import 'package:flutter_web_plugins/flutter_web_plugins.dart';
10 |
11 | /// A web implementation of the PluginDemo plugin.
12 | class PluginDemoWeb {
13 | static void registerWith(Registrar registrar) {
14 | final MethodChannel channel = MethodChannel(
15 | 'plugin_demo',
16 | const StandardMethodCodec(),
17 | registrar,
18 | );
19 |
20 | final pluginInstance = PluginDemoWeb();
21 | channel.setMethodCallHandler(pluginInstance.handleMethodCall);
22 | }
23 |
24 | /// Handles method calls over the MethodChannel of this plugin.
25 | /// Note: Check the "federated" architecture for a new way of doing this:
26 | /// https://flutter.dev/go/federated-plugins
27 | Future handleMethodCall(MethodCall call) async {
28 | switch (call.method) {
29 | case 'getPlatformVersion':
30 | return getPlatformVersion();
31 | break;
32 | default:
33 | throw PlatformException(
34 | code: 'Unimplemented',
35 | details: 'plugin_demo for web doesn\'t implement \'${call.method}\'',
36 | );
37 | }
38 | }
39 |
40 | /// Returns a [String] containing the version of the platform.
41 | Future getPlatformVersion() {
42 | final version = html.window.navigator.userAgent;
43 | return Future.value(version);
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/macos/Classes/PluginDemoPlugin.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 | import FlutterMacOS
3 |
4 | public class PluginDemoPlugin: NSObject, FlutterPlugin {
5 | public static func register(with registrar: FlutterPluginRegistrar) {
6 | let channel = FlutterMethodChannel(name: "plugin_demo", binaryMessenger: registrar.messenger)
7 | let instance = PluginDemoPlugin()
8 | registrar.addMethodCallDelegate(instance, channel: channel)
9 | }
10 |
11 | public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
12 | switch call.method {
13 | case "getPlatformVersion":
14 | result("macOS " + ProcessInfo.processInfo.operatingSystemVersionString)
15 | default:
16 | result(FlutterMethodNotImplemented)
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/macos/plugin_demo.podspec:
--------------------------------------------------------------------------------
1 | #
2 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
3 | # Run `pod lib lint plugin_demo.podspec` to validate before publishing.
4 | #
5 | Pod::Spec.new do |s|
6 | s.name = 'plugin_demo'
7 | s.version = '0.0.1'
8 | s.summary = 'A new flutter plugin project.'
9 | s.description = <<-DESC
10 | A new flutter plugin project.
11 | DESC
12 | s.homepage = 'http://example.com'
13 | s.license = { :file => '../LICENSE' }
14 | s.author = { 'Your Company' => 'email@example.com' }
15 | s.source = { :path => '.' }
16 | s.source_files = 'Classes/**/*'
17 | s.dependency 'FlutterMacOS'
18 |
19 | s.platform = :osx, '10.11'
20 | s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
21 | s.swift_version = '5.0'
22 | end
23 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | async:
5 | dependency: transitive
6 | description:
7 | name: async
8 | url: "https://pub.flutter-io.cn"
9 | source: hosted
10 | version: "2.5.0"
11 | boolean_selector:
12 | dependency: transitive
13 | description:
14 | name: boolean_selector
15 | url: "https://pub.flutter-io.cn"
16 | source: hosted
17 | version: "2.1.0"
18 | characters:
19 | dependency: transitive
20 | description:
21 | name: characters
22 | url: "https://pub.flutter-io.cn"
23 | source: hosted
24 | version: "1.1.0"
25 | charcode:
26 | dependency: transitive
27 | description:
28 | name: charcode
29 | url: "https://pub.flutter-io.cn"
30 | source: hosted
31 | version: "1.2.0"
32 | clock:
33 | dependency: transitive
34 | description:
35 | name: clock
36 | url: "https://pub.flutter-io.cn"
37 | source: hosted
38 | version: "1.1.0"
39 | collection:
40 | dependency: transitive
41 | description:
42 | name: collection
43 | url: "https://pub.flutter-io.cn"
44 | source: hosted
45 | version: "1.15.0"
46 | fake_async:
47 | dependency: transitive
48 | description:
49 | name: fake_async
50 | url: "https://pub.flutter-io.cn"
51 | source: hosted
52 | version: "1.2.0"
53 | flutter:
54 | dependency: "direct main"
55 | description: flutter
56 | source: sdk
57 | version: "0.0.0"
58 | flutter_test:
59 | dependency: "direct dev"
60 | description: flutter
61 | source: sdk
62 | version: "0.0.0"
63 | flutter_web_plugins:
64 | dependency: "direct main"
65 | description: flutter
66 | source: sdk
67 | version: "0.0.0"
68 | js:
69 | dependency: transitive
70 | description:
71 | name: js
72 | url: "https://pub.flutter-io.cn"
73 | source: hosted
74 | version: "0.6.3"
75 | matcher:
76 | dependency: transitive
77 | description:
78 | name: matcher
79 | url: "https://pub.flutter-io.cn"
80 | source: hosted
81 | version: "0.12.10"
82 | meta:
83 | dependency: transitive
84 | description:
85 | name: meta
86 | url: "https://pub.flutter-io.cn"
87 | source: hosted
88 | version: "1.3.0"
89 | path:
90 | dependency: transitive
91 | description:
92 | name: path
93 | url: "https://pub.flutter-io.cn"
94 | source: hosted
95 | version: "1.8.0"
96 | sky_engine:
97 | dependency: transitive
98 | description: flutter
99 | source: sdk
100 | version: "0.0.99"
101 | source_span:
102 | dependency: transitive
103 | description:
104 | name: source_span
105 | url: "https://pub.flutter-io.cn"
106 | source: hosted
107 | version: "1.8.0"
108 | stack_trace:
109 | dependency: transitive
110 | description:
111 | name: stack_trace
112 | url: "https://pub.flutter-io.cn"
113 | source: hosted
114 | version: "1.10.0"
115 | stream_channel:
116 | dependency: transitive
117 | description:
118 | name: stream_channel
119 | url: "https://pub.flutter-io.cn"
120 | source: hosted
121 | version: "2.1.0"
122 | string_scanner:
123 | dependency: transitive
124 | description:
125 | name: string_scanner
126 | url: "https://pub.flutter-io.cn"
127 | source: hosted
128 | version: "1.1.0"
129 | term_glyph:
130 | dependency: transitive
131 | description:
132 | name: term_glyph
133 | url: "https://pub.flutter-io.cn"
134 | source: hosted
135 | version: "1.2.0"
136 | test_api:
137 | dependency: transitive
138 | description:
139 | name: test_api
140 | url: "https://pub.flutter-io.cn"
141 | source: hosted
142 | version: "0.2.19"
143 | typed_data:
144 | dependency: transitive
145 | description:
146 | name: typed_data
147 | url: "https://pub.flutter-io.cn"
148 | source: hosted
149 | version: "1.3.0"
150 | vector_math:
151 | dependency: transitive
152 | description:
153 | name: vector_math
154 | url: "https://pub.flutter-io.cn"
155 | source: hosted
156 | version: "2.1.0"
157 | sdks:
158 | dart: ">=2.12.0 <3.0.0"
159 | flutter: ">=1.20.0"
160 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: plugin_demo
2 | description: A new flutter plugin project.
3 | version: 0.0.1
4 | author:
5 | homepage:
6 |
7 | environment:
8 | sdk: '>=2.12.0 <3.0.0'
9 | flutter: ">=1.20.0"
10 |
11 | dependencies:
12 | flutter:
13 | sdk: flutter
14 | flutter_web_plugins:
15 | sdk: flutter
16 |
17 | dev_dependencies:
18 | flutter_test:
19 | sdk: flutter
20 |
21 | # For information on the generic Dart part of this file, see the
22 | # following page: https://dart.dev/tools/pub/pubspec
23 |
24 | # The following section is specific to Flutter.
25 | flutter:
26 | # This section identifies this Flutter project as a plugin project.
27 | # The 'pluginClass' and Android 'package' identifiers should not ordinarily
28 | # be modified. They are used by the tooling to maintain consistency when
29 | # adding or updating assets for this project.
30 | plugin:
31 | platforms:
32 | android:
33 | package: top.ovo.plugin_demo
34 | pluginClass: PluginDemoPlugin
35 | ios:
36 | pluginClass: PluginDemoPlugin
37 | macos:
38 | pluginClass: PluginDemoPlugin
39 | web:
40 | pluginClass: PluginDemoWeb
41 | fileName: plugin_demo_web.dart
42 |
43 | # To add assets to your plugin package, add an assets section, like this:
44 | # assets:
45 | # - images/a_dot_burr.jpeg
46 | # - images/a_dot_ham.jpeg
47 | #
48 | # For details regarding assets in packages, see
49 | # https://flutter.dev/assets-and-images/#from-packages
50 | #
51 | # An image asset can refer to one or more resolution-specific "variants", see
52 | # https://flutter.dev/assets-and-images/#resolution-aware.
53 |
54 | # To add custom fonts to your plugin package, add a fonts section here,
55 | # in this "flutter" section. Each entry in this list should have a
56 | # "family" key with the font family name, and a "fonts" key with a
57 | # list giving the asset and other descriptors for the font. For
58 | # example:
59 | # fonts:
60 | # - family: Schyler
61 | # fonts:
62 | # - asset: fonts/Schyler-Regular.ttf
63 | # - asset: fonts/Schyler-Italic.ttf
64 | # style: italic
65 | # - family: Trajan Pro
66 | # fonts:
67 | # - asset: fonts/TrajanPro.ttf
68 | # - asset: fonts/TrajanPro_Bold.ttf
69 | # weight: 700
70 | #
71 | # For details regarding fonts in packages, see
72 | # https://flutter.dev/custom-fonts/#from-packages
73 |
--------------------------------------------------------------------------------
/plugins/plugin_demo/test/plugin_demo_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/services.dart';
2 | import 'package:flutter_test/flutter_test.dart';
3 | import 'package:plugin_demo/plugin_demo.dart';
4 |
5 | void main() {
6 | const MethodChannel channel = MethodChannel('plugin_demo');
7 |
8 | TestWidgetsFlutterBinding.ensureInitialized();
9 |
10 | setUp(() {
11 | channel.setMockMethodCallHandler((MethodCall methodCall) async {
12 | return '42';
13 | });
14 | });
15 |
16 | tearDown(() {
17 | channel.setMockMethodCallHandler(null);
18 | });
19 |
20 | test('getPlatformVersion', () async {
21 | expect(await PluginDemo.platformVersion, '42');
22 | });
23 | }
24 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: flutterame
2 | description: A new Flutter project.
3 |
4 | # The following line prevents the package from being accidentally published to
5 | # pub.dev using `pub publish`. This is preferred for private packages.
6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev
7 |
8 | # The following defines the version and build number for your application.
9 | # A version number is three numbers separated by dots, like 1.2.43
10 | # followed by an optional build number separated by a +.
11 | # Both the version and the builder number may be overridden in flutter
12 | # build by specifying --build-name and --build-number, respectively.
13 | # In Android, build-name is used as versionName while build-number used as versionCode.
14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning
15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
16 | # Read more about iOS versioning at
17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
18 | version: 1.0.0+1
19 |
20 | environment:
21 | sdk: '>=2.12.0 <3.0.0'
22 |
23 | dependencies:
24 | flutter:
25 | sdk: flutter
26 | gallery:
27 | path: modules/gallery
28 | plugin_demo:
29 | path: plugins/plugin_demo
30 |
31 | # The following adds the Cupertino Icons font to your application.
32 | # Use with the CupertinoIcons class for iOS style icons.
33 | cupertino_icons: ^1.0.0
34 |
35 | dev_dependencies:
36 | flutter_test:
37 | sdk: flutter
38 |
39 | # For information on the generic Dart part of this file, see the
40 | # following page: https://dart.dev/tools/pub/pubspec
41 |
42 | # The following section is specific to Flutter.
43 | flutter:
44 |
45 | # The following line ensures that the Material Icons font is
46 | # included with your application, so that you can use the icons in
47 | # the material Icons class.
48 | uses-material-design: true
49 |
50 | # To add assets to your application, add an assets section, like this:
51 | # assets:
52 | # - images/a_dot_burr.jpeg
53 | # - images/a_dot_ham.jpeg
54 |
55 | # An image asset can refer to one or more resolution-specific "variants", see
56 | # https://flutter.dev/assets-and-images/#resolution-aware.
57 |
58 | # For details regarding adding assets from package dependencies, see
59 | # https://flutter.dev/assets-and-images/#from-packages
60 |
61 | # To add custom fonts to your application, add a fonts section here,
62 | # in this "flutter" section. Each entry in this list should have a
63 | # "family" key with the font family name, and a "fonts" key with a
64 | # list giving the asset and other descriptors for the font. For
65 | # example:
66 | # fonts:
67 | # - family: Schyler
68 | # fonts:
69 | # - asset: fonts/Schyler-Regular.ttf
70 | # - asset: fonts/Schyler-Italic.ttf
71 | # style: italic
72 | # - family: Trajan Pro
73 | # fonts:
74 | # - asset: fonts/TrajanPro.ttf
75 | # - asset: fonts/TrajanPro_Bold.ttf
76 | # weight: 700
77 | #
78 | # For details regarding fonts from package dependencies,
79 | # see https://flutter.dev/custom-fonts/#from-packages
80 |
--------------------------------------------------------------------------------
/screenshot/cover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/screenshot/cover.png
--------------------------------------------------------------------------------
/screenshot/flutterame.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/screenshot/flutterame.webp
--------------------------------------------------------------------------------
/screenshot/gallery.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/screenshot/gallery.webp
--------------------------------------------------------------------------------
/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:flutter/material.dart';
9 | import 'package:flutter_test/flutter_test.dart';
10 |
11 | import 'package:flutterame/main.dart';
12 |
13 | void main() {
14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async {
15 | // Build our app and trigger a frame.
16 | await tester.pumpWidget(MyApp());
17 |
18 | // Verify that our counter starts at 0.
19 | expect(find.text('0'), findsOneWidget);
20 | expect(find.text('1'), findsNothing);
21 |
22 | // Tap the '+' icon and trigger a frame.
23 | await tester.tap(find.byIcon(Icons.add));
24 | await tester.pump();
25 |
26 | // Verify that our counter has incremented.
27 | expect(find.text('0'), findsNothing);
28 | expect(find.text('1'), findsOneWidget);
29 | });
30 | }
31 |
--------------------------------------------------------------------------------
/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/web/favicon.png
--------------------------------------------------------------------------------
/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ovotop/flutterame/daae357681974fcbf9cb78565966f2a9815f07ad/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | flutterame
30 |
31 |
32 |
33 |
36 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/web/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "flutterame",
3 | "short_name": "flutterame",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "background_color": "#0175C2",
7 | "theme_color": "#0175C2",
8 | "description": "A new Flutter project.",
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 |
--------------------------------------------------------------------------------