main 795e5e23589d cached
150 files
345.6 KB
85.6k tokens
266 symbols
1 requests
Download .txt
Showing preview only (392K chars total). Download the full file or copy to clipboard to get everything.
Repository: meetqy/flutter_dating_template
Branch: main
Commit: 795e5e23589d
Files: 150
Total size: 345.6 KB

Directory structure:
gitextract__ab5wex3/

├── .fvm/
│   └── fvm_config.json
├── .gitignore
├── .metadata
├── .vscode/
│   └── settings.json
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android/
│   ├── .gitignore
│   ├── app/
│   │   ├── build.gradle
│   │   └── src/
│   │       ├── debug/
│   │       │   └── AndroidManifest.xml
│   │       ├── main/
│   │       │   ├── AndroidManifest.xml
│   │       │   ├── kotlin/
│   │       │   │   └── com/
│   │       │   │       └── example/
│   │       │   │           └── flutter_dating_template/
│   │       │   │               └── MainActivity.kt
│   │       │   └── res/
│   │       │       ├── drawable/
│   │       │       │   └── launch_background.xml
│   │       │       ├── drawable-night/
│   │       │       │   └── launch_background.xml
│   │       │       ├── drawable-night-v21/
│   │       │       │   └── launch_background.xml
│   │       │       ├── drawable-v21/
│   │       │       │   └── launch_background.xml
│   │       │       ├── values/
│   │       │       │   └── styles.xml
│   │       │       ├── values-night/
│   │       │       │   └── styles.xml
│   │       │       ├── values-night-v31/
│   │       │       │   └── styles.xml
│   │       │       └── values-v31/
│   │       │           └── styles.xml
│   │       └── profile/
│   │           └── AndroidManifest.xml
│   ├── build.gradle
│   ├── gradle/
│   │   └── wrapper/
│   │       └── gradle-wrapper.properties
│   ├── gradle.properties
│   └── settings.gradle
├── flutter_native_splash.yaml
├── ios/
│   ├── .gitignore
│   ├── Flutter/
│   │   ├── AppFrameworkInfo.plist
│   │   ├── Debug.xcconfig
│   │   └── Release.xcconfig
│   ├── Podfile
│   ├── Runner/
│   │   ├── AppDelegate.swift
│   │   ├── Assets.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   ├── BrandingImage.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Contents.json
│   │   │   ├── LaunchBackground.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── LaunchImage.imageset/
│   │   │       └── Contents.json
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── Info.plist
│   │   └── Runner-Bridging-Header.h
│   ├── 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
├── lib/
│   ├── main.dart
│   ├── pages/
│   │   ├── agreement/
│   │   │   ├── privacy.dart
│   │   │   └── user.dart
│   │   ├── history_match/
│   │   │   ├── index.dart
│   │   │   └── mock.dart
│   │   ├── home/
│   │   │   ├── community/
│   │   │   │   ├── index.dart
│   │   │   │   └── page_view/
│   │   │   │       ├── found/
│   │   │   │       │   └── index.dart
│   │   │   │       ├── like/
│   │   │   │       │   ├── index.dart
│   │   │   │       │   └── mock.dart
│   │   │   │       ├── recommend/
│   │   │   │       │   └── index.dart
│   │   │   │       └── widgets/
│   │   │   │           └── publish_card.dart
│   │   │   ├── index/
│   │   │   │   ├── index.dart
│   │   │   │   └── search_dialog.dart
│   │   │   ├── index.dart
│   │   │   ├── message/
│   │   │   │   ├── chat/
│   │   │   │   │   └── index.dart
│   │   │   │   ├── firends_dialog.dart
│   │   │   │   ├── index.dart
│   │   │   │   └── qr_scan.dart
│   │   │   ├── mine/
│   │   │   │   ├── add_tag/
│   │   │   │   │   └── index.dart
│   │   │   │   ├── fans/
│   │   │   │   │   └── index.dart
│   │   │   │   ├── firends/
│   │   │   │   │   └── index.dart
│   │   │   │   ├── index.dart
│   │   │   │   ├── mock.dart
│   │   │   │   └── visitors/
│   │   │   │       └── index.dart
│   │   │   └── publish/
│   │   │       └── index.dart
│   │   ├── login/
│   │   │   ├── password.dart
│   │   │   ├── verify_code.dart
│   │   │   └── widgets/
│   │   │       └── head.dart
│   │   ├── settings/
│   │   │   ├── about/
│   │   │   │   └── index.dart
│   │   │   ├── account/
│   │   │   │   ├── index.dart
│   │   │   │   ├── logout.dart
│   │   │   │   ├── update_phone.dart
│   │   │   │   └── update_phone2.dart
│   │   │   ├── backlist/
│   │   │   │   └── index.dart
│   │   │   ├── index.dart
│   │   │   ├── notification/
│   │   │   │   └── index.dart
│   │   │   ├── password/
│   │   │   │   ├── reset.dart
│   │   │   │   └── update.dart
│   │   │   └── privacy/
│   │   │       └── index.dart
│   │   └── verify_code/
│   │       └── index.dart
│   ├── route.dart
│   ├── state/
│   │   └── token.dart
│   └── wcao/
│       ├── kit/
│       │   └── index.dart
│       └── ui/
│           ├── bottom_drive.dart
│           ├── cell.dart
│           ├── main.dart
│           ├── tag.dart
│           └── theme.dart
├── linux/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── flutter/
│   │   ├── CMakeLists.txt
│   │   ├── generated_plugin_registrant.cc
│   │   ├── generated_plugin_registrant.h
│   │   └── generated_plugins.cmake
│   ├── main.cc
│   ├── my_application.cc
│   └── my_application.h
├── macos/
│   ├── .gitignore
│   ├── Flutter/
│   │   ├── Flutter-Debug.xcconfig
│   │   ├── Flutter-Release.xcconfig
│   │   └── GeneratedPluginRegistrant.swift
│   ├── Podfile
│   ├── Runner/
│   │   ├── AppDelegate.swift
│   │   ├── Assets.xcassets/
│   │   │   └── AppIcon.appiconset/
│   │   │       └── Contents.json
│   │   ├── Base.lproj/
│   │   │   └── MainMenu.xib
│   │   ├── Configs/
│   │   │   ├── AppInfo.xcconfig
│   │   │   ├── Debug.xcconfig
│   │   │   ├── Release.xcconfig
│   │   │   └── Warnings.xcconfig
│   │   ├── DebugProfile.entitlements
│   │   ├── Info.plist
│   │   ├── MainFlutterWindow.swift
│   │   └── Release.entitlements
│   ├── Runner.xcodeproj/
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace/
│   │   │   └── xcshareddata/
│   │   │       └── IDEWorkspaceChecks.plist
│   │   └── xcshareddata/
│   │       └── xcschemes/
│   │           └── Runner.xcscheme
│   └── Runner.xcworkspace/
│       ├── contents.xcworkspacedata
│       └── xcshareddata/
│           └── IDEWorkspaceChecks.plist
├── pubspec.yaml
├── test/
│   └── widget_test.dart
├── web/
│   ├── index.html
│   ├── manifest.json
│   └── splash/
│       ├── splash.js
│       └── style.css
└── windows/
    ├── .gitignore
    ├── CMakeLists.txt
    ├── flutter/
    │   ├── CMakeLists.txt
    │   ├── generated_plugin_registrant.cc
    │   ├── generated_plugin_registrant.h
    │   └── generated_plugins.cmake
    └── runner/
        ├── CMakeLists.txt
        ├── Runner.rc
        ├── flutter_window.cpp
        ├── flutter_window.h
        ├── main.cpp
        ├── resource.h
        ├── runner.exe.manifest
        ├── utils.cpp
        ├── utils.h
        ├── win32_window.cpp
        └── win32_window.h

================================================
FILE CONTENTS
================================================

================================================
FILE: .fvm/fvm_config.json
================================================
{
  "flutterSdkVersion": "2.10.5",
  "flavors": {}
}

================================================
FILE: .gitignore
================================================
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/

# IntelliJ related
*.iml
*.ipr
*.iws
.idea/

# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/

# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/

# Web related
lib/generated_plugin_registrant.dart

# Symbolication related
app.*.symbols

# Obfuscation related
app.*.map.json

# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release


================================================
FILE: .metadata
================================================
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.

version:
  revision: c860cba910319332564e1e9d470a17074c1f2dfd
  channel: stable

project_type: app


================================================
FILE: .vscode/settings.json
================================================
{
  "dart.flutterSdkPath": "/Users/meetqy/fvm/versions/2.10.5"
}


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2022 meetqy

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# flutter_dating_template

flutter 版本的交友 app 模板,总计页面**35**个,测试数据基于 mockjs 创建。

## 快速了解

🐱 迅速定位页面

![](./readme/hack.png)

⚡ mock 数据分离

```
- history_match
    - index.dart    # 布局文件
    - mock.dart     # mock实例文件
```

🌊 **不依赖于第三方 api**, 基于 mockjs 本地创建测试数据,更加稳定

## flutter 2.10.x 版本

```sh
flutter --version
```

```sh
Flutter 2.10.4 • channel stable • https://github.com/flutter/flutter.git
Framework • revision c860cba910 (5 weeks ago) • 2022-03-25 00:23:12 -0500
Engine • revision 57d3bac3dd
Tools • Dart 2.16.2 • DevTools 2.9.2
```

## 随机动漫图片

```js
https://rao.pics/r
```

仓库地址: [Github](https://github.com/meetqy/eagleuse)

## 所用插件及作用

> 项目中所用的插件,均支持空安全。

| 插件名                                                                  | 作用           |
| ----------------------------------------------------------------------- | -------------- |
| [flutter_native_splash](https://pub.dev/packages/flutter_native_splash) | 设置启动页     |
| [group_button](https://pub.dev/packages/group_button)                   | checkbox group |
| [getx](https://github.com/jonataslaw/getx)                              | 路由管理       |
| [dart_mock](https://pub.dev/packages/dart_mock)                         | mock data      |
| [scan](https://pub.dev/packages/scan)                                   | 扫描二维码     |
| [dotted_border](https://pub.dev/packages/dotted_border)                 | 边框虚线       |
| [cached_network_image](https://pub.dev/packages/cached_network_image)   | 图片缓存       |

## 任务进度

<details>
<summary>已完成</summary>

- [x] 登录
- [x] 登录/验证码登录
- [x] 登录/密码登录
- [x] 忘记密码
- [x] 隐私政策
- [x] 用户协议
- [x] 启动页
- [x] 首页
- [x] 匹配条件
- [x] 历史匹配
- [x] 社区
- [x] 社区/关注
- [x] 社区/推荐
- [x] 社区/发现
- [x] 消息
- [x] 我的
- [x] 我的-设置
- [x] 账号设置
- [x] 修改密码
- [x] 注销账号
- [x] 消息通知
- [x] 隐私设置
- [x] 隐私/黑名单
- [x] 清除缓存
- [x] 关于我们
- [x] 添加标签
- [x] 我的/好友
- [x] 我的/粉丝
- [x] 我的/访客
- [x] 消息/扫一扫
- [x] 消息/添加好友
- [x] 消息-聊天页
- [x] 发布动态-输入文本

</details>

<details>
<summary>未完成/进行中</summary>

- [ ] 发布
- [ ] 全局轮播图
- [ ] 话题详情
- [ ] 用户中心
- [ ] 聊天界面
- [ ] 举报页面
- [ ] 帖子详情页
- [ ] 编辑资料
</details>

## 原型来源

[社区交友 APP 原型](https://demo.axureshop.com/?url=https://cloud.axureshop.com/CDYHH2&buyurl=https://www.axureshop.com/a/1473981.html),**我只购买了原型,有真实上线需求可能需要提前询问作者。**

## 页面截图

<div>
<img width="187" src="./readme/preview/登录-密码.jpg"/>
<img width="187" src="./readme/preview/登录-验证码.jpg"/>
<img width="187" src="./readme/preview/启动页.jpg"/>
<img width="187" src="./readme/preview/首页-历史匹配.jpg"/>
<img width="187" src="./readme/preview/首页-匹配条件.jpg"/>
<img width="187" src="./readme/preview/首页.jpg"/>
<img width="187" src="./readme/preview/忘记密码.jpg"/>
<img width="187" src="./readme/preview/隐私政策.jpg"/>
<img width="187" src="./readme/preview/用户协议.jpg"/>
<img width="187" src="./readme/preview/社区-关注.jpg"/>
<img width="187" src="./readme/preview/社区-推荐.jpg"/>
<img width="187" src="./readme/preview/社区-发现.jpg"/>
<img width="187" src="./readme/preview/消息.jpg"/>
<img width="187" src="./readme/preview/我的.gif"/>
<img width="187" src="./readme/preview/我的-设置.jpg"/>
<img width="187" src="./readme/preview/账号设置.jpeg"/>
<img width="187" src="./readme/preview/修改密码.jpeg"/>
<img width="187" src="./readme/preview/注销账号.gif"/>
<img width="187" src="./readme/preview/消息通知.jpg"/>
<img width="187" src="./readme/preview/设置-隐私.jpg"/>
<img width="187" src="./readme/preview/隐私-黑名单.jpg"/>
<img width="187" src="./readme/preview/清楚缓存.jpg"/>
<img width="187" src="./readme/preview/关于我们.jpg"/>
<img width="187" src="./readme/preview/我的-添加标签.gif"/>
<img width="187" src="./readme/preview/我的-访客&好友&粉丝.gif"/>
<img width="187" src="./readme/preview/消息-功能.jpg"/>
<img width="187" src="./readme/preview/消息-扫码.jpg"/>
<img width="187" src="./readme/preview/消息-添加好友.jpg"/>
<img width="187" src="./readme/preview/消息-聊天.gif"/>
<img width="187" src="./readme/preview/发布动态-输入文本.gif"/>
</div>


================================================
FILE: analysis_options.yaml
================================================
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.

# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml

linter:
  # The lint rules applied to this project can be customized in the
  # section below to disable rules from the `package:flutter_lints/flutter.yaml`
  # included above or to enable additional rules. A list of all available lints
  # and their documentation is published at
  # https://dart-lang.github.io/linter/lints/index.html.
  #
  # Instead of disabling a lint rule for the entire project in the
  # section below, it can also be suppressed for a single line of code
  # or a specific dart file by using the `// ignore: name_of_lint` and
  # `// ignore_for_file: name_of_lint` syntax on the line or in the file
  # producing the lint.
  rules:
    # avoid_print: false  # Uncomment to disable the `avoid_print` rule
    # prefer_single_quotes: true  # Uncomment to enable the `prefer_single_quotes` rule

# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options


================================================
FILE: android/.gitignore
================================================
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java

# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
**/*.keystore
**/*.jks


================================================
FILE: android/app/build.gradle
================================================
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

android {
    compileSdkVersion flutter.compileSdkVersion

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.example.flutter_dating_template"
        minSdkVersion 19
        targetSdkVersion flutter.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
        }
    }
}

flutter {
    source '../..'
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}


================================================
FILE: android/app/src/debug/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.flutter_dating_template">
    <!-- Flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>


================================================
FILE: android/app/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.flutter_dating_template">
  <application android:label="WcaoOne" android:name="${applicationName}" android:icon="@mipmap/ic_launcher">
    <activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
      <!-- Specifies an Android theme to apply to this Activity as soon as
                 the Android process has started. This theme is visible to the user
                 while the Flutter UI initializes. After that, this theme continues
                 to determine the Window background behind the Flutter UI. -->
      <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" />
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
    <meta-data android:name="flutterEmbedding" android:value="2" />
  </application>
</manifest>

================================================
FILE: android/app/src/main/kotlin/com/example/flutter_dating_template/MainActivity.kt
================================================
package com.example.flutter_dating_template

import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() {
}


================================================
FILE: android/app/src/main/res/drawable/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap android:gravity="fill" android:src="@drawable/background"/>
    </item>
    <item>
        <bitmap android:gravity="center" android:src="@drawable/splash"/>
    </item>
    <item>
        <bitmap android:gravity="bottom" android:src="@drawable/branding"/>
    </item>
</layer-list>

================================================
FILE: android/app/src/main/res/drawable-night/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap android:gravity="fill" android:src="@drawable/background"/>
    </item>
    <item>
        <bitmap android:gravity="center" android:src="@drawable/splash"/>
    </item>
    <item>
        <bitmap android:gravity="bottom" android:src="@drawable/branding"/>
    </item>
</layer-list>

================================================
FILE: android/app/src/main/res/drawable-night-v21/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap android:gravity="fill" android:src="@drawable/background"/>
    </item>
    <item>
        <bitmap android:gravity="center" android:src="@drawable/splash"/>
    </item>
    <item>
        <bitmap android:gravity="bottom" android:src="@drawable/branding"/>
    </item>
</layer-list>

================================================
FILE: android/app/src/main/res/drawable-v21/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap android:gravity="fill" android:src="@drawable/background"/>
    </item>
    <item>
        <bitmap android:gravity="center" android:src="@drawable/splash"/>
    </item>
    <item>
        <bitmap android:gravity="bottom" android:src="@drawable/branding"/>
    </item>
</layer-list>

================================================
FILE: android/app/src/main/res/values/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <!-- Show a splash screen on the activity. Automatically removed when
             Flutter draws its first frame -->
        <item name="android:windowBackground">@drawable/launch_background</item>
        <item name="android:forceDarkAllowed">false</item>
        <item name="android:windowFullscreen">true</item>
    </style>
    <!-- Theme applied to the Android Window as soon as the process has started.
         This theme determines the color of the Android Window while your
         Flutter UI initializes, as well as behind your Flutter UI while its
         running.

         This Theme is only used starting with V2 of Flutter's Android embedding. -->
    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowBackground">?android:colorBackground</item>
    </style>
</resources>

================================================
FILE: android/app/src/main/res/values-night/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <!-- Show a splash screen on the activity. Automatically removed when
             Flutter draws its first frame -->
        <item name="android:windowBackground">@drawable/launch_background</item>
        <item name="android:forceDarkAllowed">false</item>
        <item name="android:windowFullscreen">true</item>
    </style>
    <!-- Theme applied to the Android Window as soon as the process has started.
         This theme determines the color of the Android Window while your
         Flutter UI initializes, as well as behind your Flutter UI while its
         running.

         This Theme is only used starting with V2 of Flutter's Android embedding. -->
    <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <item name="android:windowBackground">?android:colorBackground</item>
    </style>
</resources>

================================================
FILE: android/app/src/main/res/values-night-v31/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <item name="android:forceDarkAllowed">false</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowSplashScreenBackground">#042a49</item>
        <item name="android:windowSplashScreenBrandingImage">@drawable/branding</item>
    </style>
    <!-- Theme applied to the Android Window as soon as the process has started.
         This theme determines the color of the Android Window while your
         Flutter UI initializes, as well as behind your Flutter UI while its
         running.
         
         This Theme is only used starting with V2 of Flutter's Android embedding. -->
    <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <item name="android:windowBackground">?android:colorBackground</item>
    </style>
</resources>

================================================
FILE: android/app/src/main/res/values-v31/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:forceDarkAllowed">false</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowSplashScreenBackground">#e1f5fe</item>
        <item name="android:windowSplashScreenBrandingImage">@drawable/branding</item>
    </style>
    <!-- Theme applied to the Android Window as soon as the process has started.
         This theme determines the color of the Android Window while your
         Flutter UI initializes, as well as behind your Flutter UI while its
         running.
         
         This Theme is only used starting with V2 of Flutter's Android embedding. -->
    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowBackground">?android:colorBackground</item>
    </style>
</resources>

================================================
FILE: android/app/src/profile/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.flutter_dating_template">
  <!-- Flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
  <uses-permission android:name="android.permission.INTERNET" />

  <uses-permission android:name="android.permission.CAMERA" />

  <application>
    <meta-data android:name="flutterEmbedding" android:value="2" />
  </application>
</manifest>

================================================
FILE: android/build.gradle
================================================
buildscript {
    ext.kotlin_version = '1.6.10'
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}


================================================
FILE: android/gradle/wrapper/gradle-wrapper.properties
================================================
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip


================================================
FILE: android/gradle.properties
================================================
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true


================================================
FILE: android/settings.gradle
================================================
include ':app'

def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()

assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }

def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"


================================================
FILE: flutter_native_splash.yaml
================================================
flutter_native_splash:

  # This package generates native code to customize Flutter's default white native splash screen
  # with background color and splash image.
  # Customize the parameters below, and run the following command in the terminal:
  # flutter pub run flutter_native_splash:create
  # To restore Flutter's default white splash screen, run the following command in the terminal:
  # flutter pub run flutter_native_splash:remove

  # color or background_image is the only required parameter.  Use color to set the background
  # of your splash screen to a solid color.  Use background_image to set the background of your
  # splash screen to a png image.  This is useful for gradients. The image will be stretch to the
  # size of the app. Only one parameter can be used, color and background_image cannot both be set.
  color: "#e1f5fe"
  # background_image: assets/logo_lockup_flutter_vertical.png

  # Optional parameters are listed below.  To enable a parameter, uncomment the line by removing
  # the leading # character.

  # The image parameter allows you to specify an image used in the splash screen.  It must be a
  # png file and should be sized for 4x pixel density.
  image: assets/logo_lockup_flutter_vertical.png

  # The branding property allows you to specify an image used as branding in the splash screen.
  # It must be a png file. Currently, it is only supported for Android < v12 and iOS.
  branding: assets/dart.png

  # To position the branding image at the bottom of the screen you can use bottom, bottomRight,
  # and bottomLeft. The default values is bottom if not specified or specified something else.
  #branding_mode: bottom

  # The color_dark, background_image_dark, image_dark, branding_dark are parameters that set the background
  # and image when the device is in dark mode. If they are not specified, the app will use the
  # parameters from above. If the image_dark parameter is specified, color_dark or
  # background_image_dark must be specified.  color_dark and background_image_dark cannot both be
  # set.
  color_dark: "#042a49"
  #background_image_dark: "assets/dark-background.png"
  image_dark: assets/logo_lockup_flutter_vertical_wht.png
  branding_dark: assets/dart_dark.png

  # Android 12 handles the splash screen differently than previous versions.  Please visit
  # https://developer.android.com/guide/topics/ui/splash-screen
  # Following are Android 12 specific parameter.
  android_12:
    # The image parameter sets the splash screen icon image.  If this parameter is not specified,
    # the app's launcher icon will be used instead.
    # App icon with an icon background: This should be 960×960 pixels, and fit within a circle
    # 640 pixels in diameter.
    # App icon without an icon background: This should be 1152×1152 pixels, and fit within a circle
    # 768 pixels in diameter.
    #image: assets/android12splash.png

    # App icon background color.
    #icon_background_color: "#eeeeee"

    # The image_dark parameter and icon_background_color_dark set the image and icon background
    # color when the device is in dark mode. If they are not specified, the app will use the
    # parameters from above.
    #image_dark: assets/android12splash-invert.png
    #icon_background_color_dark: "#111111"

  # The android, ios and web parameters can be used to disable generating a splash screen on a given
  # platform.
  #android: false
  #ios: false
  #web: false

  # The position of the splash image can be set with android_gravity, ios_content_mode, and
  # web_image_mode parameters.  All default to center.
  #
  # android_gravity can be one of the following Android Gravity (see
  # https://developer.android.com/reference/android/view/Gravity): bottom, center,
  # center_horizontal, center_vertical, clip_horizontal, clip_vertical, end, fill, fill_horizontal,
  # fill_vertical, left, right, start, or top.
  #android_gravity: center
  #
  # ios_content_mode can be one of the following iOS UIView.ContentMode (see
  # https://developer.apple.com/documentation/uikit/uiview/contentmode): scaleToFill,
  # scaleAspectFit, scaleAspectFill, center, top, bottom, left, right, topLeft, topRight,
  # bottomLeft, or bottomRight.
  #ios_content_mode: center
  #
  # web_image_mode can be one of the following modes: center, contain, stretch, and cover.
  #web_image_mode: center

  # To hide the notification bar, use the fullscreen parameter.  Has no affect in web since web
  # has no notification bar.  Defaults to false.
  # NOTE: Unlike Android, iOS will not automatically show the notification bar when the app loads.
  #       To show the notification bar, add the following code to your Flutter app:
  #       WidgetsFlutterBinding.ensureInitialized();
  #       SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom, SystemUiOverlay.top]);
  fullscreen: true

  # If you have changed the name(s) of your info.plist file(s), you can specify the filename(s)
  # with the info_plist_files parameter.  Remove only the # characters in the three lines below,
  # do not remove any spaces:
  #info_plist_files:
  #  - 'ios/Runner/Info-Debug.plist'
  #  - 'ios/Runner/Info-Release.plist'

================================================
FILE: ios/.gitignore
================================================
**/dgph
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
**/*sync/
.sconsign.dblite
.tags*
**/.vagrant/
**/DerivedData/
Icon?
**/Pods/
**/.symlinks/
profile
xcuserdata
**/.generated/
Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
Flutter/ephemeral/
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*

# Exceptions to above rules.
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3


================================================
FILE: ios/Flutter/AppFrameworkInfo.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>CFBundleDevelopmentRegion</key>
  <string>en</string>
  <key>CFBundleExecutable</key>
  <string>App</string>
  <key>CFBundleIdentifier</key>
  <string>io.flutter.flutter.app</string>
  <key>CFBundleInfoDictionaryVersion</key>
  <string>6.0</string>
  <key>CFBundleName</key>
  <string>App</string>
  <key>CFBundlePackageType</key>
  <string>FMWK</string>
  <key>CFBundleShortVersionString</key>
  <string>1.0</string>
  <key>CFBundleSignature</key>
  <string>????</string>
  <key>CFBundleVersion</key>
  <string>1.0</string>
  <key>MinimumOSVersion</key>
  <string>9.0</string>
</dict>
</plist>


================================================
FILE: ios/Flutter/Debug.xcconfig
================================================
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"


================================================
FILE: ios/Flutter/Release.xcconfig
================================================
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"


================================================
FILE: ios/Podfile
================================================
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

project 'Runner', {
  'Debug' => :debug,
  'Profile' => :release,
  'Release' => :release,
}

def flutter_root
  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
  unless File.exist?(generated_xcode_build_settings_path)
    raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
  end

  File.foreach(generated_xcode_build_settings_path) do |line|
    matches = line.match(/FLUTTER_ROOT\=(.*)/)
    return matches[1].strip if matches
  end
  raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end

require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)

flutter_ios_podfile_setup

target 'Runner' do
  use_frameworks!
  use_modular_headers!

  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
  end
end


================================================
FILE: ios/Runner/AppDelegate.swift
================================================
import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}


================================================
FILE: ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
    "images": [
        {
            "size": "20x20",
            "idiom": "iphone",
            "filename": "icon-20@2x.png",
            "scale": "2x"
        },
        {
            "size": "20x20",
            "idiom": "iphone",
            "filename": "icon-20@3x.png",
            "scale": "3x"
        },
        {
            "size": "29x29",
            "idiom": "iphone",
            "filename": "icon-29.png",
            "scale": "1x"
        },
        {
            "size": "29x29",
            "idiom": "iphone",
            "filename": "icon-29@2x.png",
            "scale": "2x"
        },
        {
            "size": "29x29",
            "idiom": "iphone",
            "filename": "icon-29@3x.png",
            "scale": "3x"
        },
        {
            "size": "40x40",
            "idiom": "iphone",
            "filename": "icon-40@2x.png",
            "scale": "2x"
        },
        {
            "size": "40x40",
            "idiom": "iphone",
            "filename": "icon-40@3x.png",
            "scale": "3x"
        },
        {
            "size": "60x60",
            "idiom": "iphone",
            "filename": "icon-60@2x.png",
            "scale": "2x"
        },
        {
            "size": "60x60",
            "idiom": "iphone",
            "filename": "icon-60@3x.png",
            "scale": "3x"
        },
        {
            "size": "20x20",
            "idiom": "ipad",
            "filename": "icon-20-ipad.png",
            "scale": "1x"
        },
        {
            "size": "20x20",
            "idiom": "ipad",
            "filename": "icon-20@2x-ipad.png",
            "scale": "2x"
        },
        {
            "size": "29x29",
            "idiom": "ipad",
            "filename": "icon-29-ipad.png",
            "scale": "1x"
        },
        {
            "size": "29x29",
            "idiom": "ipad",
            "filename": "icon-29@2x-ipad.png",
            "scale": "2x"
        },
        {
            "size": "40x40",
            "idiom": "ipad",
            "filename": "icon-40.png",
            "scale": "1x"
        },
        {
            "size": "40x40",
            "idiom": "ipad",
            "filename": "icon-40@2x.png",
            "scale": "2x"
        },
        {
            "size": "76x76",
            "idiom": "ipad",
            "filename": "icon-76.png",
            "scale": "1x"
        },
        {
            "size": "76x76",
            "idiom": "ipad",
            "filename": "icon-76@2x.png",
            "scale": "2x"
        },
        {
            "size": "83.5x83.5",
            "idiom": "ipad",
            "filename": "icon-83.5@2x.png",
            "scale": "2x"
        },
        {
            "size": "1024x1024",
            "idiom": "ios-marketing",
            "filename": "icon-1024.png",
            "scale": "1x"
        }
    ],
    "info": {
        "version": 1,
        "author": "icon.wuruihong.com"
    }
}

================================================
FILE: ios/Runner/Assets.xcassets/BrandingImage.imageset/Contents.json
================================================
{
  "images" : [
    {
      "filename" : "BrandingImage.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "appearances" : [
        {
          "appearance" : "luminosity",
          "value" : "dark"
        }
      ],
      "filename" : "BrandingImageDark.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "BrandingImage@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "appearances" : [
        {
          "appearance" : "luminosity",
          "value" : "dark"
        }
      ],
      "filename" : "BrandingImageDark@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "BrandingImage@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    },
    {
      "appearances" : [
        {
          "appearance" : "luminosity",
          "value" : "dark"
        }
      ],
      "filename" : "BrandingImageDark@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: ios/Runner/Assets.xcassets/Contents.json
================================================
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json
================================================
{
  "images" : [
    {
      "filename" : "background.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "appearances" : [
        {
          "appearance" : "luminosity",
          "value" : "dark"
        }
      ],
      "filename" : "darkbackground.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "appearances" : [
        {
          "appearance" : "luminosity",
          "value" : "dark"
        }
      ],
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    },
    {
      "appearances" : [
        {
          "appearance" : "luminosity",
          "value" : "dark"
        }
      ],
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
================================================
{
  "images" : [
    {
      "filename" : "LaunchImage.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "appearances" : [
        {
          "appearance" : "luminosity",
          "value" : "dark"
        }
      ],
      "filename" : "LaunchImageDark.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "LaunchImage@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "appearances" : [
        {
          "appearance" : "luminosity",
          "value" : "dark"
        }
      ],
      "filename" : "LaunchImageDark@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "LaunchImage@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    },
    {
      "appearances" : [
        {
          "appearance" : "luminosity",
          "value" : "dark"
        }
      ],
      "filename" : "LaunchImageDark@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: ios/Runner/Base.lproj/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
    <device id="retina6_1" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="EHf-IW-A2E">
            <objects>
                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
                        <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" image="LaunchBackground" translatesAutoresizingMaskIntoConstraints="NO" id="tWc-Dq-wcI"/>
                            <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
                                <rect key="frame" x="123" y="355.5" width="168" height="185"/>
                            </imageView>
                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="bottom" image="BrandingImage" translatesAutoresizingMaskIntoConstraints="NO" id="Uyq-Kz-ftE"/>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstAttribute="bottom" secondItem="Uyq-Kz-ftE" secondAttribute="bottom" id="8Yb-q4-8bl"/>
                            <constraint firstItem="Uyq-Kz-ftE" firstAttribute="centerX" secondItem="YRO-k0-Ey4" secondAttribute="centerX" id="3kg-TC-cPP"/>
                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="3T2-ad-Qdv"/>
                            <constraint firstItem="tWc-Dq-wcI" firstAttribute="bottom" secondItem="Ze5-6b-2t3" secondAttribute="bottom" id="RPx-PI-7Xg"/>
                            <constraint firstItem="tWc-Dq-wcI" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="SdS-ul-q2q"/>
                            <constraint firstAttribute="trailing" secondItem="tWc-Dq-wcI" secondAttribute="trailing" id="Swv-Gf-Rwn"/>
                            <constraint firstAttribute="trailing" secondItem="YRO-k0-Ey4" secondAttribute="trailing" id="TQA-XW-tRk"/>
                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="bottom" secondItem="Ze5-6b-2t3" secondAttribute="bottom" id="duK-uY-Gun"/>
                            <constraint firstItem="tWc-Dq-wcI" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="kV7-tw-vXt"/>
                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="xPn-NY-SIU"/>
                        </constraints>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="76.811594202898561" y="251.11607142857142"/>
        </scene>
    </scenes>
    <resources>
        <image name="LaunchImage" width="550" height="1000"/>
        <image name="LaunchBackground" width="1" height="1"/>
        <image name="BrandingImage" width="360" height="189"/>
    </resources>
</document>

================================================
FILE: ios/Runner/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
    </dependencies>
    <scenes>
        <!--Flutter View Controller-->
        <scene sceneID="tne-QT-ifu">
            <objects>
                <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
            </objects>
        </scene>
    </scenes>
</document>


================================================
FILE: ios/Runner/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>CADisableMinimumFrameDurationOnPhone</key>
    <true />
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleDisplayName</key>
    <string>WcaoOne</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>WcaoOne</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>$(FLUTTER_BUILD_NAME)</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>$(FLUTTER_BUILD_NUMBER)</string>
    <key>LSRequiresIPhoneOS</key>
    <true />
    <key>NSCameraUsageDescription</key>
    <string>Qr Scan</string>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UIMainStoryboardFile</key>
    <string>Main</string>
    <key>UIStatusBarHidden</key>
    <true />
    <key>UISupportedInterfaceOrientations</key>
    <array>
      <string>UIInterfaceOrientationPortrait</string>
      <string>UIInterfaceOrientationLandscapeLeft</string>
      <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
      <string>UIInterfaceOrientationPortrait</string>
      <string>UIInterfaceOrientationPortraitUpsideDown</string>
      <string>UIInterfaceOrientationLandscapeLeft</string>
      <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UIViewControllerBasedStatusBarAppearance</key>
    <false />
    <key>io.flutter.embedded_views_preview</key>
    <string>YES</string>
  </dict>
</plist>

================================================
FILE: ios/Runner/Runner-Bridging-Header.h
================================================
#import "GeneratedPluginRegistrant.h"


================================================
FILE: ios/Runner.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 51;
	objects = {

/* Begin PBXBuildFile section */
		07C7FBD31967E49BB0D8D734 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C891805E7EC010C72EB6861 /* Pods_Runner.framework */; };
		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
		74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
		9705A1C41CF9048500538489 /* Embed Frameworks */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 2147483647;
			dstPath = "";
			dstSubfolderSpec = 10;
			files = (
			);
			name = "Embed Frameworks";
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
		1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
		1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
		6C891805E7EC010C72EB6861 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
		74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
		9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
		9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
		97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
		97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
		97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		AACFF7627BDB07AA15B6D1A3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
		F0434F8CE7150E9FBA96AD06 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
		F1F0BC59B794C95A1CCEA66A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		97C146EB1CF9000F007C117D /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				07C7FBD31967E49BB0D8D734 /* Pods_Runner.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		8E0BFD652A3F53F1EF8F3CDB /* Pods */ = {
			isa = PBXGroup;
			children = (
				AACFF7627BDB07AA15B6D1A3 /* Pods-Runner.debug.xcconfig */,
				F0434F8CE7150E9FBA96AD06 /* Pods-Runner.release.xcconfig */,
				F1F0BC59B794C95A1CCEA66A /* Pods-Runner.profile.xcconfig */,
			);
			path = Pods;
			sourceTree = "<group>";
		};
		9740EEB11CF90186004384FC /* Flutter */ = {
			isa = PBXGroup;
			children = (
				3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
				9740EEB21CF90195004384FC /* Debug.xcconfig */,
				7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
				9740EEB31CF90195004384FC /* Generated.xcconfig */,
			);
			name = Flutter;
			sourceTree = "<group>";
		};
		97C146E51CF9000F007C117D = {
			isa = PBXGroup;
			children = (
				9740EEB11CF90186004384FC /* Flutter */,
				97C146F01CF9000F007C117D /* Runner */,
				97C146EF1CF9000F007C117D /* Products */,
				8E0BFD652A3F53F1EF8F3CDB /* Pods */,
				A8D4E41D232B58C92C107532 /* Frameworks */,
			);
			sourceTree = "<group>";
		};
		97C146EF1CF9000F007C117D /* Products */ = {
			isa = PBXGroup;
			children = (
				97C146EE1CF9000F007C117D /* Runner.app */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		97C146F01CF9000F007C117D /* Runner */ = {
			isa = PBXGroup;
			children = (
				97C146FA1CF9000F007C117D /* Main.storyboard */,
				97C146FD1CF9000F007C117D /* Assets.xcassets */,
				97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
				97C147021CF9000F007C117D /* Info.plist */,
				1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
				1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
				74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
				74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
			);
			path = Runner;
			sourceTree = "<group>";
		};
		A8D4E41D232B58C92C107532 /* Frameworks */ = {
			isa = PBXGroup;
			children = (
				6C891805E7EC010C72EB6861 /* Pods_Runner.framework */,
			);
			name = Frameworks;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		97C146ED1CF9000F007C117D /* Runner */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
			buildPhases = (
				27A0D97C4BA1496CC764ED3C /* [CP] Check Pods Manifest.lock */,
				9740EEB61CF901F6004384FC /* Run Script */,
				97C146EA1CF9000F007C117D /* Sources */,
				97C146EB1CF9000F007C117D /* Frameworks */,
				97C146EC1CF9000F007C117D /* Resources */,
				9705A1C41CF9048500538489 /* Embed Frameworks */,
				3B06AD1E1E4923F5004D2608 /* Thin Binary */,
				9829EAAFA409DE381AB82A8E /* [CP] Embed Pods Frameworks */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = Runner;
			productName = Runner;
			productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
			productType = "com.apple.product-type.application";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		97C146E61CF9000F007C117D /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastUpgradeCheck = 1300;
				ORGANIZATIONNAME = "";
				TargetAttributes = {
					97C146ED1CF9000F007C117D = {
						CreatedOnToolsVersion = 7.3.1;
						LastSwiftMigration = 1100;
					};
				};
			};
			buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
			compatibilityVersion = "Xcode 9.3";
			developmentRegion = en;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
			);
			mainGroup = 97C146E51CF9000F007C117D;
			productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				97C146ED1CF9000F007C117D /* Runner */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		97C146EC1CF9000F007C117D /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
				3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
				97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
				97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
		27A0D97C4BA1496CC764ED3C /* [CP] Check Pods Manifest.lock */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputFileListPaths = (
			);
			inputPaths = (
				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
				"${PODS_ROOT}/Manifest.lock",
			);
			name = "[CP] Check Pods Manifest.lock";
			outputFileListPaths = (
			);
			outputPaths = (
				"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
			showEnvVarsInLog = 0;
		};
		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "Thin Binary";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
		};
		9740EEB61CF901F6004384FC /* Run Script */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "Run Script";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
		};
		9829EAAFA409DE381AB82A8E /* [CP] Embed Pods Frameworks */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputFileListPaths = (
				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
			);
			name = "[CP] Embed Pods Frameworks";
			outputFileListPaths = (
				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
			showEnvVarsInLog = 0;
		};
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		97C146EA1CF9000F007C117D /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
				1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXVariantGroup section */
		97C146FA1CF9000F007C117D /* Main.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				97C146FB1CF9000F007C117D /* Base */,
			);
			name = Main.storyboard;
			sourceTree = "<group>";
		};
		97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				97C147001CF9000F007C117D /* Base */,
			);
			name = LaunchScreen.storyboard;
			sourceTree = "<group>";
		};
/* End PBXVariantGroup section */

/* Begin XCBuildConfiguration section */
		249021D3217E4FDB00AE95B9 /* Profile */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				SUPPORTED_PLATFORMS = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
			};
			name = Profile;
		};
		249021D4217E4FDB00AE95B9 /* Profile */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CLANG_ENABLE_MODULES = YES;
				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
				DEVELOPMENT_TEAM = MQD539J6FZ;
				ENABLE_BITCODE = NO;
				INFOPLIST_FILE = Runner/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				PRODUCT_BUNDLE_IDENTIFIER = com.template.wcao.one;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
				SWIFT_VERSION = 5.0;
				VERSIONING_SYSTEM = "apple-generic";
			};
			name = Profile;
		};
		97C147031CF9000F007C117D /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = dwarf;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
			};
			name = Debug;
		};
		97C147041CF9000F007C117D /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				SUPPORTED_PLATFORMS = iphoneos;
				SWIFT_COMPILATION_MODE = wholemodule;
				SWIFT_OPTIMIZATION_LEVEL = "-O";
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
		97C147061CF9000F007C117D /* Debug */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CLANG_ENABLE_MODULES = YES;
				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
				DEVELOPMENT_TEAM = MQD539J6FZ;
				ENABLE_BITCODE = NO;
				INFOPLIST_FILE = Runner/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				PRODUCT_BUNDLE_IDENTIFIER = com.template.wcao.one;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
				SWIFT_VERSION = 5.0;
				VERSIONING_SYSTEM = "apple-generic";
			};
			name = Debug;
		};
		97C147071CF9000F007C117D /* Release */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CLANG_ENABLE_MODULES = YES;
				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
				DEVELOPMENT_TEAM = MQD539J6FZ;
				ENABLE_BITCODE = NO;
				INFOPLIST_FILE = Runner/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				PRODUCT_BUNDLE_IDENTIFIER = com.template.wcao.one;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
				SWIFT_VERSION = 5.0;
				VERSIONING_SYSTEM = "apple-generic";
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				97C147031CF9000F007C117D /* Debug */,
				97C147041CF9000F007C117D /* Release */,
				249021D3217E4FDB00AE95B9 /* Profile */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				97C147061CF9000F007C117D /* Debug */,
				97C147071CF9000F007C117D /* Release */,
				249021D4217E4FDB00AE95B9 /* Profile */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 97C146E61CF9000F007C117D /* Project object */;
}


================================================
FILE: ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "self:">
   </FileRef>
</Workspace>


================================================
FILE: ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDEDidComputeMac32BitWarning</key>
	<true/>
</dict>
</plist>


================================================
FILE: ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>PreviewsEnabled</key>
	<false/>
</dict>
</plist>


================================================
FILE: ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "1300"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "97C146ED1CF9000F007C117D"
               BuildableName = "Runner.app"
               BlueprintName = "Runner"
               ReferencedContainer = "container:Runner.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      shouldUseLaunchSchemeArgsEnv = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
            BuildableName = "Runner.app"
            BlueprintName = "Runner"
            ReferencedContainer = "container:Runner.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <Testables>
      </Testables>
   </TestAction>
   <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
            BuildableName = "Runner.app"
            BlueprintName = "Runner"
            ReferencedContainer = "container:Runner.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Profile"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
            BuildableName = "Runner.app"
            BlueprintName = "Runner"
            ReferencedContainer = "container:Runner.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: ios/Runner.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:Runner.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:Pods/Pods.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDEDidComputeMac32BitWarning</key>
	<true/>
</dict>
</plist>


================================================
FILE: ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>PreviewsEnabled</key>
	<false/>
</dict>
</plist>


================================================
FILE: lib/main.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/route.dart';
import 'package:flutter_dating_template/state/token.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:flutter_native_splash/flutter_native_splash.dart';
import 'package:get/get.dart';

void main() {
  WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
  FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding);
  Get.put(TokenController());
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();

    initialization();
  }

  void initialization() async {
    /// HACK: 启动页关闭
    await Future.delayed(const Duration(seconds: 3));
    FlutterNativeSplash.remove();
  }

  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: '社区交友APP',
      theme: ThemeData(
        appBarTheme: AppBarTheme(
          elevation: 0,
          centerTitle: true,
          color: Colors.white,
          titleTextStyle: TextStyle(
            color: WcaoTheme.base,
            fontSize: WcaoTheme.fsXl,
            fontWeight: FontWeight.w500,
          ),
          iconTheme: IconThemeData(
            color: WcaoTheme.base,
            size: WcaoTheme.fsXl,
          ),
        ),
        primaryColor: WcaoTheme.primary,
        backgroundColor: Colors.transparent,
        textTheme: TextTheme(
          bodyText1: TextStyle(fontSize: WcaoTheme.fsBase),
        ),
        splashColor: Colors.transparent,
        highlightColor: Colors.transparent,

        /// textButton 点击波纹
        textButtonTheme: TextButtonThemeData(
          style: ButtonStyle(
            overlayColor: MaterialStateProperty.all(Colors.transparent),
            textStyle: MaterialStateProperty.all(
              TextStyle(color: WcaoTheme.primary),
            ),
          ),
        ),

        /// 取消slider间距
        sliderTheme: SliderThemeData(
          trackHeight: 12,
          overlayShape: SliderComponentShape.noOverlay,
          activeTrackColor: WcaoTheme.primary,
          inactiveTrackColor: WcaoTheme.primary.withOpacity(.2),
          thumbColor: WcaoTheme.primary,
          valueIndicatorColor: WcaoTheme.primary,
          inactiveTickMarkColor: WcaoTheme.primary,
        ),
      ),
      getPages: getRoutes,
      initialRoute: '/home',
      builder: EasyLoading.init(),
    );
  }
}


================================================
FILE: lib/pages/agreement/privacy.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';

class AgreementPrivacy extends StatefulWidget {
  const AgreementPrivacy({Key? key}) : super(key: key);

  @override
  State<AgreementPrivacy> createState() => _AgreementPrivacyState();
}

class _AgreementPrivacyState extends State<AgreementPrivacy> {
  List<String> txt = [
    "用户按照页面给与的提示完成全部注册步骤后,即成为我们的用户,用户应自行保管账号及密码,并准确、安全地使用其账号及密码。可通过用户自行设定,向用户提供个性化信息服务。",
    "用户充分了解并同意,本平台为用户提供个性化信息服务,用户须为自己注册账号下的行为负责,包括用户所导入、上载、传送的任何内容以及由此产生的任何后果,用户应对内容自行加以判断,并承担因使用内容而引起的所有风险。我们不对因用户行为而导致的损失承担责任。",
    "任何由于黑客攻击、计算机病毒侵入或发作、因政府管制而造成的暂时性关闭等影响网络正常经营的不可抗力而造成的个人资料泄露、丢失、被盗用或被窜改等,本 APP 平台均得免责",
    "用户提供的个人信息或发布的信息不真实、不准确、不合法;发表内容不符合本协议或发表内容不符合法律法规的,我们有权暂停或终止用户使用本平台的服务。用户如果对本 APP的暂停或者终止或收回其账号行为有异议,客户可向平台提出意见,要求其继续提供服务。我们收到客户此类信息的投诉与意见,会审核相关信息,并及时对用户给予反馈。若信息确实不真实或不准确或不合法有效,本平台要求用户提供符合要求的信息。",
    "本 APP 平台使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本 APP 平台不承担任何责任。",
    "本 APP 平台不保证为向用户提供便利而设置的外部链接的准确性和完整性,同时,对于该等外部链接指向的不由本 APP 平台实际控制的任何网页或平台上的内容,本 APP 平台不承担任何责任。",
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("隐私政策"), centerTitle: true),
      body: SafeArea(
        child: SingleChildScrollView(
          child: Padding(
            padding: const EdgeInsets.all(16),
            child: DefaultTextStyle(
              style: TextStyle(fontSize: 16, color: WcaoTheme.base),
              child: Column(
                children: txt
                    .map(
                      (e) => Container(
                        margin: const EdgeInsets.only(bottom: 32),
                        child: Text(e),
                      ),
                    )
                    .toList(),
              ),
            ),
          ),
        ),
      ),
    );
  }
}


================================================
FILE: lib/pages/agreement/user.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';

class AgreementUser extends StatefulWidget {
  const AgreementUser({Key? key}) : super(key: key);

  @override
  State<AgreementUser> createState() => _AgreementUserState();
}

class _AgreementUserState extends State<AgreementUser> {
  List<String> txt = [
    "用户按照页面给与的提示完成全部注册步骤后,即成为我们的用户,用户应自行保管账号及密码,并准确、安全地使用其账号及密码。可通过用户自行设定,向用户提供个性化信息服务。",
    "用户充分了解并同意,本平台为用户提供个性化信息服务,用户须为自己注册账号下的行为负责,包括用户所导入、上载、传送的任何内容以及由此产生的任何后果,用户应对内容自行加以判断,并承担因使用内容而引起的所有风险。我们不对因用户行为而导致的损失承担责任。",
    "任何由于黑客攻击、计算机病毒侵入或发作、因政府管制而造成的暂时性关闭等影响网络正常经营的不可抗力而造成的个人资料泄露、丢失、被盗用或被窜改等,本 APP 平台均得免责",
    "用户提供的个人信息或发布的信息不真实、不准确、不合法;发表内容不符合本协议或发表内容不符合法律法规的,我们有权暂停或终止用户使用本平台的服务。用户如果对本 APP的暂停或者终止或收回其账号行为有异议,客户可向平台提出意见,要求其继续提供服务。我们收到客户此类信息的投诉与意见,会审核相关信息,并及时对用户给予反馈。若信息确实不真实或不准确或不合法有效,本平台要求用户提供符合要求的信息。",
    "本 APP 平台使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本 APP 平台不承担任何责任。",
    "本 APP 平台不保证为向用户提供便利而设置的外部链接的准确性和完整性,同时,对于该等外部链接指向的不由本 APP 平台实际控制的任何网页或平台上的内容,本 APP 平台不承担任何责任。",
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("用户协议"),
        centerTitle: true,
      ),
      body: SafeArea(
        child: SingleChildScrollView(
          child: Padding(
            padding: const EdgeInsets.all(16),
            child: DefaultTextStyle(
              style: TextStyle(fontSize: 16, color: WcaoTheme.base),
              child: Column(
                children: txt
                    .map(
                      (e) => Container(
                        margin: const EdgeInsets.only(bottom: 32),
                        child: Text(e),
                      ),
                    )
                    .toList(),
              ),
            ),
          ),
        ),
      ),
    );
  }
}


================================================
FILE: lib/pages/history_match/index.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/history_match/mock.dart';
import 'package:flutter_dating_template/wcao/kit/index.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:get/get.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';

class HistoryMatch extends StatefulWidget {
  const HistoryMatch({Key? key}) : super(key: key);

  @override
  State<HistoryMatch> createState() => _HistoryMatchState();
}

class _HistoryMatchState extends State<HistoryMatch> {
  List<MockHistoryMatch> items = [];
  final RefreshController _refreshController =
      RefreshController(initialRefresh: false);

  void _onRefresh() async {
    // monitor network fetch
    await Future.delayed(const Duration(seconds: 1));

    setState(() {
      MockHistoryMatch.clean();
      items = MockHistoryMatch.get();
    });

    _refreshController.refreshCompleted();
  }

  void _onLoading() async {
    await Future.delayed(const Duration(seconds: 1));

    if (items.length > 72) {
      return _refreshController.loadNoData();
    }

    if (mounted) {
      setState(() {
        items = MockHistoryMatch.get();
      });
    }

    _refreshController.loadComplete();
  }

  @override
  void initState() {
    super.initState();

    setState(() {
      items = MockHistoryMatch.get();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: InkWell(
          onTap: () => Get.back(),
          child: const Icon(Icons.arrow_back_ios),
        ),
        title: const Text('历史匹配'),
      ),
      body: SmartRefresher(
        enablePullDown: true,
        enablePullUp: true,
        controller: _refreshController,
        onRefresh: _onRefresh,
        onLoading: _onLoading,
        child: GridView.count(
          padding: const EdgeInsets.all(12),
          mainAxisSpacing: 4,
          crossAxisSpacing: 4,
          crossAxisCount: 2,
          childAspectRatio: 0.9,
          children: items.map((item) {
            return Card(
              child: Stack(
                children: [
                  SizedBox(
                    width: double.infinity,
                    height: double.infinity,
                    child: ClipRRect(
                      borderRadius: WcaoTheme.radius,
                      child: WcaoUtils.imageCache(item.avatar),
                    ),
                  ),
                  Positioned(
                    child: Container(
                      color: Colors.black.withOpacity(.15),
                    ),
                  ),
                  Positioned(
                    bottom: 0,
                    child: Padding(
                      padding: const EdgeInsets.symmetric(
                          horizontal: 12, vertical: 8),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          SizedBox(
                            child: Text(
                              item.nickName,
                              style: TextStyle(
                                color: Colors.white,
                                fontSize: WcaoTheme.fsXl,
                                fontWeight: FontWeight.bold,
                              ),
                            ),
                          ),
                          Container(
                            margin: const EdgeInsets.only(top: 4),
                            child: Text(
                              "${item.age} · ${item.sex} · ${item.constellation}",
                              style: const TextStyle(
                                color: Colors.white,
                              ),
                            ),
                          ),
                        ],
                      ),
                    ),
                  )
                ],
              ),
            );
          }).toList(),
        ),
      ),
    );
  }
}


================================================
FILE: lib/pages/history_match/mock.dart
================================================
import 'package:dart_mock/dart_mock.dart' as mock;
import 'package:flutter_dating_template/wcao/kit/index.dart';

class MockHistoryMatch {
  static final List<MockHistoryMatch> _data = [];

  final String nickName;
  final int age;

  ///  女 男 其他
  final String sex;
  final String constellation;
  final String avatar;

  MockHistoryMatch({
    required this.nickName,
    required this.age,
    required this.sex,
    required this.constellation,
    required this.avatar,
  });

  static List<MockHistoryMatch> get() {
    for (var i = 0; i < 12; i++) {
      _data.add(MockHistoryMatch(
        nickName: mock.cname(),
        age: mock.integer(min: 18, max: 45),
        sex: mock.pick(["女", "男", "其他"]),
        constellation: mock.pick([
          "白羊座",
          "金牛座",
          "双子座",
          "巨蟹座",
          "狮子座",
          "处女座",
          "天秤座",
          "天蝎座",
          "射手座",
          "摩羯座",
          "水瓶座",
          "双鱼座",
        ]),
        avatar: WcaoUtils.getRandomImage(),
      ));
    }

    return _data;
  }

  static clean() {
    _data.clear();
  }
}


================================================
FILE: lib/pages/home/community/index.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/home/community/page_view/recommend/index.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';

import 'page_view/found/index.dart';
import 'page_view/like/index.dart';

/// HACK: 社区

class PageViewCommunity extends StatefulWidget {
  const PageViewCommunity({Key? key}) : super(key: key);

  @override
  State<PageViewCommunity> createState() => _PageViewCommunityState();
}

class _PageViewCommunityState extends State<PageViewCommunity>
    with TickerProviderStateMixin {
  int curPage = 0;

  final List<Tab> _tabs = const [
    Tab(text: "关注"),
    Tab(text: "推荐"),
    Tab(text: "发现"),
  ];

  late PageController _pageController;
  late TabController _tabController;

  @override
  void initState() {
    super.initState();

    _tabController = TabController(length: _tabs.length, vsync: this);
    _pageController = PageController(initialPage: curPage);
  }

  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      initialIndex: curPage,
      length: _tabs.length,
      child: Column(
        children: [
          setAppbar(),
          Expanded(
            child: PageView(
              physics: const NeverScrollableScrollPhysics(),
              controller: _pageController,
              children: const [
                PageViewLike(),
                PageViewRecommend(),
                PageViewFound()
              ],
            ),
          )
        ],
      ),
    );
  }

  /// appbar
  AppBar setAppbar() {
    return AppBar(
      automaticallyImplyLeading: false,
      centerTitle: false,
      title: TabBar(
        controller: _tabController,
        indicatorColor: WcaoTheme.primary,
        unselectedLabelColor: WcaoTheme.secondary,
        unselectedLabelStyle: const TextStyle(fontWeight: FontWeight.normal),
        labelColor: WcaoTheme.base,
        labelStyle: TextStyle(
          fontSize: WcaoTheme.fsXl,
          fontWeight: FontWeight.bold,
        ),
        indicatorWeight: 4,
        indicatorPadding: const EdgeInsets.symmetric(horizontal: 24),
        tabs: _tabs,
        onTap: (int page) {
          setState(() {
            curPage = page;
            _pageController.jumpToPage(curPage);
          });
        },
      ),
      actions: [
        IconButton(
          onPressed: () {},
          icon: Icon(
            Icons.email_outlined,
            size: WcaoTheme.fsXl * 1.5,
            color: WcaoTheme.base.withOpacity(.75),
          ),
        )
      ],
    );
  }
}


================================================
FILE: lib/pages/home/community/page_view/found/index.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/home/community/page_view/like/mock.dart';
import 'package:flutter_dating_template/wcao/kit/index.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';

/// HACK: 社区-发现
class PageViewFound extends StatefulWidget {
  const PageViewFound({Key? key}) : super(key: key);

  @override
  State<PageViewFound> createState() => _PageViewFoundState();
}

class _PageViewFoundState extends State<PageViewFound> {
  List<MockLike> list = [];

  @override
  void initState() {
    super.initState();

    MockLike.clear();

    setState(() {
      list = MockLike.get(num: 12);
    });
  }

  final RefreshController _refreshController =
      RefreshController(initialRefresh: false);

  void _onRefresh() async {
    // monitor network fetch
    await Future.delayed(const Duration(milliseconds: 1000));
    MockLike.clear();

    setState(() {
      list = MockLike.get(num: 12);
    });
    _refreshController.refreshCompleted();
  }

  void _onLoading() async {
    // monitor network fetch
    await Future.delayed(const Duration(milliseconds: 1000));

    if (list.length > 60) {
      return _refreshController.loadNoData();
    }

    setState(() {
      list = MockLike.get(num: 12);
    });
    _refreshController.loadComplete();
  }

  @override
  Widget build(BuildContext context) {
    return SmartRefresher(
      enablePullDown: true,
      enablePullUp: true,
      controller: _refreshController,
      onRefresh: _onRefresh,
      onLoading: _onLoading,
      child: GridView.builder(
        padding: const EdgeInsets.symmetric(vertical: 24, horizontal: 12),
        gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
          maxCrossAxisExtent: 200,
          childAspectRatio: 0.6,
          crossAxisSpacing: 12,
          mainAxisSpacing: 12,
        ),
        itemCount: list.length,
        itemBuilder: (ctx, index) {
          var item = list[index];
          return Column(
            children: [
              Expanded(
                child: ClipRRect(
                  borderRadius: BorderRadius.circular(8),
                  child: WcaoUtils.imageCache(
                    item.avatar,
                    fit: BoxFit.fitHeight,
                  ),
                ),
              ),
              Container(
                margin: const EdgeInsets.only(top: 12),
                child: Text(
                  item.text,
                  maxLines: 2,
                  style: const TextStyle(overflow: TextOverflow.ellipsis),
                ),
              ),
              Container(
                margin: const EdgeInsets.only(top: 12),
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Row(
                      children: [
                        SizedBox(
                          width: 24,
                          height: 24,
                          child: ClipRRect(
                            borderRadius: BorderRadius.circular(24),
                            child: WcaoUtils.imageCache(item.avatar),
                          ),
                        ),
                        Container(
                          margin: const EdgeInsets.only(left: 4),
                          child: Text(
                            item.nickName,
                            style: TextStyle(
                                color: WcaoTheme.secondary,
                                fontSize: WcaoTheme.fsSm),
                          ),
                        ),
                      ],
                    ),
                    Row(
                      children: [
                        Icon(
                          Icons.favorite_outline,
                          color: WcaoTheme.secondary,
                          size: WcaoTheme.fsBase,
                        ),
                        Container(
                          margin: const EdgeInsets.only(left: 4),
                          child: Text(
                            "${item.fav}",
                            style: TextStyle(
                              color: WcaoTheme.secondary,
                              fontSize: WcaoTheme.fsSm,
                            ),
                          ),
                        ),
                      ],
                    ),
                  ],
                ),
              )
            ],
          );
        },
      ),
    );
  }
}


================================================
FILE: lib/pages/home/community/page_view/like/index.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/home/community/page_view/like/mock.dart';
import 'package:flutter_dating_template/pages/home/community/page_view/widgets/publish_card.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';

/// HACK: 社区-关注

class PageViewLike extends StatefulWidget {
  const PageViewLike({Key? key}) : super(key: key);

  @override
  State<PageViewLike> createState() => _PageViewLikeState();
}

class _PageViewLikeState extends State<PageViewLike> {
  List<MockLike> items = [];

  final RefreshController _refreshController =
      RefreshController(initialRefresh: false);

  void _onRefresh() async {
    await Future.delayed(const Duration(milliseconds: 1000));
    setState(() {
      MockLike.clear();
      items = MockLike.get();
    });
    _refreshController.refreshCompleted();
  }

  void _onLoading() async {
    await Future.delayed(const Duration(milliseconds: 1000));
    if (items.length > 60) {
      _refreshController.loadNoData();
    }

    setState(() {
      items = MockLike.get();
    });
    _refreshController.loadComplete();
  }

  @override
  void initState() {
    super.initState();

    setState(() {
      items = MockLike.get();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      margin: const EdgeInsets.only(top: 12),
      child: SmartRefresher(
        controller: _refreshController,
        onRefresh: _onRefresh,
        onLoading: _onLoading,
        enablePullDown: true,
        enablePullUp: true,
        child: ListView.builder(
          padding: EdgeInsets.zero,
          itemCount: items.length,
          itemBuilder: (context, index) {
            var item = items[index];
            return PublishCard(item);
          },
        ),
      ),
    );
  }
}


================================================
FILE: lib/pages/home/community/page_view/like/mock.dart
================================================
import 'package:flutter_dating_template/pages/history_match/mock.dart';
import 'package:dart_mock/dart_mock.dart' as mock;
import 'package:flutter_dating_template/wcao/kit/index.dart';

class MockLike extends MockHistoryMatch {
  MockLike({
    required String nickName,
    required int age,
    required String sex,
    required String constellation,
    required String avatar,
    required this.time,
    required this.text,
    required this.mediaType,
    required this.media,
    required this.tag,
    required this.share,
    required this.fav,
    required this.comment,
  }) : super(
          nickName: nickName,
          age: age,
          sex: sex,
          constellation: constellation,
          avatar: avatar,
        );

  static final List<MockLike> _data = [];

  /// 时间
  final String time;

  /// 发布内容
  final String text;

  /// 多媒体类型
  /// true: 视频
  /// false: 图片
  final bool mediaType;

  /// 多媒体
  final List<String> media;

  /// 标签
  final List<String> tag;

  final int share;

  final int fav;

  final int comment;

  static List<MockLike> get({int num = 12}) {
    for (var i = 0; i < num; i++) {
      var mockType = mock.boolean();
      _data.add(MockLike(
        nickName: mock.cname(),
        age: mock.integer(min: 18, max: 45),
        sex: mock.pick(["女", "男", "其他"]),
        constellation: mock.pick([
          "白羊座",
          "金牛座",
          "双子座",
          "巨蟹座",
          "狮子座",
          "处女座",
          "天秤座",
          "天蝎座",
          "射手座",
          "摩羯座",
          "水瓶座",
          "双鱼座",
        ]),
        avatar: WcaoUtils.getRandomImage(),
        tag: List.generate(mock.integer(min: 1, max: 4),
            (index) => '#${mock.ctitle(min: 3, max: 10)}'),
        mediaType: mockType,
        media: List.generate(mock.integer(min: 0, max: 4), (index) {
          if (mockType) {
            return WcaoUtils.getRandomImage();
          } else {
            return WcaoUtils.getRandomImage();
          }
        }),
        share: mock.integer(min: 1, max: 99),
        fav: mock.integer(min: 1, max: 99),
        comment: mock.integer(min: 1, max: 99),
        text: mock.cparagraph(min: 1, max: 4),
        time: mock.dateTime(start: DateTime(2022)).toIso8601String(),
      ));
    }

    return _data;
  }

  static clear() {
    _data.clear();
  }
}


================================================
FILE: lib/pages/home/community/page_view/recommend/index.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/home/community/page_view/like/mock.dart';
import 'package:flutter_dating_template/pages/home/community/page_view/widgets/publish_card.dart';
import 'package:flutter_dating_template/wcao/kit/index.dart';
import 'package:flutter_dating_template/wcao/ui/tag.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:dart_mock/dart_mock.dart' as mock;

/// HACK: 社区-推荐
class PageViewRecommend extends StatefulWidget {
  const PageViewRecommend({Key? key}) : super(key: key);

  @override
  State<PageViewRecommend> createState() => _PageViewRecommendState();
}

class _PageViewRecommendState extends State<PageViewRecommend> {
  /// mockdata

  String searchText = mock.csentence(min: 3, max: 10);

  /// 热门话题
  List<Map> list = List.generate(mock.integer(min: 4, max: 12), (index) {
    return {
      "avatar": WcaoUtils.getRandomImage(),
      "tag": mock.cword(min: 2, max: 4)
    };
  });

  /// 热门标签
  List<String> labelData = List.generate(
      mock.integer(min: 4, max: 10), (index) => mock.cword(min: 4, max: 12));

  /// 发布的类容
  List<MockLike> items = [];

  @override
  void initState() {
    super.initState();
    MockLike.clear();
    setState(() {
      items = MockLike.get(num: 6);
    });
  }

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: Column(
        children: [
          Container(
            padding: const EdgeInsets.only(top: 12, bottom: 24),
            color: Colors.white,
            child: Column(
              children: [
                search(),
                topic(),
                label(context),
              ],
            ),
          ),
          Container(
            margin: const EdgeInsets.only(top: 12),
            color: Colors.white,
            child: Column(
              children: items.map((e) => PublishCard(e)).toList(),
            ),
          ),
          Container(
            padding:
                const EdgeInsets.only(top: 12, bottom: 48, left: 48, right: 48),
            color: Colors.white,
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Expanded(
                    child: Container(
                  height: .5,
                  color: WcaoTheme.placeholder,
                )),
                Container(
                  margin: const EdgeInsets.symmetric(horizontal: 12),
                  child: Text('我是有底线的',
                      style: TextStyle(color: WcaoTheme.placeholder)),
                ),
                Expanded(
                    child: Container(
                  height: .25,
                  color: WcaoTheme.placeholder,
                )),
              ],
            ),
          )
        ],
      ),
    );
  }

  Container label(BuildContext context) {
    return Container(
      margin: const EdgeInsets.only(top: 24),
      child: Wrap(
        alignment: WrapAlignment.start,
        children: labelData
            .map((e) => Container(
                  padding:
                      const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
                  width: MediaQuery.of(context).size.width / 2,
                  child: Text(
                    '# $e',
                    style: TextStyle(
                      overflow: TextOverflow.ellipsis,
                      fontSize: WcaoTheme.fsL,
                    ),
                  ),
                ))
            .toList(),
      ),
    );
  }

  Container topic() {
    return Container(
      margin: const EdgeInsets.only(top: 24),
      height: 76,
      child: ListView(
        padding: const EdgeInsets.symmetric(horizontal: 12),
        scrollDirection: Axis.horizontal,
        children: list
            .map(
              (item) => Container(
                margin: const EdgeInsets.only(right: 12),
                alignment: Alignment.bottomLeft,
                width: 76,
                height: 76,
                decoration: BoxDecoration(
                  image: DecorationImage(
                    fit: BoxFit.fill,
                    image: NetworkImage(item['avatar']),
                  ),
                ),
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: [
                    Tag(
                      item['tag'],
                      color: Colors.white,
                      padding: const EdgeInsets.only(left: 4, right: 6),
                      backgroundColor: WcaoTheme.primary,
                      borderRadius: const BorderRadius.only(
                        topRight: Radius.circular(12),
                        bottomRight: Radius.circular(12),
                      ),
                    ),
                  ],
                ),
              ),
            )
            .toList(),
      ),
    );
  }

  Padding search() {
    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 24),
      child: Container(
        padding: const EdgeInsets.symmetric(horizontal: 12),
        decoration: BoxDecoration(
          color: WcaoTheme.bgColor,
          borderRadius: BorderRadius.circular(20),
        ),
        height: 36,
        child: Row(
          children: [
            Icon(
              Icons.search,
              color: WcaoTheme.placeholder,
            ),
            Container(
              margin: const EdgeInsets.only(left: 4),
              child: Text(
                searchText,
                style: TextStyle(
                  color: WcaoTheme.secondary,
                ),
              ),
            )
          ],
        ),
      ),
    );
  }
}


================================================
FILE: lib/pages/home/community/page_view/widgets/publish_card.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/home/community/page_view/like/mock.dart';
import 'package:flutter_dating_template/wcao/kit/index.dart';
import 'package:flutter_dating_template/wcao/ui/tag.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';

class PublishCard extends StatelessWidget {
  const PublishCard(this.item, {Key? key}) : super(key: key);

  final MockLike item;

  @override
  Widget build(BuildContext context) {
    return Card(
      elevation: 0,
      margin: const EdgeInsets.only(bottom: 4),
      child: Padding(
        padding: const EdgeInsets.all(24),
        child: Row(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            SizedBox(
              width: 44,
              height: 44,
              child: ClipRRect(
                borderRadius: BorderRadius.circular(44),
                child: WcaoUtils.imageCache(item.avatar),
              ),
            ),
            Expanded(
              child: Padding(
                padding: const EdgeInsets.symmetric(horizontal: 8),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(
                      item.nickName,
                      style: TextStyle(
                        color: WcaoTheme.base,
                        fontWeight: FontWeight.bold,
                        fontSize: WcaoTheme.fsL,
                      ),
                    ),
                    Container(
                      margin: const EdgeInsets.only(top: 4),
                      child: Text(
                        item.time,
                        style: TextStyle(
                          color: WcaoTheme.secondary,
                        ),
                      ),
                    ),
                    buildMedia(item.mediaType, item.media),
                    Container(
                      margin: const EdgeInsets.only(top: 12),
                      child: Text(
                        item.text,
                        style: TextStyle(
                          color: WcaoTheme.base,
                          fontSize: WcaoTheme.fsL,
                        ),
                      ),
                    ),
                    Container(
                      margin: const EdgeInsets.only(top: 12),
                      child: Wrap(
                          spacing: 12,
                          runSpacing: 6,
                          children: item.tag.map((e) {
                            return Tag(
                              e,
                              borderRadius: BorderRadius.circular(24),
                              fontSize: WcaoTheme.fsBase,
                              padding: const EdgeInsets.symmetric(
                                vertical: 2,
                                horizontal: 8,
                              ),
                              color: WcaoTheme.primary,
                            );
                          }).toList()),
                    ),
                    Container(
                      margin: const EdgeInsets.only(top: 12),
                      child: Row(
                        crossAxisAlignment: CrossAxisAlignment.center,
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: [
                          // 分享
                          iconText(Icons.offline_share, item.share.toString()),
                          Row(
                            children: [
                              // 关注
                              iconText(
                                Icons.favorite_border_outlined,
                                item.fav.toString(),
                              ),

                              // 评论
                              Container(
                                margin: const EdgeInsets.only(left: 24),
                                child: iconText(
                                  Icons.add_comment_outlined,
                                  item.comment.toString(),
                                ),
                              ),
                            ],
                          )
                        ],
                      ),
                    )
                  ],
                ),
              ),
            )
          ],
        ),
      ),
    );
  }

  /// 显示多媒体
  Widget buildMedia(bool type, List<String> media) {
    if (media.isEmpty) {
      return Container();
    }

    if (type) {
      // 视频
      return Container(
        margin: const EdgeInsets.only(top: 8),
        width: 172,
        height: 280,
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(4),
          image: DecorationImage(
            fit: BoxFit.fill,
            image: NetworkImage(media[0]),
          ),
        ),
        child: Icon(
          Icons.play_circle_fill,
          color: WcaoTheme.primary,
          size: WcaoTheme.fsBase * 4,
        ),
      );
    } else {
      return Container(
        margin: const EdgeInsets.only(top: 8),
        child: Wrap(
          spacing: 12,
          runSpacing: 12,
          children: media
              .map((e) => SizedBox(
                    width: 124,
                    height: 124,
                    child: ClipRRect(
                      borderRadius: BorderRadius.circular(4),
                      child: WcaoUtils.imageCache(e),
                    ),
                  ))
              .toList(),
        ),
      );
    }
  }

  Row iconText(IconData icondata, String text) {
    return Row(
      crossAxisAlignment: CrossAxisAlignment.end,
      children: [
        Icon(
          icondata,
          color: WcaoTheme.secondary,
          size: WcaoTheme.fsXl,
        ),
        Padding(
          padding: const EdgeInsets.only(left: 2),
          child: Text(
            text,
            style: TextStyle(color: WcaoTheme.secondary),
          ),
        )
      ],
    );
  }
}


================================================
FILE: lib/pages/home/index/index.dart
================================================
import 'package:card_swiper/card_swiper.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/home/index/search_dialog.dart';
import 'package:flutter_dating_template/wcao/kit/index.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:get/get.dart';

import 'dart:math' as math;

class PageViewIndex extends StatefulWidget {
  const PageViewIndex({Key? key}) : super(key: key);

  @override
  State<PageViewIndex> createState() => _PageViewIndexState();
}

class _PageViewIndexState extends State<PageViewIndex> {
  List<String> swipers = [
    WcaoUtils.getRandomImage(),
    WcaoUtils.getRandomImage(),
    WcaoUtils.getRandomImage(),
    WcaoUtils.getRandomImage(),
  ];

  @override
  Widget build(BuildContext context) {
    double boxWidth = MediaQuery.of(context).size.width - 24;
    return Column(
      children: [
        AppBar(
          title: appBarTitle(),
          automaticallyImplyLeading: false,
          actions: [
            InkWell(
              onTap: () => Get.toNamed('/history-match'),
              child: Row(
                children: [
                  Center(
                    child: Text(
                      '匹配历史',
                      style: TextStyle(
                        color: WcaoTheme.base,
                        fontSize: WcaoTheme.fsBase,
                      ),
                    ),
                  ),
                  Container(
                    margin: const EdgeInsets.only(left: 6, right: 12),
                    width: 64,
                    child: Stack(
                      alignment: Alignment.centerLeft,
                      children: [
                        avatar('/avatar/1.jpg'),
                        Positioned(left: 14, child: avatar('/avatar/2.jpg')),
                        Positioned(left: 28, child: avatar('/avatar/3.jpg')),
                      ],
                    ),
                  ),
                ],
              ),
            ),
          ],
        ),
        Expanded(
          child: SizedBox(
            width: double.infinity,
            child: Swiper(
              itemCount: swipers.length,
              itemBuilder: (context, index) {
                return Container(
                  padding: const EdgeInsets.only(
                    top: 0,
                    left: 12,
                    right: 12,
                    bottom: 36,
                  ),
                  child: Stack(
                    children: [
                      Container(
                        margin: const EdgeInsets.only(top: 12),
                        padding: const EdgeInsets.symmetric(horizontal: 24),
                        width: boxWidth,
                        child: Opacity(
                          opacity: .25,
                          child: ClipRRect(
                            borderRadius: BorderRadius.circular(20),
                            child: WcaoUtils.imageCache(swipers[index]),
                          ),
                        ),
                      ),
                      Container(
                        margin: const EdgeInsets.only(top: 24),
                        child: ClipRRect(
                          borderRadius: BorderRadius.circular(20),
                          child: Stack(children: [
                            SizedBox(
                              width: boxWidth + 24,
                              child: ClipRRect(
                                borderRadius: BorderRadius.circular(20),
                                child: WcaoUtils.imageCache(swipers[index]),
                              ),
                            ),
                            Positioned(
                              bottom: 0,
                              left: 0,
                              width: boxWidth,
                              child: Container(
                                color: Colors.black.withOpacity(.15),
                                padding: const EdgeInsets.symmetric(
                                  horizontal: 12,
                                  vertical: 36,
                                ),
                                child: Row(
                                  mainAxisSize: MainAxisSize.min,
                                  mainAxisAlignment:
                                      MainAxisAlignment.spaceBetween,
                                  children: [
                                    Column(
                                      crossAxisAlignment:
                                          CrossAxisAlignment.start,
                                      children: [
                                        Text(
                                          '圆子',
                                          style: TextStyle(
                                            fontSize: 28,
                                            fontWeight: FontWeight.bold,
                                            color: WcaoTheme.outline,
                                          ),
                                        ),
                                        Container(
                                          margin: const EdgeInsets.symmetric(
                                              vertical: 4),
                                          child: Row(
                                            children: [
                                              Icon(
                                                Icons.fmd_good,
                                                color: WcaoTheme.outline,
                                                size: WcaoTheme.fsBase,
                                              ),
                                              Container(
                                                margin: const EdgeInsets.only(
                                                    left: 4),
                                                child: Text(
                                                  '1.1km',
                                                  style: TextStyle(
                                                    fontSize: WcaoTheme.fsBase,
                                                    color: WcaoTheme.outline,
                                                  ),
                                                ),
                                              )
                                            ],
                                          ),
                                        ),
                                        Row(
                                          children: [
                                            Container(
                                              margin: const EdgeInsets.only(
                                                  right: 8),
                                              child: tag('180m'),
                                            ),
                                            Container(
                                              margin: const EdgeInsets.only(
                                                  right: 8),
                                              child: tag('射手座'),
                                            ),
                                            Container(
                                              margin: const EdgeInsets.only(
                                                  right: 8),
                                              child: tag('21岁'),
                                            ),
                                          ],
                                        )
                                      ],
                                    ),
                                    Container(
                                      width: 64,
                                      height: 64,
                                      decoration: BoxDecoration(
                                        color: Colors.white,
                                        borderRadius: BorderRadius.circular(64),
                                      ),
                                      child: const Icon(
                                        Icons.favorite,
                                        color: Colors.redAccent,
                                        size: 48,
                                      ),
                                    )
                                  ],
                                ),
                              ),
                            )
                          ]),
                        ),
                      )
                    ],
                  ),
                );
              },
            ),
          ),
        )
      ],
    );
  }

  Widget appBarTitle() {
    return InkWell(
      onTap: () {
        /// 弹出search
        showModalBottomSheet(
          builder: (context) => const SearchDialog(),
          context: context,
          isScrollControlled: true,
        );
      },
      child: Row(children: [
        Text(
          '匹配条件',
          style: TextStyle(fontSize: WcaoTheme.fsBase),
        ),
        Container(
          margin: const EdgeInsets.only(left: 4),
          child: Transform.rotate(
            angle: -math.pi / 2,
            child: Icon(
              Icons.arrow_back_ios_new,
              size: WcaoTheme.fsBase,
            ),
          ),
        ),
      ]),
    );
  }

  Container tag(String str) {
    return Container(
      padding: const EdgeInsets.symmetric(
        vertical: 2,
        horizontal: 4,
      ),
      color: Colors.black.withOpacity(.46),
      child: Text(
        str,
        style: TextStyle(
          fontSize: WcaoTheme.fsSm,
          color: WcaoTheme.outline,
        ),
      ),
    );
  }

  Widget avatar(String url) {
    return Container(
      decoration: BoxDecoration(
        border: Border.all(width: 2, color: WcaoTheme.outline),
        borderRadius: BorderRadius.circular(24),
      ),
      child: CircleAvatar(
        radius: 10,
        backgroundImage: NetworkImage(WcaoUtils.getRandomImage()),
      ),
    );
  }
}


================================================
FILE: lib/pages/home/index/search_dialog.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:group_button/group_button.dart';

class SearchDialog extends StatefulWidget {
  const SearchDialog({Key? key}) : super(key: key);

  @override
  State<SearchDialog> createState() => _SearchDialogState();
}

class _SearchDialogState extends State<SearchDialog> {
  double age = 18;
  List<String> sex = ['男', '女', '不限'];
  List<String> edu = ["小学", "初中", "高中", "大学"];
  List<String> constellation = [
    "白羊",
    "金牛",
    "双子",
    "巨蟹",
    "狮子",
    "处女",
    "天秤",
    "天蝎",
    "射手",
    "摩羯",
    "水瓶",
    "双鱼",
  ];

  @override
  Widget build(BuildContext context) {
    return FractionallySizedBox(
      heightFactor: .9,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          appbarTitle(context),
          Expanded(
            child: SingleChildScrollView(
              child: SafeArea(
                child: body(),
              ),
            ),
          )
        ],
      ),
    );
  }

  Widget body() {
    return Padding(
      padding: const EdgeInsets.all(12),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          SizedBox(
            child: Text(
              '基础条件',
              style: TextStyle(color: WcaoTheme.secondary),
            ),
          ),
          setAge(),
          Container(
            margin: const EdgeInsets.only(top: 24),
            child: Text(
              '其他条件',
              style: TextStyle(color: WcaoTheme.secondary),
            ),
          ),
          setSex(),
          setEdu(),
          setConstellation()
        ],
      ),
    );
  }

  /// 星座
  Column setConstellation() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
          margin: const EdgeInsets.only(top: 24),
          child: Text(
            '星座',
            style: TextStyle(fontSize: WcaoTheme.fsL),
          ),
        ),
        Container(
          margin: const EdgeInsets.only(top: 12),
          child: GroupButton(
            isRadio: false,
            buttons: constellation,
            options: groupButtonOptions(),
          ),
        )
      ],
    );
  }

  /// 学历
  Column setEdu() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
          margin: const EdgeInsets.only(top: 24),
          child: Text(
            '学历',
            style: TextStyle(fontSize: WcaoTheme.fsL),
          ),
        ),
        Container(
          margin: const EdgeInsets.only(top: 12),
          child: GroupButton(
            buttons: edu,
            options: groupButtonOptions(),
          ),
        )
      ],
    );
  }

  /// 性别
  Column setSex() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
          margin: const EdgeInsets.only(top: 24),
          child: Text(
            '性别',
            style: TextStyle(fontSize: WcaoTheme.fsL),
          ),
        ),
        Container(
          margin: const EdgeInsets.only(top: 12),
          child: GroupButton(
            buttons: sex,
            options: groupButtonOptions(),
          ),
        )
      ],
    );
  }

  /// group button 默认设置
  GroupButtonOptions groupButtonOptions() {
    return GroupButtonOptions(
      elevation: 0,
      mainGroupAlignment: MainGroupAlignment.start,
      textPadding: const EdgeInsets.symmetric(vertical: 2, horizontal: 12),
      runSpacing: 0,
      spacing: 12,
      borderRadius: BorderRadius.circular(6),
      unselectedColor: WcaoTheme.outline.withOpacity(.25),
      selectedColor: WcaoTheme.primary.withOpacity(.2),
      unselectedBorderColor: WcaoTheme.outline,
      selectedBorderColor: WcaoTheme.primary,
      unselectedTextStyle: TextStyle(
        color: WcaoTheme.base.withOpacity(.85),
        fontSize: WcaoTheme.fsSm,
      ),
      selectedTextStyle: TextStyle(
        color: WcaoTheme.primary,
        fontSize: WcaoTheme.fsSm,
      ),
    );
  }

  Container setAge() {
    return Container(
      margin: const EdgeInsets.only(top: 24),
      child: Column(
        children: [
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Text(
                '年龄',
                style: TextStyle(
                  fontSize: WcaoTheme.fsL,
                ),
              ),
              Text(
                "18-45",
                style: TextStyle(
                  fontSize: WcaoTheme.fsL,
                ),
              )
            ],
          ),
          Container(
            margin: const EdgeInsets.only(top: 24),
            child: Slider(
              min: 18,
              max: 45,
              value: age,
              divisions: 27,
              label: age.round().toString(),
              onChanged: (value) {
                /// HACK: 设置年龄
                setState(() {
                  age = value;
                });
              },
            ),
          )
        ],
      ),
    );
  }

  AppBar appbarTitle(BuildContext context) {
    return AppBar(
      elevation: 0,
      leading: IconButton(
        icon: const Icon(Icons.close),
        onPressed: () => Navigator.pop(context),
      ),
      title: Text(
        '筛选条件',
        style: TextStyle(
          fontSize: WcaoTheme.fsXl,
          fontWeight: FontWeight.bold,
        ),
      ),
      actions: [
        TextButton(
          onPressed: () {
            /// HACK: 匹配条件确认
            Navigator.pop(context);
          },
          child: Text(
            '确定',
            style: TextStyle(
              color: WcaoTheme.primary,
            ),
          ),
        )
      ],
    );
  }
}


================================================
FILE: lib/pages/home/index.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/home/community/index.dart';
import 'package:flutter_dating_template/pages/home/index/index.dart';
import 'package:flutter_dating_template/pages/home/message/index.dart';
import 'package:flutter_dating_template/pages/home/mine/index.dart';
import 'package:flutter_dating_template/state/token.dart';

import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:get/get.dart';

/// 首页 PageView Controller.
class Home extends StatefulWidget {
  const Home({Key? key}) : super(key: key);

  @override
  State<Home> createState() => _HomeState();
}

class _HomeState extends State<Home> {
  int curPage = 0;
  final PageController _pageController = PageController();

  @override
  void dispose() {
    _pageController.dispose();
    super.dispose();
  }

  @override
  void initState() {
    super.initState();

    Future.delayed(Duration.zero, () {
      if (TokenController.to.token.isEmpty) {
        Get.toNamed('/login/verify-code');
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: PageView(
        controller: _pageController,
        physics: const NeverScrollableScrollPhysics(),
        children: const [
          PageViewIndex(),
          PageViewCommunity(),
          PageViewMessage(),
          PageViewMine(),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        backgroundColor: WcaoTheme.primary,
        onPressed: () {
          Get.toNamed('/publish');
        },
        child: const Icon(
          Icons.add,
        ),
      ),
      resizeToAvoidBottomInset: true,
      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
      bottomNavigationBar: BottomAppBar(
        shape: const CircularNotchedRectangle(),
        child: Padding(
          padding: const EdgeInsets.only(top: 8),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              barItem(curPage == 0, 0, icon: Icons.home_filled, text: "首页"),
              barItem(curPage == 1, 1, icon: Icons.access_alarm, text: "社区"),
              const SizedBox(
                width: 48,
              ),
              barItem(curPage == 2, 2, icon: Icons.message_sharp, text: "消息"),
              barItem(curPage == 3, 3, icon: Icons.person, text: "我的"),
            ],
          ),
        ),
      ),
    );
  }

  IconButton barItem(
    bool active,
    int initPage, {
    required IconData icon,
    required String text,
  }) {
    return IconButton(
      padding: const EdgeInsets.all(0),
      color: active ? WcaoTheme.primary : WcaoTheme.secondary,
      icon: Column(
        children: [
          Icon(icon),
          Text(
            text,
            style: TextStyle(
              color: active ? WcaoTheme.primary : WcaoTheme.secondary,
            ),
          ),
        ],
      ),
      onPressed: () {
        setState(() {
          curPage = initPage;
          _pageController.jumpToPage(curPage);
        });
      },
    );
  }
}


================================================
FILE: lib/pages/home/message/chat/index.dart
================================================
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:dart_mock/dart_mock.dart' as mock;
import 'package:flutter_dating_template/wcao/kit/index.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';

/// HACK: 消息-聊天

class MessageChat extends StatefulWidget {
  const MessageChat({Key? key}) : super(key: key);

  @override
  State<MessageChat> createState() => _MessageChatState();
}

class _MessageChatState extends State<MessageChat> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('好友名称'),
        actions: [
          IconButton(
            onPressed: () {
              showCupertinoModalPopup(
                context: context,
                builder: (context) => SafeArea(
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.end,
                    children: [
                      CupertinoActionSheet(
                        actions: [
                          CupertinoActionSheetAction(
                            onPressed: () {
                              Navigator.pop(context);
                            },
                            child: const Text("拉黑"),
                          ),
                          CupertinoActionSheetAction(
                            onPressed: () {
                              Navigator.pop(context);
                            },
                            child: const Text(
                              "举报",
                              style: TextStyle(color: Colors.redAccent),
                            ),
                          ),
                        ],
                      ),
                      CupertinoActionSheet(
                        actions: [
                          CupertinoActionSheetAction(
                            onPressed: () {
                              Navigator.pop(context);
                            },
                            child: Text(
                              "取消",
                              style: TextStyle(color: WcaoTheme.placeholder),
                            ),
                          )
                        ],
                      ),
                    ],
                  ),
                ),
              );
            },
            icon: const Icon(Icons.more_horiz),
          )
        ],
      ),
      bottomNavigationBar: const BottomAppBar(
        child: TextField(
          keyboardType: TextInputType.text,
          obscureText: false,
          enableSuggestions: false,
          autocorrect: false,
          decoration: InputDecoration(
            hintText: "发送消息...",
            contentPadding: EdgeInsets.symmetric(
              vertical: 0,
              horizontal: 16,
            ),
            enabledBorder: OutlineInputBorder(
              borderSide: BorderSide.none,
            ),
            focusedBorder: OutlineInputBorder(
              borderSide: BorderSide.none,
            ),
          ),
        ),
      ),
      body: SafeArea(
        child: ListView.builder(
          itemCount: 24,
          padding: const EdgeInsets.symmetric(horizontal: 24),
          itemBuilder: (context, index) {
            return msgItem(index, reversed: !(index % 2 == 0));
          },
        ),
      ),
    );
  }

  Container msgItem(int index, {bool? reversed = false}) {
    bool right = index % 2 == 0;

    List<Widget> _temp = [
      Expanded(
        child: Container(
          padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
          decoration: BoxDecoration(
            color: Colors.orange,
            borderRadius: BorderRadius.circular(12),
          ),
          margin: right
              ? const EdgeInsets.only(right: 12)
              : const EdgeInsets.only(left: 12),
          child: Text(
            mock.cparagraph(min: 1, max: 3),
            style: const TextStyle(color: Colors.white),
          ),
        ),
      ),
      CircleAvatar(
        backgroundImage: NetworkImage(
          WcaoUtils.getRandomImage(),
        ),
      )
    ];

    return Container(
      padding: const EdgeInsets.symmetric(vertical: 12),
      child: Row(
        mainAxisAlignment:
            right ? MainAxisAlignment.end : MainAxisAlignment.start,
        children: reversed == true ? _temp.reversed.toList() : _temp,
      ),
    );
  }
}


================================================
FILE: lib/pages/home/message/firends_dialog.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';

class FirendsDialog extends StatefulWidget {
  const FirendsDialog({Key? key}) : super(key: key);

  @override
  State<FirendsDialog> createState() => _FirendsDialogState();
}

class _FirendsDialogState extends State<FirendsDialog> {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Stack(
            clipBehavior: Clip.none,
            alignment: Alignment.center,
            children: <Widget>[
              Container(
                decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.circular(12),
                ),
                margin: const EdgeInsets.symmetric(horizontal: 36),
                padding: const EdgeInsets.only(top: 36, bottom: 24),
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: [
                    Container(
                      margin: const EdgeInsets.only(top: 24),
                      alignment: Alignment.center,
                      child: Text(
                        '西瓜',
                        style: TextStyle(
                          fontSize: WcaoTheme.fsXl,
                          fontWeight: FontWeight.bold,
                        ),
                      ),
                    ),
                    Container(
                      margin: const EdgeInsets.symmetric(vertical: 24),
                      alignment: Alignment.center,
                      child: Container(
                        width: 128,
                        height: 128,
                        alignment: Alignment.center,
                        decoration: BoxDecoration(
                          border: Border.all(
                            width: 1,
                            color: Colors.black12,
                          ),
                        ),
                        child: const Text('二维码'),
                      ),
                    ),
                    Container(
                      alignment: Alignment.center,
                      child: Text(
                        '扫码二维码,来爱交友找我玩吧!',
                        style: TextStyle(color: WcaoTheme.secondary),
                      ),
                    ),
                  ],
                ),
              ),
              Positioned(
                top: -36,
                child: CircleAvatar(
                  radius: 36,
                  child: ClipRRect(
                    borderRadius: BorderRadius.circular(36),
                    child: Image.network(
                        'https://wcao.cc/image-space/api/avatar?xxx'),
                  ),
                ),
              )
            ],
          ),
          Container(
            padding: const EdgeInsets.symmetric(vertical: 24, horizontal: 36),
            alignment: Alignment.center,
            child: Column(
              children: [
                Text(
                  '分享',
                  style: TextStyle(
                    color: Colors.white,
                    fontSize: WcaoTheme.fsL,
                    fontWeight: FontWeight.bold,
                  ),
                ),
                Container(
                  margin: const EdgeInsets.only(top: 24),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      shareButton('保存图片', Icons.download, Colors.red),
                      shareButton('微信好友', Icons.wechat, Colors.green),
                      shareButton('朋友圈', Icons.person, Colors.orange),
                      shareButton(
                          '朋友圈', Icons.wb_twilight_rounded, Colors.teal),
                    ],
                  ),
                )
              ],
            ),
          )
        ],
      ),
    );
  }

  Column shareButton(String text, IconData icon, Color color) {
    return Column(
      children: [
        Container(
          width: 48,
          height: 48,
          margin: const EdgeInsets.only(bottom: 4),
          decoration: BoxDecoration(
            color: color,
            borderRadius: BorderRadius.circular(24),
          ),
          child: Icon(
            icon,
            color: Colors.white,
          ),
        ),
        Text(
          text,
          style: const TextStyle(color: Colors.white),
        )
      ],
    );
  }
}


================================================
FILE: lib/pages/home/message/index.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/home/community/page_view/like/mock.dart';
import 'package:flutter_dating_template/pages/home/message/firends_dialog.dart';
import 'package:flutter_dating_template/pages/home/message/qr_scan.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:get/get.dart';
import 'package:scan/scan.dart';

class PageViewMessage extends StatefulWidget {
  const PageViewMessage({Key? key}) : super(key: key);

  @override
  State<PageViewMessage> createState() => _PageViewMessageState();
}

class _PageViewMessageState extends State<PageViewMessage> {
  List<MockLike> lists = [];
  ScanController controller = ScanController();

  @override
  void initState() {
    super.initState();

    setState(() {
      lists = MockLike.get();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: SafeArea(
        child: Column(
          children: [
            AppBar(
              automaticallyImplyLeading: false,
              title: const Text('聊天'),
              actions: [
                PopupMenuButton(
                  padding: EdgeInsets.zero,
                  icon: Icon(
                    Icons.add,
                    size: WcaoTheme.fsBase * 1.75,
                  ),
                  onSelected: (item) async {
                    if (item == 1) {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (_) => const QrScan(),
                        ),
                      );
                    } else if (item == 2) {
                      showDialog(
                        context: context,
                        barrierDismissible: true,
                        builder: (BuildContext context) =>
                            const FirendsDialog(),
                      );
                    }
                  },
                  itemBuilder: (BuildContext context) => [
                    PopupMenuItem(
                      padding: const EdgeInsets.only(left: 12),
                      child: Row(
                        children: [
                          const Icon(Icons.crop_free),
                          Container(
                            margin: const EdgeInsets.only(left: 8),
                            child: const Text('扫一扫'),
                          ),
                        ],
                      ),
                      value: 1,
                    ),
                    PopupMenuItem(
                      padding: const EdgeInsets.only(left: 12),
                      child: Row(
                        mainAxisSize: MainAxisSize.min,
                        children: [
                          const Icon(Icons.how_to_reg),
                          Container(
                            margin: const EdgeInsets.only(left: 8),
                            child: const Text('添加好友'),
                          ),
                        ],
                      ),
                      value: 2,
                    ),
                  ],
                )
              ],
            ),
            Expanded(
              child: SingleChildScrollView(
                child: Column(
                  children: [
                    search(),
                    Column(
                      children: lists
                          .map(
                            (e) => InkWell(
                              child: listCard(e),
                              onTap: () => Get.toNamed('/message/chat'),
                            ),
                          )
                          .toList(),
                    ),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }

  Container listCard(MockLike item) {
    return Container(
      padding: const EdgeInsets.symmetric(horizontal: 12),
      margin: const EdgeInsets.only(top: 24),
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          CircleAvatar(
            radius: 28,
            backgroundImage: NetworkImage(item.avatar),
          ),
          Expanded(
            child: Container(
              padding: const EdgeInsets.only(bottom: 20),
              margin: const EdgeInsets.only(left: 24),
              decoration: BoxDecoration(
                border: Border(
                  bottom: BorderSide(
                    width: .5,
                    color: WcaoTheme.placeholder.withOpacity(.5),
                  ),
                ),
              ),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Text(
                        item.nickName,
                        style: TextStyle(
                          fontSize: WcaoTheme.fsXl,
                          fontWeight: FontWeight.bold,
                        ),
                      ),
                      Text(
                        item.time.split('T')[0],
                        style: TextStyle(
                            fontSize: WcaoTheme.fsSm,
                            color: WcaoTheme.secondary),
                      )
                    ],
                  ),
                  Container(
                    margin: const EdgeInsets.only(top: 4),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        Expanded(
                          child: Container(
                            padding: const EdgeInsets.only(right: 24),
                            child: Text(
                              item.text,
                              style: TextStyle(
                                overflow: TextOverflow.ellipsis,
                                color: WcaoTheme.secondary,
                                fontSize: WcaoTheme.fsBase,
                              ),
                            ),
                          ),
                        ),
                        CircleAvatar(
                          radius: 10,
                          backgroundColor: WcaoTheme.primary,
                          child: Text(
                            '${item.fav}',
                            style: TextStyle(fontSize: WcaoTheme.fsSm),
                          ),
                        )
                      ],
                    ),
                  )
                ],
              ),
            ),
          )
        ],
      ),
    );
  }

  Container search() {
    return Container(
      margin: const EdgeInsets.only(top: 12),
      padding: const EdgeInsets.symmetric(horizontal: 12),
      height: 36,
      child: Container(
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(24),
          color: WcaoTheme.bgColor,
        ),
        child: TextField(
          enableSuggestions: false,
          autocorrect: false,
          style: TextStyle(fontSize: WcaoTheme.fsBase),
          decoration: const InputDecoration(
            hintText: "请输入搜索关键词",
            contentPadding: EdgeInsets.symmetric(vertical: 0, horizontal: 16),
            enabledBorder: OutlineInputBorder(
              borderSide: BorderSide.none,
            ),
            focusedBorder: OutlineInputBorder(
              borderSide: BorderSide.none,
            ),
          ),
        ),
      ),
    );
  }
}


================================================
FILE: lib/pages/home/message/qr_scan.dart
================================================
import 'package:flutter/material.dart';
import 'package:scan/scan.dart';

class QrScan extends StatefulWidget {
  const QrScan({Key? key}) : super(key: key);

  @override
  State<QrScan> createState() => _QrScanState();
}

class _QrScanState extends State<QrScan> {
  ScanController controller = ScanController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('扫一扫'),
      ),
      body: ScanView(
        controller: controller,
        onCapture: (data) {},
      ),
    );
  }
}


================================================
FILE: lib/pages/home/mine/add_tag/index.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/wcao/ui/tag.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:dart_mock/dart_mock.dart' as mock;
import 'package:get/get.dart';

class MineAddTag extends StatefulWidget {
  const MineAddTag({Key? key}) : super(key: key);

  @override
  State<MineAddTag> createState() => _MineAddTagState();
}

class _MineAddTagState extends State<MineAddTag> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('添加标签'),
        actions: [
          TextButton(
            onPressed: () => Get.back(),
            child: Text(
              '完成',
              style: TextStyle(color: WcaoTheme.base),
            ),
          )
        ],
      ),
      body: DefaultTabController(
        length: 4,
        child: SafeArea(
          child: Column(
            children: [
              Container(
                width: double.infinity,
                padding:
                    const EdgeInsets.symmetric(horizontal: 12, vertical: 12),
                color: WcaoTheme.primary.withOpacity(.25),
                child: Wrap(
                  alignment: WrapAlignment.start,
                  spacing: 12,
                  runSpacing: 12,
                  children: List.generate(
                    12,
                    (index) => Tag(
                      mock.ctitle(),
                      backgroundColor: WcaoTheme.primary,
                      color: Colors.white,
                      close: true,
                      borderRadius: BorderRadius.circular(20),
                      padding: const EdgeInsets.symmetric(
                        horizontal: 6,
                        vertical: 6,
                      ),
                    ),
                  ),
                ),
              ),
              Container(
                margin: const EdgeInsets.only(top: 12),
                child: TabBar(
                  padding: const EdgeInsets.symmetric(horizontal: 12),
                  labelStyle: const TextStyle(fontWeight: FontWeight.normal),
                  labelColor: WcaoTheme.primary,
                  unselectedLabelColor: WcaoTheme.base,
                  indicatorColor: WcaoTheme.primary,
                  indicatorPadding: const EdgeInsets.symmetric(horizontal: 24),
                  tabs: const [
                    Tab(text: '星座'),
                    Tab(text: '年代'),
                    Tab(text: '兴趣'),
                    Tab(text: '特质'),
                  ],
                ),
              ),
              Expanded(
                child: Container(
                  margin: const EdgeInsets.only(top: 12),
                  child: TabBarView(
                    children: [
                      Padding(
                        padding: const EdgeInsets.symmetric(horizontal: 24),
                        child: tabbarView1(),
                      ),
                      Padding(
                        padding: const EdgeInsets.symmetric(horizontal: 24),
                        child: tabbarView2(),
                      ),
                      Padding(
                        padding: const EdgeInsets.symmetric(horizontal: 24),
                        child: tabbarView3(),
                      ),
                      Padding(
                        padding: const EdgeInsets.symmetric(horizontal: 24),
                        child: tabbarView4(),
                      ),
                    ],
                  ),
                ),
              )
            ],
          ),
        ),
      ),
    );
  }

  Wrap tabbarView4() {
    return Wrap(
      runSpacing: 12,
      spacing: 12,
      alignment: WrapAlignment.start,
      children: List.generate(
        16,
        (index) => Tag(
          mock.ctitle(),
          border: Border.all(width: .5, color: WcaoTheme.outline),
          backgroundColor: Colors.white,
          color: WcaoTheme.base,
          padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 12),
          borderRadius: BorderRadius.circular(24),
        ),
      ),
    );
  }

  Wrap tabbarView3() {
    return Wrap(
      runSpacing: 12,
      spacing: 12,
      alignment: WrapAlignment.start,
      children: List.generate(
        16,
        (index) => Tag(
          mock.county(),
          border: Border.all(width: .5, color: WcaoTheme.outline),
          backgroundColor: Colors.white,
          color: WcaoTheme.base,
          padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 12),
          borderRadius: BorderRadius.circular(24),
        ),
      ),
    );
  }

  Wrap tabbarView2() {
    return Wrap(
      runSpacing: 12,
      spacing: 12,
      alignment: WrapAlignment.spaceBetween,
      children: List.generate(
        5,
        (index) => Tag(
          '${mock.integer(min: 6, max: 9)}0年代',
          border: Border.all(width: .5, color: WcaoTheme.outline),
          backgroundColor: Colors.white,
          color: WcaoTheme.base,
          padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 12),
          borderRadius: BorderRadius.circular(24),
        ),
      ),
    );
  }

  Wrap tabbarView1() {
    return Wrap(
      runSpacing: 12,
      spacing: 12,
      alignment: WrapAlignment.spaceBetween,
      children: List.generate(
        12,
        (index) => Tag(
          "${mock.cword(min: 2)}座",
          border: Border.all(width: .5, color: WcaoTheme.outline),
          backgroundColor: Colors.white,
          color: WcaoTheme.base,
          padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 12),
          borderRadius: BorderRadius.circular(24),
        ),
      ),
    );
  }
}


================================================
FILE: lib/pages/home/mine/fans/index.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/home/community/page_view/like/mock.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:dart_mock/dart_mock.dart' as mock;

class MineFans extends StatefulWidget {
  const MineFans({Key? key}) : super(key: key);

  @override
  State<MineFans> createState() => _MineFansState();
}

class _MineFansState extends State<MineFans> {
  List<MockLike> lists = [];

  @override
  void initState() {
    super.initState();

    setState(() {
      lists = MockLike.get();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('粉丝'),
      ),
      body: SafeArea(
        child: ListView(
          children: lists.map((e) => listCard(e)).toList(),
        ),
      ),
    );
  }
}

Container listCard(MockLike item) {
  bool fav = mock.boolean();

  return Container(
    padding: const EdgeInsets.symmetric(horizontal: 12),
    margin: const EdgeInsets.only(top: 24),
    child: Row(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        CircleAvatar(
          radius: 28,
          backgroundImage: NetworkImage(item.avatar),
        ),
        Expanded(
          child: Container(
            padding: const EdgeInsets.only(left: 12),
            height: 56,
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Text(
                      item.nickName,
                      style: TextStyle(
                        fontSize: WcaoTheme.fsXl,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    Container(
                      margin: const EdgeInsets.only(top: 4),
                      child: Text(
                        '${mock.integer(min: 1, max: 99)}天 | ${mock.integer(min: 1, max: 99)}动态',
                        style: TextStyle(
                          color: WcaoTheme.secondary,
                          fontSize: WcaoTheme.fsBase,
                        ),
                      ),
                    ),
                  ],
                ),
                InkWell(
                  child: Container(
                    decoration: BoxDecoration(
                      color: fav ? WcaoTheme.placeholder : WcaoTheme.primary,
                      borderRadius: BorderRadius.circular(20),
                    ),
                    padding:
                        const EdgeInsets.symmetric(horizontal: 12, vertical: 4),
                    child: Text(
                      fav ? '已关注' : '关注',
                      style: TextStyle(
                          fontSize: WcaoTheme.fsSm, color: Colors.white),
                    ),
                  ),
                )
              ],
            ),
          ),
        ),
      ],
    ),
  );
}


================================================
FILE: lib/pages/home/mine/firends/index.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/home/community/page_view/like/mock.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:dart_mock/dart_mock.dart' as mock;

class MineFirends extends StatefulWidget {
  const MineFirends({Key? key}) : super(key: key);

  @override
  State<MineFirends> createState() => _MineFirendsState();
}

class _MineFirendsState extends State<MineFirends> {
  List<MockLike> lists = [];

  @override
  void initState() {
    super.initState();

    setState(() {
      lists = MockLike.get();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('好友'),
      ),
      body: SafeArea(
        child: ListView(
          children: lists.map((e) => listCard(e)).toList(),
        ),
      ),
    );
  }
}

Container listCard(MockLike item) {
  return Container(
    padding: const EdgeInsets.symmetric(horizontal: 12),
    margin: const EdgeInsets.only(top: 24),
    child: Row(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        CircleAvatar(
          radius: 28,
          backgroundImage: NetworkImage(item.avatar),
        ),
        Expanded(
          child: Container(
            padding: const EdgeInsets.only(left: 12),
            height: 56,
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Text(
                      item.nickName,
                      style: TextStyle(
                        fontSize: WcaoTheme.fsXl,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    Container(
                      margin: const EdgeInsets.only(top: 4),
                      child: Text(
                        '${mock.integer(min: 1, max: 99)}天 | ${mock.integer(min: 1, max: 99)}动态',
                        style: TextStyle(
                          color: WcaoTheme.secondary,
                          fontSize: WcaoTheme.fsBase,
                        ),
                      ),
                    ),
                  ],
                ),
                InkWell(
                  child: Container(
                    decoration: BoxDecoration(
                      color: WcaoTheme.placeholder,
                      borderRadius: BorderRadius.circular(20),
                    ),
                    padding:
                        const EdgeInsets.symmetric(horizontal: 12, vertical: 4),
                    child: Text(
                      '已关注',
                      style: TextStyle(
                          fontSize: WcaoTheme.fsSm, color: Colors.white),
                    ),
                  ),
                )
              ],
            ),
          ),
        ),
      ],
    ),
  );
}


================================================
FILE: lib/pages/home/mine/index.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/home/community/page_view/like/mock.dart';
import 'package:flutter_dating_template/pages/home/mine/mock.dart';
import 'package:flutter_dating_template/wcao/kit/index.dart';
import 'package:flutter_dating_template/wcao/ui/tag.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:get/get.dart';

class PageViewMine extends StatefulWidget {
  const PageViewMine({Key? key}) : super(key: key);

  @override
  State<PageViewMine> createState() => _PageViewMineState();
}

/// TODO: NestedScrollView 如何实现上拉加载,下拉刷新

class _PageViewMineState extends State<PageViewMine> {
  MockMine mine = MockMine.get();
  List<MockLike> items = [];

  @override
  void initState() {
    super.initState();
    MockLike.clear();

    setState(() {
      items = MockLike.get(num: 4);
    });
  }

  @override
  Widget build(BuildContext context) {
    return NestedScrollView(
      headerSliverBuilder: ((context, innerBoxIsScrolled) {
        return [
          SliverAppBar(
            automaticallyImplyLeading: false,
            pinned: true,
            expandedHeight: 376,
            actions: [
              IconButton(
                icon: Icon(
                  Icons.settings_outlined,
                  size: WcaoTheme.fsBase * 1.6,
                  color: WcaoTheme.base,
                ),
                onPressed: () {
                  Get.toNamed('/settings');
                },
              )
            ],
            flexibleSpace: LayoutBuilder(
              builder: (context, constraints) {
                double top = constraints.biggest.height;
                bool isOpacity =
                    top == MediaQuery.of(context).padding.top + kToolbarHeight;
                return FlexibleSpaceBar(
                  centerTitle: true,
                  title: AnimatedOpacity(
                    duration: const Duration(microseconds: 300),
                    opacity: isOpacity ? 1 : 0,
                    child: Text(
                      mine.nickName,
                      style: TextStyle(
                        color: WcaoTheme.base,
                        fontSize: WcaoTheme.fsXl,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                  ),
                  background: Stack(
                    children: [
                      SizedBox(
                        width: double.infinity,
                        child: WcaoUtils.imageCache(
                          mine.bg,
                          fit: BoxFit.cover,
                        ),
                      ),
                      Positioned(
                        child: Container(
                          color: Colors.black.withOpacity(.33),
                        ),
                      ),
                      Positioned(
                        bottom: 56,
                        width: MediaQuery.of(context).size.width,
                        child: profile(),
                      )
                    ],
                  ),
                );
              },
            ),
          ),

          /// 数据信息
          SliverToBoxAdapter(
            child: Container(
              padding: const EdgeInsets.all(24),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  InkWell(
                    child: adapterItem(mine.visits, '访客'),
                    onTap: () => Get.toNamed('/mine/visitors'),
                  ),
                  adapterDrive(),
                  InkWell(
                    child: adapterItem(mine.friends, '好友'),
                    onTap: () => Get.toNamed('/mine/firends'),
                  ),
                  adapterDrive(),
                  InkWell(
                    child: adapterItem(mine.fans, '粉丝'),
                    onTap: () => Get.toNamed('/mine/fans'),
                  )
                ],
              ),
            ),
          ),
        ];
      }),
      body: ListView.builder(
        physics: const ClampingScrollPhysics(), // 重要
        padding: const EdgeInsets.all(0),
        itemCount: items.length,
        itemBuilder: (context, index) {
          return dynamicItem(items[index], items.length - 1 > index);
        },
      ),
    );
  }

  /// 我的动态 item
  Container dynamicItem(MockLike item, bool bottomBorder) {
    return Container(
      padding: const EdgeInsets.only(left: 12, right: 12),
      child: Container(
        padding: const EdgeInsets.only(bottom: 24, top: 12),
        decoration: BoxDecoration(
          border: Border(
            bottom: BorderSide(
              width: .5,
              color: bottomBorder ? WcaoTheme.outline : Colors.transparent,
            ),
          ),
        ),
        child: Column(
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                Expanded(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        item.time.split('T')[0],
                        style: TextStyle(color: WcaoTheme.secondary),
                      ),
                      Container(
                        margin: const EdgeInsets.only(top: 8),
                        width: 300,
                        child: Text(
                          item.text,
                          style: TextStyle(
                            fontSize: WcaoTheme.fsL,
                            overflow: TextOverflow.ellipsis,
                          ),
                        ),
                      ),
                    ],
                  ),
                ),
                IconButton(
                  icon: const Icon(Icons.more_horiz),
                  iconSize: WcaoTheme.fsBase * 2.5,
                  onPressed: () {},
                ),
              ],
            ),
            item.media.isNotEmpty
                ? Container(
                    margin: const EdgeInsets.only(top: 12),
                    width: double.infinity,
                    child: ClipRRect(
                      borderRadius: BorderRadius.circular(8),
                      child: WcaoUtils.imageCache(
                        item.media[0],
                        fit: BoxFit.fitWidth,
                      ),
                    ),
                  )
                : Container(),
            Container(
              alignment: Alignment.topLeft,
              margin: EdgeInsets.only(top: item.media.isNotEmpty ? 24 : 12),
              child: Wrap(
                spacing: 12,
                runSpacing: 6,
                children: List.generate(
                  item.tag.length,
                  (index) => Tag(
                    item.tag[index],
                    color: WcaoTheme.primary,
                    borderRadius: BorderRadius.circular(24),
                  ),
                ).toList(),
              ),
            )
          ],
        ),
      ),
    );
  }

  Column adapterItem(int num, String text) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        Text(
          "$num",
          style: TextStyle(
            fontSize: WcaoTheme.fsXl,
            fontWeight: FontWeight.bold,
          ),
        ),
        Text(
          text,
          style: TextStyle(
            color: WcaoTheme.secondary,
          ),
        )
      ],
    );
  }

  Container adapterDrive() {
    return Container(
      margin: const EdgeInsets.symmetric(horizontal: 48),
      height: 12,
      width: .5,
      color: WcaoTheme.placeholder,
    );
  }

  /// 个人信息
  Widget profile() {
    return Center(
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          CircleAvatar(
            radius: 48,
            backgroundImage: NetworkImage(
              mine.avatar,
            ),
          ),
          Container(
            margin: const EdgeInsets.only(top: 12),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text(
                  mine.nickName,
                  style: TextStyle(
                    color: Colors.white,
                    fontSize: WcaoTheme.fsXl,
                    fontWeight: FontWeight.bold,
                  ),
                ),
                Icon(
                  Icons.edit_note,
                  color: Colors.white,
                  size: WcaoTheme.fsBase * 2,
                ),
              ],
            ),
          ),
          Container(
            margin: const EdgeInsets.only(top: 12),
            child: Text(
              '${mine.createDay}天 ${mine.tags.length}动态',
              style: TextStyle(
                color: WcaoTheme.placeholder,
              ),
            ),
          ),
          Container(
            margin: const EdgeInsets.only(top: 6),
            child: Wrap(
              alignment: WrapAlignment.center,
              spacing: 12,
              runSpacing: 6,
              children: List.generate(
                mine.tags.length,
                (index) {
                  if (index >= mine.tags.length - 1) {
                    // 添加标签
                    return InkWell(
                      onTap: () => Get.toNamed('/mine/add-tag'),
                      child: Tag(
                        '+',
                        padding: const EdgeInsets.symmetric(
                            horizontal: 24, vertical: 4),
                        backgroundColor: Colors.black.withOpacity(.4),
                        color: Colors.white,
                        borderRadius: BorderRadius.circular(24),
                        fontSize: WcaoTheme.fsBase,
                        fontWeight: FontWeight.bold,
                      ),
                    );
                  } else {
                    return Tag(
                      mine.tags[index],
                      padding: const EdgeInsets.symmetric(
                          horizontal: 12, vertical: 4),
                      backgroundColor: Colors.black.withOpacity(.4),
                      color: Colors.white,
                      borderRadius: BorderRadius.circular(24),
                      fontSize: WcaoTheme.fsBase,
                      fontWeight: FontWeight.bold,
                    );
                  }
                },
              ).toList(),
            ),
          ),
        ],
      ),
    );
  }
}


================================================
FILE: lib/pages/home/mine/mock.dart
================================================
import 'package:dart_mock/dart_mock.dart' as mock;
import 'package:flutter_dating_template/wcao/kit/index.dart';

class MockMine {
  final String nickName;
  final String avatar;
  final int createDay;
  final List<String> tags;
  final String bg;
  final int visits;
  final int friends;
  final int fans;

  MockMine(
      {required this.nickName,
      required this.avatar,
      required this.createDay,
      required this.tags,
      required this.bg,
      required this.visits,
      required this.friends,
      required this.fans});

  static MockMine get() {
    return MockMine(
      nickName: mock.cname(),
      avatar: WcaoUtils.getRandomImage(),
      createDay: mock.integer(min: 1, max: 99),
      tags: List.generate(mock.integer(min: 1, max: 4),
          (index) => '#${mock.ctitle(min: 3, max: 10)}'),
      bg: WcaoUtils.getRandomImage(),
      visits: mock.integer(min: 1, max: 99),
      friends: mock.integer(min: 1, max: 99),
      fans: mock.integer(min: 1, max: 99),
    );
  }
}


================================================
FILE: lib/pages/home/mine/visitors/index.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/home/community/page_view/like/mock.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:dart_mock/dart_mock.dart' as mock;

class MineVisitors extends StatefulWidget {
  const MineVisitors({Key? key}) : super(key: key);

  @override
  State<MineVisitors> createState() => _MineVisitorsState();
}

class _MineVisitorsState extends State<MineVisitors> {
  List<MockLike> lists = [];

  @override
  void initState() {
    super.initState();

    setState(() {
      lists = MockLike.get();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('访客'),
      ),
      body: SafeArea(
        child: ListView(
          children: lists.map((e) => listCard(e)).toList(),
        ),
      ),
    );
  }
}

Container listCard(MockLike item) {
  return Container(
    padding: const EdgeInsets.symmetric(horizontal: 12),
    margin: const EdgeInsets.only(top: 24),
    child: Row(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        CircleAvatar(
          radius: 28,
          backgroundImage: NetworkImage(item.avatar),
        ),
        Expanded(
          child: Container(
            padding: const EdgeInsets.only(left: 12),
            height: 56,
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Text(
                      item.nickName,
                      style: TextStyle(
                        fontSize: WcaoTheme.fsXl,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    Container(
                      margin: const EdgeInsets.only(top: 4),
                      child: Text(
                        '${mock.integer(min: 1, max: 99)}天 | ${mock.integer(min: 1, max: 99)}动态',
                        style: TextStyle(
                          color: WcaoTheme.secondary,
                          fontSize: WcaoTheme.fsBase,
                        ),
                      ),
                    ),
                  ],
                ),
                Text(
                  '${mock.integer(min: 1, max: 59)}分钟前',
                  style: TextStyle(
                    color: WcaoTheme.secondary,
                    fontSize: WcaoTheme.fsBase,
                  ),
                )
              ],
            ),
          ),
        ),
      ],
    ),
  );
}


================================================
FILE: lib/pages/home/publish/index.dart
================================================
import 'package:dotted_border/dotted_border.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/wcao/kit/index.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';

class Publish extends StatefulWidget {
  const Publish({Key? key}) : super(key: key);

  @override
  State<Publish> createState() => _PublishState();
}

class _PublishState extends State<Publish> {
  bool addImage = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('发布动态'),
        actions: [
          TextButton(
            onPressed: () {},
            child: const Text('发布'),
          ),
        ],
      ),
      body: SafeArea(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: [
            Expanded(
              child: Container(
                padding: const EdgeInsets.symmetric(horizontal: 12),
                child: const TextField(
                  decoration: InputDecoration(
                    hintText: '说出你的故事',
                    border: InputBorder.none,
                  ),
                  maxLines: null,
                ),
              ),
            ),

            // 底部内容
            Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                // 添加图片
                Visibility(
                  visible: addImage,
                  child: Container(
                    height: 68,
                    margin: const EdgeInsets.only(bottom: 24),
                    child: ListView(
                      padding: const EdgeInsets.symmetric(horizontal: 12),
                      scrollDirection: Axis.horizontal,
                      children: [
                        DottedBorder(
                          color: WcaoTheme.placeholder,
                          strokeWidth: 1,
                          padding: EdgeInsets.zero,
                          dashPattern: const [4, 8],
                          child: SizedBox(
                            width: 68,
                            height: 68,
                            child: Icon(
                              Icons.add,
                              color: WcaoTheme.secondary,
                            ),
                          ),
                        ),
                        selectedImage('https://wcao.cc/r/a/avatar?1'),
                        selectedImage('https://wcao.cc/r/a/avatar?2'),
                        selectedImage('https://wcao.cc/r/a/avatar?3'),
                        selectedImage('https://wcao.cc/r/a/avatar?4'),
                        selectedImage('https://wcao.cc/r/a/avatar?5'),
                      ],
                    ),
                  ),
                ),
                // 添加话题
                Container(
                  padding: const EdgeInsets.symmetric(horizontal: 12),
                  child: Row(
                    children: [
                      Container(
                        padding: const EdgeInsets.symmetric(
                            horizontal: 12, vertical: 2),
                        decoration: BoxDecoration(
                          color: WcaoTheme.placeholder.withOpacity(.25),
                          borderRadius: BorderRadius.circular(12),
                        ),
                        child: Text(
                          '#话题',
                          style: TextStyle(color: WcaoTheme.secondary),
                        ),
                      ),
                    ],
                  ),
                ),
              ],
            ),

            Container(
              margin: const EdgeInsets.only(left: 12, right: 12, top: 12),
              decoration: BoxDecoration(
                border: Border(
                  top: BorderSide(
                      width: .5, color: WcaoTheme.placeholder.withOpacity(.5)),
                ),
              ),
              child: Row(
                children: [
                  IconButton(
                    onPressed: () {
                      setState(() {
                        addImage = true;
                      });
                    },
                    icon: Icon(
                      Icons.image_outlined,
                      color: WcaoTheme.secondary,
                    ),
                  ),
                  IconButton(
                    onPressed: () {},
                    icon: Icon(
                      Icons.location_on_outlined,
                      color: WcaoTheme.secondary,
                    ),
                  ),
                ],
              ),
            )
          ],
        ),
      ),
    );
  }

  Container selectedImage(String src) {
    return Container(
      margin: const EdgeInsets.only(left: 12),
      child: Stack(
        children: [
          SizedBox(
            width: 68,
            height: 68,
            child: ClipRRect(
              borderRadius: BorderRadius.circular(8),
              child: WcaoUtils.imageCache(src, fit: BoxFit.cover),
            ),
          ),
          Positioned(
            bottom: 0,
            child: Container(
              width: 68,
              height: 24,
              decoration: BoxDecoration(
                borderRadius: const BorderRadius.only(
                    bottomLeft: Radius.circular(8),
                    bottomRight: Radius.circular(8)),
                color: WcaoTheme.base.withOpacity(.5),
              ),
              alignment: Alignment.center,
              child: const Text(
                '删除',
                style: TextStyle(color: Colors.white),
              ),
            ),
          )
        ],
      ),
    );
  }
}


================================================
FILE: lib/pages/login/password.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/login/widgets/head.dart';
import 'package:flutter_dating_template/state/token.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';

import 'package:get/get.dart';

// HACK: 密码登录

class LoginPassword extends StatefulWidget {
  const LoginPassword({Key? key}) : super(key: key);

  @override
  State<LoginPassword> createState() => _LoginState();
}

class _LoginState extends State<LoginPassword> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: InkWell(
          onTap: () {
            FocusManager.instance.primaryFocus?.unfocus();
          },
          child: Container(
            alignment: Alignment.centerLeft,
            padding: const EdgeInsets.symmetric(horizontal: 26),
            margin: const EdgeInsets.only(bottom: 56),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                const Head(),
                buildPassWord(),
                loginButton(),
                Container(
                  margin: const EdgeInsets.only(top: 16),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    crossAxisAlignment: CrossAxisAlignment.center,
                    children: [
                      Opacity(
                        opacity: 0,
                        child: Text(
                          "忘记密码?",
                          style: TextStyle(
                            color: WcaoTheme.placeholder,
                            fontSize: 12,
                          ),
                        ),
                      ),
                      InkWell(
                        onTap: () {
                          Navigator.pushReplacementNamed(
                              context, '/login/verify-code');
                        },
                        child: Container(
                          alignment: Alignment.center,
                          child: Text(
                            "免密登录",
                            style: TextStyle(
                              color: WcaoTheme.primaryFocus,
                              fontWeight: FontWeight.w500,
                            ),
                          ),
                        ),
                      ),
                      InkWell(
                        onTap: () {
                          Get.toNamed('/verify-code/reset_password');
                        },
                        child: Text(
                          "忘记密码?",
                          style: TextStyle(
                            color: WcaoTheme.secondary,
                            fontSize: 12,
                          ),
                        ),
                      )
                    ],
                  ),
                ),
                Container(
                  margin: const EdgeInsets.only(top: 16),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Text(
                        "登录即同意",
                        style: TextStyle(color: WcaoTheme.placeholder),
                      ),
                      InkWell(child: const Text('《用户协议》'), onTap: () {}),
                      Text(
                        "及",
                        style: TextStyle(color: WcaoTheme.placeholder),
                      ),
                      InkWell(child: const Text('《隐私政策》'), onTap: () {}),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }

  /// 密码登录
  Column buildPassWord() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
          margin: const EdgeInsets.only(top: 12),
          child: Wrap(
            children: [
              Text(
                '密码',
                style: TextStyle(
                  fontSize: 14,
                  color: WcaoTheme.placeholder,
                  fontWeight: FontWeight.w500,
                ),
              ),
            ],
          ),
        ),
        Container(
          margin: const EdgeInsets.only(top: 12),
          height: 50,
          child: TextField(
            keyboardType: TextInputType.visiblePassword,
            obscureText: true,
            enableSuggestions: false,
            autocorrect: false,
            decoration: InputDecoration(
              hintText: "请输入密码",
              contentPadding:
                  const EdgeInsets.symmetric(vertical: 0, horizontal: 16),
              enabledBorder: OutlineInputBorder(
                borderRadius: BorderRadius.circular(8),
                borderSide: BorderSide(
                  color: WcaoTheme.outline,
                  width: 2,
                ),
              ),
              focusedBorder: OutlineInputBorder(
                borderRadius: BorderRadius.circular(8),
                borderSide: BorderSide(
                  color: WcaoTheme.primaryFocus,
                  width: 2,
                ),
              ),
            ),
          ),
        ),
      ],
    );
  }

  /// 登录按钮
  InkWell loginButton() {
    return InkWell(
      onTap: () {
        TokenController.to.set();
        Get.offAllNamed('/home');
      },
      child: Container(
        margin: const EdgeInsets.only(top: 36),
        alignment: Alignment.center,
        width: double.infinity,
        height: 44,
        decoration: BoxDecoration(
          color: WcaoTheme.primary,
          borderRadius: WcaoTheme.radius,
        ),
        child: const Text(
          '登录',
          style: TextStyle(
              fontSize: 18, fontWeight: FontWeight.w500, color: Colors.white),
        ),
      ),
    );
  }
}


================================================
FILE: lib/pages/login/verify_code.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/pages/login/widgets/head.dart';
import 'package:flutter_dating_template/state/token.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:get/get.dart';

/// HACK: 验证码登录

class LoginVerifyCode extends StatefulWidget {
  const LoginVerifyCode({Key? key}) : super(key: key);

  @override
  State<LoginVerifyCode> createState() => _LoginState();
}

class _LoginState extends State<LoginVerifyCode> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: InkWell(
          onTap: () {
            FocusManager.instance.primaryFocus?.unfocus();
          },
          child: Container(
            alignment: Alignment.centerLeft,
            padding: const EdgeInsets.symmetric(horizontal: 26),
            margin: const EdgeInsets.only(bottom: 56),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                const Head(),
                buildVerifyCode(),
                loginButton(),
                InkWell(
                  onTap: () {
                    Navigator.pushReplacementNamed(context, '/login/password');
                  },
                  child: Container(
                    margin: const EdgeInsets.only(top: 16),
                    alignment: Alignment.center,
                    child: Text(
                      "密码登录",
                      style: TextStyle(
                        color: WcaoTheme.primaryFocus,
                        fontWeight: FontWeight.w500,
                      ),
                    ),
                  ),
                ),
                Container(
                  margin: const EdgeInsets.only(top: 16),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Text(
                        "登录即同意",
                        style: TextStyle(color: WcaoTheme.placeholder),
                      ),
                      InkWell(
                        child: const Text('《用户协议》'),
                        onTap: () =>
                            Navigator.pushNamed(context, "/agreement/user"),
                      ),
                      Text(
                        "及",
                        style: TextStyle(color: WcaoTheme.placeholder),
                      ),
                      InkWell(
                        child: const Text('《隐私政策》'),
                        onTap: () =>
                            Navigator.pushNamed(context, "/agreement/privacy"),
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }

  /// 密码登录
  Column buildPassWord() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
          margin: const EdgeInsets.only(top: 12),
          child: Wrap(
            children: [
              Text(
                '密码',
                style: TextStyle(
                  fontSize: 14,
                  color: WcaoTheme.placeholder,
                  fontWeight: FontWeight.w500,
                ),
              ),
            ],
          ),
        ),
        Container(
          margin: const EdgeInsets.only(top: 12),
          height: 50,
          child: TextField(
            decoration: InputDecoration(
              contentPadding:
                  const EdgeInsets.symmetric(vertical: 0, horizontal: 16),
              enabledBorder: OutlineInputBorder(
                borderRadius: BorderRadius.circular(8),
                borderSide: BorderSide(
                  color: WcaoTheme.outline,
                  width: 2,
                ),
              ),
              focusedBorder: OutlineInputBorder(
                borderRadius: BorderRadius.circular(8),
                borderSide: BorderSide(
                  color: WcaoTheme.primaryFocus,
                  width: 2,
                ),
              ),
            ),
          ),
        ),
      ],
    );
  }

  /// 登录按钮
  InkWell loginButton() {
    return InkWell(
      onTap: () {
        // HACK: 验证码登录
        TokenController.to.set();
        Get.offAllNamed('/home');
      },
      child: Container(
        margin: const EdgeInsets.only(top: 36),
        alignment: Alignment.center,
        width: double.infinity,
        height: 44,
        decoration: BoxDecoration(
          color: WcaoTheme.primary,
          borderRadius: WcaoTheme.radius,
        ),
        child: const Text(
          '登录',
          style: TextStyle(
              fontSize: 18, fontWeight: FontWeight.w500, color: Colors.white),
        ),
      ),
    );
  }

  /// 验证码
  Column buildVerifyCode() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
          margin: const EdgeInsets.only(top: 12),
          child: Wrap(
            children: [
              Text(
                '验证码',
                style: TextStyle(
                  fontSize: 14,
                  color: WcaoTheme.placeholder,
                  fontWeight: FontWeight.w500,
                ),
              ),
            ],
          ),
        ),
        Stack(
          children: [
            Container(
              margin: const EdgeInsets.only(top: 12),
              height: 50,
              child: TextField(
                keyboardType: TextInputType.number,
                maxLines: 1,
                maxLength: 6,
                decoration: InputDecoration(
                  counterText: "",
                  hintText: "请输入验证码",
                  contentPadding:
                      const EdgeInsets.symmetric(vertical: 0, horizontal: 16),
                  enabledBorder: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(8),
                    borderSide: BorderSide(
                      color: WcaoTheme.outline,
                      width: 2,
                    ),
                  ),
                  focusedBorder: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(8),
                    borderSide: BorderSide(
                      color: WcaoTheme.primaryFocus,
                      width: 2,
                    ),
                  ),
                ),
              ),
            ),
            Positioned(
              right: 0,
              bottom: 0,
              child: InkWell(
                onTap: () {},
                child: Container(
                  padding: const EdgeInsets.only(right: 16),
                  alignment: Alignment.center,
                  height: 50,
                  child: Text(
                    "获取验证码",
                    style: TextStyle(
                      fontSize: 14,
                      color: WcaoTheme.primary,
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
              ),
            )
          ],
        ),
      ],
    );
  }
}


================================================
FILE: lib/pages/login/widgets/head.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';

class Head extends StatefulWidget {
  const Head({Key? key}) : super(key: key);

  @override
  State<Head> createState() => _HeadState();
}

class _HeadState extends State<Head> {
  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text(
          '登录/注册',
          style: TextStyle(
            fontSize: 30,
            fontWeight: FontWeight.w500,
            color: WcaoTheme.base,
          ),
        ),
        Container(
          margin: const EdgeInsets.only(top: 36),
          child: Wrap(
            children: [
              Text(
                '手机号码',
                style: TextStyle(
                  fontSize: 14,
                  color: WcaoTheme.placeholder,
                  fontWeight: FontWeight.w500,
                ),
              ),
            ],
          ),
        ),
        Container(
          margin: const EdgeInsets.only(top: 12),
          height: 50,
          child: TextField(
            keyboardType: TextInputType.phone,
            maxLength: 11,
            decoration: InputDecoration(
              counterText: "",
              hintText: "请输入手机号码",
              contentPadding:
                  const EdgeInsets.symmetric(vertical: 0, horizontal: 16),
              enabledBorder: OutlineInputBorder(
                borderRadius: BorderRadius.circular(8),
                borderSide: BorderSide(
                  color: WcaoTheme.outline,
                  width: 2,
                ),
              ),
              focusedBorder: OutlineInputBorder(
                borderRadius: BorderRadius.circular(8),
                borderSide: BorderSide(
                  color: WcaoTheme.primaryFocus,
                  width: 2,
                ),
              ),
            ),
          ),
        ),
      ],
    );
  }
}


================================================
FILE: lib/pages/settings/about/index.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_dating_template/wcao/ui/theme.dart';
import 'package:get/get.dart';

class SettingsAbout extends StatefulWidget {
  const SettingsAbout({Key? key}) : super(key: key);

  @override
  State<SettingsAbout> createState() => _SettingsAboutState();
}

class _SettingsAboutState extends State<SettingsAbout> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('关于我们'),
      ),
      body: SafeArea(
        child: Container(
          padding: const EdgeInsets.only(top: 80, bottom: 40),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Column(
                children: [
                  Container(
                    width: 64,
                    height: 64,
                    decoration: BoxDecoration(
                      color: WcaoTheme.primary,
                      borderRadius: BorderRadius.circular(8),
                    ),
                    child: Icon(
                      Icons.baby_changing_station,
                      color: C
Download .txt
gitextract__ab5wex3/

├── .fvm/
│   └── fvm_config.json
├── .gitignore
├── .metadata
├── .vscode/
│   └── settings.json
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android/
│   ├── .gitignore
│   ├── app/
│   │   ├── build.gradle
│   │   └── src/
│   │       ├── debug/
│   │       │   └── AndroidManifest.xml
│   │       ├── main/
│   │       │   ├── AndroidManifest.xml
│   │       │   ├── kotlin/
│   │       │   │   └── com/
│   │       │   │       └── example/
│   │       │   │           └── flutter_dating_template/
│   │       │   │               └── MainActivity.kt
│   │       │   └── res/
│   │       │       ├── drawable/
│   │       │       │   └── launch_background.xml
│   │       │       ├── drawable-night/
│   │       │       │   └── launch_background.xml
│   │       │       ├── drawable-night-v21/
│   │       │       │   └── launch_background.xml
│   │       │       ├── drawable-v21/
│   │       │       │   └── launch_background.xml
│   │       │       ├── values/
│   │       │       │   └── styles.xml
│   │       │       ├── values-night/
│   │       │       │   └── styles.xml
│   │       │       ├── values-night-v31/
│   │       │       │   └── styles.xml
│   │       │       └── values-v31/
│   │       │           └── styles.xml
│   │       └── profile/
│   │           └── AndroidManifest.xml
│   ├── build.gradle
│   ├── gradle/
│   │   └── wrapper/
│   │       └── gradle-wrapper.properties
│   ├── gradle.properties
│   └── settings.gradle
├── flutter_native_splash.yaml
├── ios/
│   ├── .gitignore
│   ├── Flutter/
│   │   ├── AppFrameworkInfo.plist
│   │   ├── Debug.xcconfig
│   │   └── Release.xcconfig
│   ├── Podfile
│   ├── Runner/
│   │   ├── AppDelegate.swift
│   │   ├── Assets.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   ├── BrandingImage.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Contents.json
│   │   │   ├── LaunchBackground.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── LaunchImage.imageset/
│   │   │       └── Contents.json
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── Info.plist
│   │   └── Runner-Bridging-Header.h
│   ├── 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
├── lib/
│   ├── main.dart
│   ├── pages/
│   │   ├── agreement/
│   │   │   ├── privacy.dart
│   │   │   └── user.dart
│   │   ├── history_match/
│   │   │   ├── index.dart
│   │   │   └── mock.dart
│   │   ├── home/
│   │   │   ├── community/
│   │   │   │   ├── index.dart
│   │   │   │   └── page_view/
│   │   │   │       ├── found/
│   │   │   │       │   └── index.dart
│   │   │   │       ├── like/
│   │   │   │       │   ├── index.dart
│   │   │   │       │   └── mock.dart
│   │   │   │       ├── recommend/
│   │   │   │       │   └── index.dart
│   │   │   │       └── widgets/
│   │   │   │           └── publish_card.dart
│   │   │   ├── index/
│   │   │   │   ├── index.dart
│   │   │   │   └── search_dialog.dart
│   │   │   ├── index.dart
│   │   │   ├── message/
│   │   │   │   ├── chat/
│   │   │   │   │   └── index.dart
│   │   │   │   ├── firends_dialog.dart
│   │   │   │   ├── index.dart
│   │   │   │   └── qr_scan.dart
│   │   │   ├── mine/
│   │   │   │   ├── add_tag/
│   │   │   │   │   └── index.dart
│   │   │   │   ├── fans/
│   │   │   │   │   └── index.dart
│   │   │   │   ├── firends/
│   │   │   │   │   └── index.dart
│   │   │   │   ├── index.dart
│   │   │   │   ├── mock.dart
│   │   │   │   └── visitors/
│   │   │   │       └── index.dart
│   │   │   └── publish/
│   │   │       └── index.dart
│   │   ├── login/
│   │   │   ├── password.dart
│   │   │   ├── verify_code.dart
│   │   │   └── widgets/
│   │   │       └── head.dart
│   │   ├── settings/
│   │   │   ├── about/
│   │   │   │   └── index.dart
│   │   │   ├── account/
│   │   │   │   ├── index.dart
│   │   │   │   ├── logout.dart
│   │   │   │   ├── update_phone.dart
│   │   │   │   └── update_phone2.dart
│   │   │   ├── backlist/
│   │   │   │   └── index.dart
│   │   │   ├── index.dart
│   │   │   ├── notification/
│   │   │   │   └── index.dart
│   │   │   ├── password/
│   │   │   │   ├── reset.dart
│   │   │   │   └── update.dart
│   │   │   └── privacy/
│   │   │       └── index.dart
│   │   └── verify_code/
│   │       └── index.dart
│   ├── route.dart
│   ├── state/
│   │   └── token.dart
│   └── wcao/
│       ├── kit/
│       │   └── index.dart
│       └── ui/
│           ├── bottom_drive.dart
│           ├── cell.dart
│           ├── main.dart
│           ├── tag.dart
│           └── theme.dart
├── linux/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── flutter/
│   │   ├── CMakeLists.txt
│   │   ├── generated_plugin_registrant.cc
│   │   ├── generated_plugin_registrant.h
│   │   └── generated_plugins.cmake
│   ├── main.cc
│   ├── my_application.cc
│   └── my_application.h
├── macos/
│   ├── .gitignore
│   ├── Flutter/
│   │   ├── Flutter-Debug.xcconfig
│   │   ├── Flutter-Release.xcconfig
│   │   └── GeneratedPluginRegistrant.swift
│   ├── Podfile
│   ├── Runner/
│   │   ├── AppDelegate.swift
│   │   ├── Assets.xcassets/
│   │   │   └── AppIcon.appiconset/
│   │   │       └── Contents.json
│   │   ├── Base.lproj/
│   │   │   └── MainMenu.xib
│   │   ├── Configs/
│   │   │   ├── AppInfo.xcconfig
│   │   │   ├── Debug.xcconfig
│   │   │   ├── Release.xcconfig
│   │   │   └── Warnings.xcconfig
│   │   ├── DebugProfile.entitlements
│   │   ├── Info.plist
│   │   ├── MainFlutterWindow.swift
│   │   └── Release.entitlements
│   ├── Runner.xcodeproj/
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace/
│   │   │   └── xcshareddata/
│   │   │       └── IDEWorkspaceChecks.plist
│   │   └── xcshareddata/
│   │       └── xcschemes/
│   │           └── Runner.xcscheme
│   └── Runner.xcworkspace/
│       ├── contents.xcworkspacedata
│       └── xcshareddata/
│           └── IDEWorkspaceChecks.plist
├── pubspec.yaml
├── test/
│   └── widget_test.dart
├── web/
│   ├── index.html
│   ├── manifest.json
│   └── splash/
│       ├── splash.js
│       └── style.css
└── windows/
    ├── .gitignore
    ├── CMakeLists.txt
    ├── flutter/
    │   ├── CMakeLists.txt
    │   ├── generated_plugin_registrant.cc
    │   ├── generated_plugin_registrant.h
    │   └── generated_plugins.cmake
    └── runner/
        ├── CMakeLists.txt
        ├── Runner.rc
        ├── flutter_window.cpp
        ├── flutter_window.h
        ├── main.cpp
        ├── resource.h
        ├── runner.exe.manifest
        ├── utils.cpp
        ├── utils.h
        ├── win32_window.cpp
        └── win32_window.h
Download .txt
SYMBOL INDEX (266 symbols across 59 files)

FILE: lib/main.dart
  function main (line 9) | void main()
  class MyApp (line 16) | class MyApp extends StatefulWidget {
    method createState (line 20) | State<MyApp> createState()
  class _MyAppState (line 23) | class _MyAppState extends State<MyApp> {
    method initState (line 25) | void initState()
    method initialization (line 31) | void initialization()
    method build (line 38) | Widget build(BuildContext context)

FILE: lib/pages/agreement/privacy.dart
  class AgreementPrivacy (line 4) | class AgreementPrivacy extends StatefulWidget {
    method createState (line 8) | State<AgreementPrivacy> createState()
  class _AgreementPrivacyState (line 11) | class _AgreementPrivacyState extends State<AgreementPrivacy> {
    method build (line 22) | Widget build(BuildContext context)

FILE: lib/pages/agreement/user.dart
  class AgreementUser (line 4) | class AgreementUser extends StatefulWidget {
    method createState (line 8) | State<AgreementUser> createState()
  class _AgreementUserState (line 11) | class _AgreementUserState extends State<AgreementUser> {
    method build (line 22) | Widget build(BuildContext context)

FILE: lib/pages/history_match/index.dart
  class HistoryMatch (line 8) | class HistoryMatch extends StatefulWidget {
    method createState (line 12) | State<HistoryMatch> createState()
  class _HistoryMatchState (line 15) | class _HistoryMatchState extends State<HistoryMatch> {
    method _onRefresh (line 20) | void _onRefresh()
    method _onLoading (line 32) | void _onLoading()
    method initState (line 49) | void initState()
    method build (line 58) | Widget build(BuildContext context)

FILE: lib/pages/history_match/mock.dart
  class MockHistoryMatch (line 4) | class MockHistoryMatch {
    method get (line 23) | List<MockHistoryMatch> get()
    method clean (line 50) | clean()

FILE: lib/pages/home/community/index.dart
  class PageViewCommunity (line 10) | class PageViewCommunity extends StatefulWidget {
    method createState (line 14) | State<PageViewCommunity> createState()
  class _PageViewCommunityState (line 17) | class _PageViewCommunityState extends State<PageViewCommunity>
    method initState (line 31) | void initState()
    method build (line 39) | Widget build(BuildContext context)
    method setAppbar (line 63) | AppBar setAppbar()

FILE: lib/pages/home/community/page_view/found/index.dart
  class PageViewFound (line 8) | class PageViewFound extends StatefulWidget {
    method createState (line 12) | State<PageViewFound> createState()
  class _PageViewFoundState (line 15) | class _PageViewFoundState extends State<PageViewFound> {
    method initState (line 19) | void initState()
    method _onRefresh (line 32) | void _onRefresh()
    method _onLoading (line 43) | void _onLoading()
    method build (line 58) | Widget build(BuildContext context)

FILE: lib/pages/home/community/page_view/like/index.dart
  class PageViewLike (line 8) | class PageViewLike extends StatefulWidget {
    method createState (line 12) | State<PageViewLike> createState()
  class _PageViewLikeState (line 15) | class _PageViewLikeState extends State<PageViewLike> {
    method _onRefresh (line 21) | void _onRefresh()
    method _onLoading (line 30) | void _onLoading()
    method initState (line 43) | void initState()
    method build (line 52) | Widget build(BuildContext context)

FILE: lib/pages/home/community/page_view/like/mock.dart
  class MockLike (line 5) | class MockLike extends MockHistoryMatch {
    method get (line 53) | List<MockLike> get({int num = 12})
    method clear (line 96) | clear()

FILE: lib/pages/home/community/page_view/recommend/index.dart
  class PageViewRecommend (line 10) | class PageViewRecommend extends StatefulWidget {
    method createState (line 14) | State<PageViewRecommend> createState()
  class _PageViewRecommendState (line 17) | class _PageViewRecommendState extends State<PageViewRecommend> {
    method initState (line 38) | void initState()
    method build (line 47) | Widget build(BuildContext context)
    method label (line 99) | Container label(BuildContext context)
    method topic (line 122) | Container topic()
    method search (line 164) | Padding search()

FILE: lib/pages/home/community/page_view/widgets/publish_card.dart
  class PublishCard (line 7) | class PublishCard extends StatelessWidget {
    method build (line 13) | Widget build(BuildContext context)
    method buildMedia (line 122) | Widget buildMedia(bool type, List<String> media)
    method iconText (line 167) | Row iconText(IconData icondata, String text)

FILE: lib/pages/home/index.dart
  class Home (line 12) | class Home extends StatefulWidget {
    method createState (line 16) | State<Home> createState()
  class _HomeState (line 19) | class _HomeState extends State<Home> {
    method dispose (line 24) | void dispose()
    method initState (line 30) | void initState()
    method build (line 41) | Widget build(BuildContext context)
    method barItem (line 85) | IconButton barItem(

FILE: lib/pages/home/index/index.dart
  class PageViewIndex (line 10) | class PageViewIndex extends StatefulWidget {
    method createState (line 14) | State<PageViewIndex> createState()
  class _PageViewIndexState (line 17) | class _PageViewIndexState extends State<PageViewIndex> {
    method build (line 26) | Widget build(BuildContext context)
    method appBarTitle (line 206) | Widget appBarTitle()
    method tag (line 235) | Container tag(String str)
    method avatar (line 252) | Widget avatar(String url)

FILE: lib/pages/home/index/search_dialog.dart
  class SearchDialog (line 5) | class SearchDialog extends StatefulWidget {
    method createState (line 9) | State<SearchDialog> createState()
  class _SearchDialogState (line 12) | class _SearchDialogState extends State<SearchDialog> {
    method build (line 32) | Widget build(BuildContext context)
    method body (line 51) | Widget body()
    method setConstellation (line 80) | Column setConstellation()
    method setEdu (line 104) | Column setEdu()
    method setSex (line 127) | Column setSex()
    method groupButtonOptions (line 150) | GroupButtonOptions groupButtonOptions()
    method setAge (line 173) | Container setAge()
    method appbarTitle (line 216) | AppBar appbarTitle(BuildContext context)

FILE: lib/pages/home/message/chat/index.dart
  class MessageChat (line 9) | class MessageChat extends StatefulWidget {
    method createState (line 13) | State<MessageChat> createState()
  class _MessageChatState (line 16) | class _MessageChatState extends State<MessageChat> {
    method build (line 18) | Widget build(BuildContext context)
    method msgItem (line 105) | Container msgItem(int index, {bool? reversed = false})

FILE: lib/pages/home/message/firends_dialog.dart
  class FirendsDialog (line 4) | class FirendsDialog extends StatefulWidget {
    method createState (line 8) | State<FirendsDialog> createState()
  class _FirendsDialogState (line 11) | class _FirendsDialogState extends State<FirendsDialog> {
    method build (line 13) | Widget build(BuildContext context)
    method shareButton (line 116) | Column shareButton(String text, IconData icon, Color color)

FILE: lib/pages/home/message/index.dart
  class PageViewMessage (line 9) | class PageViewMessage extends StatefulWidget {
    method createState (line 13) | State<PageViewMessage> createState()
  class _PageViewMessageState (line 16) | class _PageViewMessageState extends State<PageViewMessage> {
    method initState (line 21) | void initState()
    method build (line 30) | Widget build(BuildContext context)
    method listCard (line 120) | Container listCard(MockLike item)
    method search (line 202) | Container search()

FILE: lib/pages/home/message/qr_scan.dart
  class QrScan (line 4) | class QrScan extends StatefulWidget {
    method createState (line 8) | State<QrScan> createState()
  class _QrScanState (line 11) | class _QrScanState extends State<QrScan> {
    method build (line 15) | Widget build(BuildContext context)

FILE: lib/pages/home/mine/add_tag/index.dart
  class MineAddTag (line 7) | class MineAddTag extends StatefulWidget {
    method createState (line 11) | State<MineAddTag> createState()
  class _MineAddTagState (line 14) | class _MineAddTagState extends State<MineAddTag> {
    method build (line 16) | Widget build(BuildContext context)
    method tabbarView4 (line 109) | Wrap tabbarView4()
    method tabbarView3 (line 128) | Wrap tabbarView3()
    method tabbarView2 (line 147) | Wrap tabbarView2()
    method tabbarView1 (line 166) | Wrap tabbarView1()

FILE: lib/pages/home/mine/fans/index.dart
  class MineFans (line 6) | class MineFans extends StatefulWidget {
    method createState (line 10) | State<MineFans> createState()
  class _MineFansState (line 13) | class _MineFansState extends State<MineFans> {
    method initState (line 17) | void initState()
    method build (line 26) | Widget build(BuildContext context)
  function listCard (line 40) | Container listCard(MockLike item)

FILE: lib/pages/home/mine/firends/index.dart
  class MineFirends (line 6) | class MineFirends extends StatefulWidget {
    method createState (line 10) | State<MineFirends> createState()
  class _MineFirendsState (line 13) | class _MineFirendsState extends State<MineFirends> {
    method initState (line 17) | void initState()
    method build (line 26) | Widget build(BuildContext context)
  function listCard (line 40) | Container listCard(MockLike item)

FILE: lib/pages/home/mine/index.dart
  class PageViewMine (line 9) | class PageViewMine extends StatefulWidget {
    method createState (line 13) | State<PageViewMine> createState()
  class _PageViewMineState (line 18) | class _PageViewMineState extends State<PageViewMine> {
    method initState (line 23) | void initState()
    method build (line 33) | Widget build(BuildContext context)
    method dynamicItem (line 137) | Container dynamicItem(MockLike item, bool bottomBorder)
    method adapterItem (line 220) | Column adapterItem(int num, String text)
    method adapterDrive (line 241) | Container adapterDrive()
    method profile (line 251) | Widget profile()

FILE: lib/pages/home/mine/mock.dart
  class MockMine (line 4) | class MockMine {
    method get (line 24) | MockMine get()

FILE: lib/pages/home/mine/visitors/index.dart
  class MineVisitors (line 6) | class MineVisitors extends StatefulWidget {
    method createState (line 10) | State<MineVisitors> createState()
  class _MineVisitorsState (line 13) | class _MineVisitorsState extends State<MineVisitors> {
    method initState (line 17) | void initState()
    method build (line 26) | Widget build(BuildContext context)
  function listCard (line 40) | Container listCard(MockLike item)

FILE: lib/pages/home/publish/index.dart
  class Publish (line 6) | class Publish extends StatefulWidget {
    method createState (line 10) | State<Publish> createState()
  class _PublishState (line 13) | class _PublishState extends State<Publish> {
    method build (line 17) | Widget build(BuildContext context)
    method selectedImage (line 142) | Container selectedImage(String src)

FILE: lib/pages/login/password.dart
  class LoginPassword (line 10) | class LoginPassword extends StatefulWidget {
    method createState (line 14) | State<LoginPassword> createState()
  class _LoginState (line 17) | class _LoginState extends State<LoginPassword> {
    method build (line 19) | Widget build(BuildContext context)
    method buildPassWord (line 111) | Column buildPassWord()
    method loginButton (line 164) | InkWell loginButton()

FILE: lib/pages/login/verify_code.dart
  class LoginVerifyCode (line 9) | class LoginVerifyCode extends StatefulWidget {
    method createState (line 13) | State<LoginVerifyCode> createState()
  class _LoginState (line 16) | class _LoginState extends State<LoginVerifyCode> {
    method build (line 18) | Widget build(BuildContext context)
    method buildPassWord (line 87) | Column buildPassWord()
    method loginButton (line 135) | InkWell loginButton()
    method buildVerifyCode (line 161) | Column buildVerifyCode()

FILE: lib/pages/login/widgets/head.dart
  class Head (line 4) | class Head extends StatefulWidget {
    method createState (line 8) | State<Head> createState()
  class _HeadState (line 11) | class _HeadState extends State<Head> {
    method build (line 13) | Widget build(BuildContext context)

FILE: lib/pages/settings/about/index.dart
  class SettingsAbout (line 5) | class SettingsAbout extends StatefulWidget {
    method createState (line 9) | State<SettingsAbout> createState()
  class _SettingsAboutState (line 12) | class _SettingsAboutState extends State<SettingsAbout> {
    method build (line 14) | Widget build(BuildContext context)

FILE: lib/pages/settings/account/index.dart
  class SettingsAccount (line 7) | class SettingsAccount extends StatefulWidget {
    method createState (line 11) | State<SettingsAccount> createState()
  class _SettingsAccountState (line 14) | class _SettingsAccountState extends State<SettingsAccount> {
    method build (line 16) | Widget build(BuildContext context)

FILE: lib/pages/settings/account/logout.dart
  class AccountLogout (line 7) | class AccountLogout extends StatefulWidget {
    method createState (line 11) | State<AccountLogout> createState()
  class _AccountLogoutState (line 14) | class _AccountLogoutState extends State<AccountLogout> {
    method build (line 25) | Widget build(BuildContext context)

FILE: lib/pages/settings/account/update_phone.dart
  class AccountUpdatePhone (line 7) | class AccountUpdatePhone extends StatefulWidget {
    method createState (line 11) | State<AccountUpdatePhone> createState()
  class _AccountUpdatePhoneState (line 14) | class _AccountUpdatePhoneState extends State<AccountUpdatePhone> {
    method build (line 16) | Widget build(BuildContext context)

FILE: lib/pages/settings/account/update_phone2.dart
  class AccountUpdatePhone2 (line 8) | class AccountUpdatePhone2 extends StatefulWidget {
    method createState (line 12) | State<AccountUpdatePhone2> createState()
  class _AccountUpdatePhone2State (line 15) | class _AccountUpdatePhone2State extends State<AccountUpdatePhone2> {
    method build (line 17) | Widget build(BuildContext context)

FILE: lib/pages/settings/backlist/index.dart
  class SettingsBacklist (line 5) | class SettingsBacklist extends StatefulWidget {
    method createState (line 9) | State<SettingsBacklist> createState()
  class _SettingsBacklistState (line 12) | class _SettingsBacklistState extends State<SettingsBacklist> {
    method build (line 14) | Widget build(BuildContext context)

FILE: lib/pages/settings/index.dart
  class Settings (line 8) | class Settings extends StatefulWidget {
    method createState (line 12) | State<Settings> createState()
  class _SettingsState (line 15) | class _SettingsState extends State<Settings> {
    method build (line 17) | Widget build(BuildContext context)
    method bottomConfirm (line 60) | Future<dynamic> bottomConfirm(BuildContext context)

FILE: lib/pages/settings/notification/index.dart
  class SettingsNotification (line 7) | class SettingsNotification extends StatefulWidget {
    method createState (line 11) | State<SettingsNotification> createState()
  class _SettingsNotificationState (line 14) | class _SettingsNotificationState extends State<SettingsNotification> {
    method build (line 16) | Widget build(BuildContext context)

FILE: lib/pages/settings/password/reset.dart
  class PasswordReset (line 8) | class PasswordReset extends StatefulWidget {
    method createState (line 12) | State<PasswordReset> createState()
  class _NewPasswordState (line 15) | class _NewPasswordState extends State<PasswordReset> {
    method build (line 17) | Widget build(BuildContext context)

FILE: lib/pages/settings/password/update.dart
  class PasswordUpdate (line 7) | class PasswordUpdate extends StatefulWidget {
    method createState (line 11) | State<PasswordUpdate> createState()
  class _PasswordUpdateState (line 14) | class _PasswordUpdateState extends State<PasswordUpdate> {
    method build (line 16) | Widget build(BuildContext context)

FILE: lib/pages/settings/privacy/index.dart
  class SettingsPrivacy (line 6) | class SettingsPrivacy extends StatefulWidget {
    method createState (line 10) | State<SettingsPrivacy> createState()
  class _SettingsPrivacyState (line 13) | class _SettingsPrivacyState extends State<SettingsPrivacy> {
    method build (line 15) | Widget build(BuildContext context)

FILE: lib/pages/verify_code/index.dart
  class VerifyCode (line 7) | class VerifyCode extends StatefulWidget {
    method createState (line 11) | State<VerifyCode> createState()
  class _VerifyCodeState (line 14) | class _VerifyCodeState extends State<VerifyCode> {
    method initState (line 20) | void initState()
    method build (line 29) | Widget build(BuildContext context)

FILE: lib/state/token.dart
  class TokenController (line 4) | class TokenController extends GetxController {
    method set (line 10) | void set()
    method delete (line 16) | void delete()

FILE: lib/wcao/kit/index.dart
  class WcaoUtils (line 9) | class WcaoUtils {
    method toast (line 11) | toast(String msg)
    method loading (line 16) | loading({String? msg})
    method dismiss (line 21) | dismiss()
    method imageCache (line 27) | Widget imageCache(String url, {BoxFit? fit})
    method getRandomImage (line 41) | String getRandomImage()

FILE: lib/wcao/ui/bottom_drive.dart
  class BottomDrive (line 4) | class BottomDrive extends StatelessWidget {
    method build (line 8) | Widget build(BuildContext context)

FILE: lib/wcao/ui/cell.dart
  class Cell (line 4) | class Cell extends StatelessWidget {
    method build (line 26) | Widget build(BuildContext context)

FILE: lib/wcao/ui/main.dart
  class WcaoThemeTest (line 3) | class WcaoThemeTest {
    method init (line 22) | init({
  class ThemeColorType (line 33) | class ThemeColorType {
    method _darken (line 54) | Color _darken(Color color, [double amount = .1])
    method _lighten (line 64) | Color _lighten(Color color, [double amount = .1])

FILE: lib/wcao/ui/tag.dart
  class Tag (line 4) | class Tag extends StatelessWidget {
    method build (line 51) | Widget build(BuildContext context)

FILE: lib/wcao/ui/theme.dart
  class WcaoTheme (line 9) | class WcaoTheme {

FILE: linux/flutter/generated_plugin_registrant.cc
  function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {

FILE: linux/main.cc
  function main (line 3) | int main(int argc, char** argv) {

FILE: linux/my_application.cc
  type _MyApplication (line 10) | struct _MyApplication {
  function my_application_activate (line 18) | static void my_application_activate(GApplication* application) {
  function gboolean (line 66) | static gboolean my_application_local_command_line(GApplication* applicat...
  function my_application_dispose (line 85) | static void my_application_dispose(GObject* object) {
  function my_application_class_init (line 91) | static void my_application_class_init(MyApplicationClass* klass) {
  function my_application_init (line 97) | static void my_application_init(MyApplication* self) {}
  function MyApplication (line 99) | MyApplication* my_application_new() {

FILE: test/widget_test.dart
  function main (line 13) | void main()

FILE: web/splash/splash.js
  function removeSplashFromWeb (line 1) | function removeSplashFromWeb() {

FILE: windows/flutter/generated_plugin_registrant.cc
  function RegisterPlugins (line 10) | void RegisterPlugins(flutter::PluginRegistry* registry) {

FILE: windows/runner/flutter_window.cpp
  function LRESULT (line 40) | LRESULT

FILE: windows/runner/flutter_window.h
  function class (line 12) | class FlutterWindow : public Win32Window {

FILE: windows/runner/main.cpp
  function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,

FILE: windows/runner/utils.cpp
  function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
  function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
  function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {

FILE: windows/runner/win32_window.cpp
  function Scale (line 18) | int Scale(int source, double scale_factor) {
  function EnableFullDpiSupportIfAvailable (line 24) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
  class WindowClassRegistrar (line 41) | class WindowClassRegistrar {
    method WindowClassRegistrar (line 46) | static WindowClassRegistrar* GetInstance() {
    method WindowClassRegistrar (line 62) | WindowClassRegistrar() = default;
  function wchar_t (line 71) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
  function LRESULT (line 133) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
  function LRESULT (line 152) | LRESULT
  function Win32Window (line 208) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
  function RECT (line 224) | RECT Win32Window::GetClientArea() {
  function HWND (line 230) | HWND Win32Window::GetHandle() {

FILE: windows/runner/win32_window.h
  type Size (line 21) | struct Size {
Condensed preview — 150 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (389K chars).
[
  {
    "path": ".fvm/fvm_config.json",
    "chars": 52,
    "preview": "{\n  \"flutterSdkVersion\": \"2.10.5\",\n  \"flavors\": {}\n}"
  },
  {
    "path": ".gitignore",
    "chars": 732,
    "preview": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.i"
  },
  {
    "path": ".metadata",
    "chars": 305,
    "preview": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrade"
  },
  {
    "path": ".vscode/settings.json",
    "chars": 65,
    "preview": "{\n  \"dart.flutterSdkPath\": \"/Users/meetqy/fvm/versions/2.10.5\"\n}\n"
  },
  {
    "path": "LICENSE",
    "chars": 1084,
    "preview": "MIT License\r\n\r\nCopyright (c) 2022 meetqy\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "README.md",
    "chars": 3802,
    "preview": "# flutter_dating_template\n\nflutter 版本的交友 app 模板,总计页面**35**个,测试数据基于 mockjs 创建。\n\n## 快速了解\n\n🐱 迅速定位页面\n\n![](./readme/hack.png)"
  },
  {
    "path": "analysis_options.yaml",
    "chars": 1453,
    "preview": "# This file configures the analyzer, which statically analyzes Dart code to\n# check for errors, warnings, and lints.\n#\n#"
  },
  {
    "path": "android/.gitignore",
    "chars": 285,
    "preview": "gradle-wrapper.jar\n/.gradle\n/captures/\n/gradlew\n/gradlew.bat\n/local.properties\nGeneratedPluginRegistrant.java\n\n# Remembe"
  },
  {
    "path": "android/app/build.gradle",
    "chars": 1954,
    "preview": "def localProperties = new Properties()\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertie"
  },
  {
    "path": "android/app/src/debug/AndroidManifest.xml",
    "chars": 343,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.flutter_dating_template\">\n"
  },
  {
    "path": "android/app/src/main/AndroidManifest.xml",
    "chars": 1447,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"com.example.flutter_dating_template\">\n  <a"
  },
  {
    "path": "android/app/src/main/kotlin/com/example/flutter_dating_template/MainActivity.kt",
    "chars": 140,
    "preview": "package com.example.flutter_dating_template\n\nimport io.flutter.embedding.android.FlutterActivity\n\nclass MainActivity: Fl"
  },
  {
    "path": "android/app/src/main/res/drawable/launch_background.xml",
    "chars": 419,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item"
  },
  {
    "path": "android/app/src/main/res/drawable-night/launch_background.xml",
    "chars": 419,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item"
  },
  {
    "path": "android/app/src/main/res/drawable-night-v21/launch_background.xml",
    "chars": 419,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item"
  },
  {
    "path": "android/app/src/main/res/drawable-v21/launch_background.xml",
    "chars": 419,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item"
  },
  {
    "path": "android/app/src/main/res/values/styles.xml",
    "chars": 1101,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is sta"
  },
  {
    "path": "android/app/src/main/res/values-night/styles.xml",
    "chars": 1100,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is sta"
  },
  {
    "path": "android/app/src/main/res/values-night-v31/styles.xml",
    "chars": 1064,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is sta"
  },
  {
    "path": "android/app/src/main/res/values-v31/styles.xml",
    "chars": 1064,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is sta"
  },
  {
    "path": "android/app/src/profile/AndroidManifest.xml",
    "chars": 501,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"com.example.flutter_dating_template\">\n  <!"
  },
  {
    "path": "android/build.gradle",
    "chars": 592,
    "preview": "buildscript {\n    ext.kotlin_version = '1.6.10'\n    repositories {\n        google()\n        mavenCentral()\n    }\n\n    de"
  },
  {
    "path": "android/gradle/wrapper/gradle-wrapper.properties",
    "chars": 231,
    "preview": "#Fri Jun 23 08:50:38 CEST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER"
  },
  {
    "path": "android/gradle.properties",
    "chars": 82,
    "preview": "org.gradle.jvmargs=-Xmx1536M\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n"
  },
  {
    "path": "android/settings.gradle",
    "chars": 462,
    "preview": "include ':app'\n\ndef localPropertiesFile = new File(rootProject.projectDir, \"local.properties\")\ndef properties = new Prop"
  },
  {
    "path": "flutter_native_splash.yaml",
    "chars": 5184,
    "preview": "flutter_native_splash:\n\n  # This package generates native code to customize Flutter's default white native splash screen"
  },
  {
    "path": "ios/.gitignore",
    "chars": 569,
    "preview": "**/dgph\n*.mode1v3\n*.mode2v3\n*.moved-aside\n*.pbxuser\n*.perspectivev3\n**/*sync/\n.sconsign.dblite\n.tags*\n**/.vagrant/\n**/De"
  },
  {
    "path": "ios/Flutter/AppFrameworkInfo.plist",
    "chars": 773,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Flutter/Debug.xcconfig",
    "chars": 107,
    "preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Flutter/Release.xcconfig",
    "chars": 109,
    "preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Podfile",
    "chars": 1354,
    "preview": "# Uncomment this line to define a global platform for your project\n# platform :ios, '9.0'\n\n# CocoaPods analytics sends n"
  },
  {
    "path": "ios/Runner/AppDelegate.swift",
    "chars": 404,
    "preview": "import UIKit\nimport Flutter\n\n@UIApplicationMain\n@objc class AppDelegate: FlutterAppDelegate {\n  override func applicatio"
  },
  {
    "path": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 2940,
    "preview": "{\n    \"images\": [\n        {\n            \"size\": \"20x20\",\n            \"idiom\": \"iphone\",\n            \"filename\": \"icon-20"
  },
  {
    "path": "ios/Runner/Assets.xcassets/BrandingImage.imageset/Contents.json",
    "chars": 1081,
    "preview": "{\n  \"images\" : [\n    {\n      \"filename\" : \"BrandingImage.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/Contents.json",
    "chars": 63,
    "preview": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json",
    "chars": 895,
    "preview": "{\n  \"images\" : [\n    {\n      \"filename\" : \"background.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n   "
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
    "chars": 1069,
    "preview": "{\n  \"images\" : [\n    {\n      \"filename\" : \"LaunchImage.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n  "
  },
  {
    "path": "ios/Runner/Base.lproj/LaunchScreen.storyboard",
    "chars": 4394,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "ios/Runner/Base.lproj/Main.storyboard",
    "chars": 1605,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "ios/Runner/Info.plist",
    "chars": 1973,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Runner/Runner-Bridging-Header.h",
    "chars": 38,
    "preview": "#import \"GeneratedPluginRegistrant.h\"\n"
  },
  {
    "path": "ios/Runner.xcodeproj/project.pbxproj",
    "chars": 22335,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 51;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 135,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "chars": 226,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "chars": 3185,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1300\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "ios/Runner.xcworkspace/contents.xcworkspacedata",
    "chars": 224,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodepr"
  },
  {
    "path": "ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "chars": 226,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "lib/main.dart",
    "chars": 2654,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/route.dart';\nimport 'package:flutter_dat"
  },
  {
    "path": "lib/pages/agreement/privacy.dart",
    "chars": 1832,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/theme.dart';\n\nclass AgreementPri"
  },
  {
    "path": "lib/pages/agreement/user.dart",
    "chars": 1839,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/theme.dart';\n\nclass AgreementUse"
  },
  {
    "path": "lib/pages/history_match/index.dart",
    "chars": 4048,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/history_match/mock.dart';\nimport '"
  },
  {
    "path": "lib/pages/history_match/mock.dart",
    "chars": 1089,
    "preview": "import 'package:dart_mock/dart_mock.dart' as mock;\nimport 'package:flutter_dating_template/wcao/kit/index.dart';\n\nclass "
  },
  {
    "path": "lib/pages/home/community/index.dart",
    "chars": 2579,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/home/community/page_view/recommend"
  },
  {
    "path": "lib/pages/home/community/page_view/found/index.dart",
    "chars": 4594,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/home/community/page_view/like/mock"
  },
  {
    "path": "lib/pages/home/community/page_view/like/index.dart",
    "chars": 1830,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/home/community/page_view/like/mock"
  },
  {
    "path": "lib/pages/home/community/page_view/like/mock.dart",
    "chars": 2329,
    "preview": "import 'package:flutter_dating_template/pages/history_match/mock.dart';\nimport 'package:dart_mock/dart_mock.dart' as moc"
  },
  {
    "path": "lib/pages/home/community/page_view/recommend/index.dart",
    "chars": 5744,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/home/community/page_view/like/mock"
  },
  {
    "path": "lib/pages/home/community/page_view/widgets/publish_card.dart",
    "chars": 6097,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/home/community/page_view/like/mock"
  },
  {
    "path": "lib/pages/home/index/index.dart",
    "chars": 10182,
    "preview": "import 'package:card_swiper/card_swiper.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_dating_te"
  },
  {
    "path": "lib/pages/home/index/search_dialog.dart",
    "chars": 5856,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/theme.dart';\nimport 'package:gro"
  },
  {
    "path": "lib/pages/home/index.dart",
    "chars": 3112,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/home/community/index.dart';\nimport"
  },
  {
    "path": "lib/pages/home/message/chat/index.dart",
    "chars": 4447,
    "preview": "import 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:dart_mock/dart_mock.dar"
  },
  {
    "path": "lib/pages/home/message/firends_dialog.dart",
    "chars": 4589,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/theme.dart';\n\nclass FirendsDialo"
  },
  {
    "path": "lib/pages/home/message/index.dart",
    "chars": 7725,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/home/community/page_view/like/mock"
  },
  {
    "path": "lib/pages/home/message/qr_scan.dart",
    "chars": 558,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:scan/scan.dart';\n\nclass QrScan extends StatefulWidget {\n  const "
  },
  {
    "path": "lib/pages/home/mine/add_tag/index.dart",
    "chars": 5762,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/tag.dart';\nimport 'package:flutt"
  },
  {
    "path": "lib/pages/home/mine/fans/index.dart",
    "chars": 3128,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/home/community/page_view/like/mock"
  },
  {
    "path": "lib/pages/home/mine/firends/index.dart",
    "chars": 3077,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/home/community/page_view/like/mock"
  },
  {
    "path": "lib/pages/home/mine/index.dart",
    "chars": 10801,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/home/community/page_view/like/mock"
  },
  {
    "path": "lib/pages/home/mine/mock.dart",
    "chars": 1012,
    "preview": "import 'package:dart_mock/dart_mock.dart' as mock;\nimport 'package:flutter_dating_template/wcao/kit/index.dart';\n\nclass "
  },
  {
    "path": "lib/pages/home/mine/visitors/index.dart",
    "chars": 2739,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/home/community/page_view/like/mock"
  },
  {
    "path": "lib/pages/home/publish/index.dart",
    "chars": 5753,
    "preview": "import 'package:dotted_border/dotted_border.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_datin"
  },
  {
    "path": "lib/pages/login/password.dart",
    "chars": 5983,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/login/widgets/head.dart';\nimport '"
  },
  {
    "path": "lib/pages/login/verify_code.dart",
    "chars": 7225,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/pages/login/widgets/head.dart';\nimport '"
  },
  {
    "path": "lib/pages/login/widgets/head.dart",
    "chars": 1982,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/theme.dart';\n\nclass Head extends"
  },
  {
    "path": "lib/pages/settings/about/index.dart",
    "chars": 3064,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/theme.dart';\nimport 'package:get"
  },
  {
    "path": "lib/pages/settings/account/index.dart",
    "chars": 902,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/cell.dart';\nimport 'package:get/"
  },
  {
    "path": "lib/pages/settings/account/logout.dart",
    "chars": 7377,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/state/token.dart';\nimport 'package:flutt"
  },
  {
    "path": "lib/pages/settings/account/update_phone.dart",
    "chars": 3227,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/theme.dart';\nimport 'package:get"
  },
  {
    "path": "lib/pages/settings/account/update_phone2.dart",
    "chars": 3336,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/kit/index.dart';\nimport 'package:fl"
  },
  {
    "path": "lib/pages/settings/backlist/index.dart",
    "chars": 3326,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/kit/index.dart';\nimport 'package:fl"
  },
  {
    "path": "lib/pages/settings/index.dart",
    "chars": 4423,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/cell.dart';\nimport 'package:flut"
  },
  {
    "path": "lib/pages/settings/notification/index.dart",
    "chars": 1663,
    "preview": "import 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_dating_template"
  },
  {
    "path": "lib/pages/settings/password/reset.dart",
    "chars": 3475,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/kit/index.dart';\nimport 'package:fl"
  },
  {
    "path": "lib/pages/settings/password/update.dart",
    "chars": 5901,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/state/token.dart';\nimport 'package:flutt"
  },
  {
    "path": "lib/pages/settings/privacy/index.dart",
    "chars": 1333,
    "preview": "import 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_dating_template"
  },
  {
    "path": "lib/pages/verify_code/index.dart",
    "chars": 3573,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/theme.dart';\nimport 'package:get"
  },
  {
    "path": "lib/route.dart",
    "chars": 3623,
    "preview": "import 'package:flutter_dating_template/pages/agreement/privacy.dart';\nimport 'package:flutter_dating_template/pages/agr"
  },
  {
    "path": "lib/state/token.dart",
    "chars": 345,
    "preview": "import 'package:get/get.dart';\nimport 'package:dart_mock/dart_mock.dart' as mock;\n\nclass TokenController extends GetxCon"
  },
  {
    "path": "lib/wcao/kit/index.dart",
    "chars": 1142,
    "preview": "import 'package:cached_network_image/cached_network_image.dart';\nimport 'package:flutter/cupertino.dart';\nimport 'packag"
  },
  {
    "path": "lib/wcao/ui/bottom_drive.dart",
    "chars": 964,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/theme.dart';\n\nclass BottomDrive "
  },
  {
    "path": "lib/wcao/ui/cell.dart",
    "chars": 1459,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/theme.dart';\n\nclass Cell extends"
  },
  {
    "path": "lib/wcao/ui/main.dart",
    "chars": 1804,
    "preview": "import 'package:flutter/material.dart';\n\nclass WcaoThemeTest {\n  WcaoThemeTest._internal();\n\n  factory WcaoThemeTest() ="
  },
  {
    "path": "lib/wcao/ui/tag.dart",
    "chars": 1966,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_dating_template/wcao/ui/theme.dart';\n\nclass Tag extends "
  },
  {
    "path": "lib/wcao/ui/theme.dart",
    "chars": 937,
    "preview": "import 'package:flutter/material.dart';\n\n/// 主题相近的颜色如何处理?\n///\n/// ```\n/// WcaoTheme.primay.withOpacity(.5);\n/// ```\n\ncla"
  },
  {
    "path": "linux/.gitignore",
    "chars": 18,
    "preview": "flutter/ephemeral\n"
  },
  {
    "path": "linux/CMakeLists.txt",
    "chars": 4070,
    "preview": "cmake_minimum_required(VERSION 3.10)\nproject(runner LANGUAGES CXX)\n\nset(BINARY_NAME \"flutter_dating_template\")\nset(APPLI"
  },
  {
    "path": "linux/flutter/CMakeLists.txt",
    "chars": 2742,
    "preview": "cmake_minimum_required(VERSION 3.10)\n\nset(EPHEMERAL_DIR \"${CMAKE_CURRENT_SOURCE_DIR}/ephemeral\")\n\n# Configuration provid"
  },
  {
    "path": "linux/flutter/generated_plugin_registrant.cc",
    "chars": 161,
    "preview": "//\n//  Generated file. Do not edit.\n//\n\n// clang-format off\n\n#include \"generated_plugin_registrant.h\"\n\n\nvoid fl_register"
  },
  {
    "path": "linux/flutter/generated_plugin_registrant.h",
    "chars": 303,
    "preview": "//\n//  Generated file. Do not edit.\n//\n\n// clang-format off\n\n#ifndef GENERATED_PLUGIN_REGISTRANT_\n#define GENERATED_PLUG"
  },
  {
    "path": "linux/flutter/generated_plugins.cmake",
    "chars": 457,
    "preview": "#\n# Generated file, do not edit.\n#\n\nlist(APPEND FLUTTER_PLUGIN_LIST\n)\n\nset(PLUGIN_BUNDLED_LIBRARIES)\n\nforeach(plugin ${F"
  },
  {
    "path": "linux/main.cc",
    "chars": 180,
    "preview": "#include \"my_application.h\"\n\nint main(int argc, char** argv) {\n  g_autoptr(MyApplication) app = my_application_new();\n  "
  },
  {
    "path": "linux/my_application.cc",
    "chars": 3744,
    "preview": "#include \"my_application.h\"\n\n#include <flutter_linux/flutter_linux.h>\n#ifdef GDK_WINDOWING_X11\n#include <gdk/gdkx.h>\n#en"
  },
  {
    "path": "linux/my_application.h",
    "chars": 388,
    "preview": "#ifndef FLUTTER_MY_APPLICATION_H_\n#define FLUTTER_MY_APPLICATION_H_\n\n#include <gtk/gtk.h>\n\nG_DECLARE_FINAL_TYPE(MyApplic"
  },
  {
    "path": "macos/.gitignore",
    "chars": 89,
    "preview": "# Flutter-related\n**/Flutter/ephemeral/\n**/Pods/\n\n# Xcode-related\n**/dgph\n**/xcuserdata/\n"
  },
  {
    "path": "macos/Flutter/Flutter-Debug.xcconfig",
    "chars": 125,
    "preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"ephemeral/Flutter-Generated.xccon"
  },
  {
    "path": "macos/Flutter/Flutter-Release.xcconfig",
    "chars": 127,
    "preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"ephemeral/Flutter-Generated.xcc"
  },
  {
    "path": "macos/Flutter/GeneratedPluginRegistrant.swift",
    "chars": 357,
    "preview": "//\n//  Generated file. Do not edit.\n//\n\nimport FlutterMacOS\nimport Foundation\n\nimport path_provider_macos\nimport sqflite"
  },
  {
    "path": "macos/Podfile",
    "chars": 1330,
    "preview": "platform :osx, '10.11'\n\n# CocoaPods analytics sends network stats synchronously affecting flutter build latency.\nENV['CO"
  },
  {
    "path": "macos/Runner/AppDelegate.swift",
    "chars": 214,
    "preview": "import Cocoa\nimport FlutterMacOS\n\n@NSApplicationMain\nclass AppDelegate: FlutterAppDelegate {\n  override func application"
  },
  {
    "path": "macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1291,
    "preview": "{\n  \"images\" : [\n    {\n      \"size\" : \"16x16\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"app_icon_16.png\",\n      \"scale"
  },
  {
    "path": "macos/Runner/Base.lproj/MainMenu.xib",
    "chars": 23723,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion"
  },
  {
    "path": "macos/Runner/Configs/AppInfo.xcconfig",
    "chars": 630,
    "preview": "// Application-level settings for the Runner target.\n//\n// This may be replaced with something auto-generated from metad"
  },
  {
    "path": "macos/Runner/Configs/Debug.xcconfig",
    "chars": 77,
    "preview": "#include \"../../Flutter/Flutter-Debug.xcconfig\"\n#include \"Warnings.xcconfig\"\n"
  },
  {
    "path": "macos/Runner/Configs/Release.xcconfig",
    "chars": 79,
    "preview": "#include \"../../Flutter/Flutter-Release.xcconfig\"\n#include \"Warnings.xcconfig\"\n"
  },
  {
    "path": "macos/Runner/Configs/Warnings.xcconfig",
    "chars": 580,
    "preview": "WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverl"
  },
  {
    "path": "macos/Runner/DebugProfile.entitlements",
    "chars": 348,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "macos/Runner/Info.plist",
    "chars": 1060,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "macos/Runner/MainFlutterWindow.swift",
    "chars": 393,
    "preview": "import Cocoa\nimport FlutterMacOS\n\nclass MainFlutterWindow: NSWindow {\n  override func awakeFromNib() {\n    let flutterVi"
  },
  {
    "path": "macos/Runner/Release.entitlements",
    "chars": 240,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "macos/Runner.xcodeproj/project.pbxproj",
    "chars": 24905,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 51;\n\tobjects = {\n\n/* Begin PBXAggregateTarget sec"
  },
  {
    "path": "macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "chars": 3253,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1300\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "macos/Runner.xcworkspace/contents.xcworkspacedata",
    "chars": 224,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodepr"
  },
  {
    "path": "macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "pubspec.yaml",
    "chars": 3963,
    "preview": "name: flutter_dating_template\ndescription: A new Flutter project.\n\n# The following line prevents the package from being "
  },
  {
    "path": "test/widget_test.dart",
    "chars": 1068,
    "preview": "// This is a basic Flutter widget test.\n//\n// To perform an interaction with a widget in your test, use the WidgetTester"
  },
  {
    "path": "web/index.html",
    "chars": 4633,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n  <!--\n    If you are serving your web app in a path other than the root, change the\n    h"
  },
  {
    "path": "web/manifest.json",
    "chars": 942,
    "preview": "{\n    \"name\": \"flutter_dating_template\",\n    \"short_name\": \"flutter_dating_template\",\n    \"start_url\": \".\",\n    \"display"
  },
  {
    "path": "web/splash/splash.js",
    "chars": 172,
    "preview": "function removeSplashFromWeb() {\n  const elem = document.getElementById(\"splash\");\n  if (elem) {\n    elem.remove();\n  }\n"
  },
  {
    "path": "web/splash/style.css",
    "chars": 604,
    "preview": "body {\n  margin:0;\n  height:100%;\n  background: #e1f5fe;\n  \n  background-size: 100% 100%;\n}\n\n.center {\n  margin: 0;\n  po"
  },
  {
    "path": "windows/.gitignore",
    "chars": 291,
    "preview": "flutter/ephemeral/\n\n# Visual Studio user-specific files.\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# Visual Studio bu"
  },
  {
    "path": "windows/CMakeLists.txt",
    "chars": 3451,
    "preview": "cmake_minimum_required(VERSION 3.14)\nproject(flutter_dating_template LANGUAGES CXX)\n\nset(BINARY_NAME \"flutter_dating_tem"
  },
  {
    "path": "windows/flutter/CMakeLists.txt",
    "chars": 3489,
    "preview": "cmake_minimum_required(VERSION 3.14)\n\nset(EPHEMERAL_DIR \"${CMAKE_CURRENT_SOURCE_DIR}/ephemeral\")\n\n# Configuration provid"
  },
  {
    "path": "windows/flutter/generated_plugin_registrant.cc",
    "chars": 164,
    "preview": "//\n//  Generated file. Do not edit.\n//\n\n// clang-format off\n\n#include \"generated_plugin_registrant.h\"\n\n\nvoid RegisterPlu"
  },
  {
    "path": "windows/flutter/generated_plugin_registrant.h",
    "chars": 302,
    "preview": "//\n//  Generated file. Do not edit.\n//\n\n// clang-format off\n\n#ifndef GENERATED_PLUGIN_REGISTRANT_\n#define GENERATED_PLUG"
  },
  {
    "path": "windows/flutter/generated_plugins.cmake",
    "chars": 459,
    "preview": "#\n# Generated file, do not edit.\n#\n\nlist(APPEND FLUTTER_PLUGIN_LIST\n)\n\nset(PLUGIN_BUNDLED_LIBRARIES)\n\nforeach(plugin ${F"
  },
  {
    "path": "windows/runner/CMakeLists.txt",
    "chars": 572,
    "preview": "cmake_minimum_required(VERSION 3.14)\nproject(runner LANGUAGES CXX)\n\nadd_executable(${BINARY_NAME} WIN32\n  \"flutter_windo"
  },
  {
    "path": "windows/runner/Runner.rc",
    "chars": 2912,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#pragma code_page(65001)\n#include \"resource.h\"\n\n#define APSTUDIO_R"
  },
  {
    "path": "windows/runner/flutter_window.cpp",
    "chars": 1762,
    "preview": "#include \"flutter_window.h\"\n\n#include <optional>\n\n#include \"flutter/generated_plugin_registrant.h\"\n\nFlutterWindow::Flutt"
  },
  {
    "path": "windows/runner/flutter_window.h",
    "chars": 928,
    "preview": "#ifndef RUNNER_FLUTTER_WINDOW_H_\n#define RUNNER_FLUTTER_WINDOW_H_\n\n#include <flutter/dart_project.h>\n#include <flutter/f"
  },
  {
    "path": "windows/runner/main.cpp",
    "chars": 1283,
    "preview": "#include <flutter/dart_project.h>\n#include <flutter/flutter_view_controller.h>\n#include <windows.h>\n\n#include \"flutter_w"
  },
  {
    "path": "windows/runner/resource.h",
    "chars": 432,
    "preview": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by Runner.rc\n//\n#define IDI_APP_ICON      "
  },
  {
    "path": "windows/runner/runner.exe.manifest",
    "chars": 859,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersi"
  },
  {
    "path": "windows/runner/utils.cpp",
    "chars": 1651,
    "preview": "#include \"utils.h\"\n\n#include <flutter_windows.h>\n#include <io.h>\n#include <stdio.h>\n#include <windows.h>\n\n#include <iost"
  },
  {
    "path": "windows/runner/utils.h",
    "chars": 672,
    "preview": "#ifndef RUNNER_UTILS_H_\n#define RUNNER_UTILS_H_\n\n#include <string>\n#include <vector>\n\n// Creates a console for the proce"
  },
  {
    "path": "windows/runner/win32_window.cpp",
    "chars": 7024,
    "preview": "#include \"win32_window.h\"\n\n#include <flutter_windows.h>\n\n#include \"resource.h\"\n\nnamespace {\n\nconstexpr const wchar_t kWi"
  },
  {
    "path": "windows/runner/win32_window.h",
    "chars": 3350,
    "preview": "#ifndef RUNNER_WIN32_WINDOW_H_\n#define RUNNER_WIN32_WINDOW_H_\n\n#include <windows.h>\n\n#include <functional>\n#include <mem"
  }
]

About this extraction

This page contains the full source code of the meetqy/flutter_dating_template GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 150 files (345.6 KB), approximately 85.6k tokens, and a symbol index with 266 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!