├── lib ├── http │ ├── HttpError.dart │ └── HttpManager.dart ├── provider │ └── Counter.dart ├── pages │ ├── Me.dart │ ├── Fishond.dart │ ├── Idle.dart │ ├── Messages.dart │ ├── Login.dart │ └── Home.dart ├── config │ └── config.dart ├── utils │ ├── HexColor.dart │ └── UISize.dart ├── maps │ └── ImgList.dart ├── components │ ├── Mask.dart │ ├── HeaderNav.dart │ ├── ImagePlaceholder.dart │ ├── BottomNav.dart │ ├── BlockNav2.dart │ ├── BlockNav1.dart │ └── FallsList.dart ├── main.dart └── mock │ └── ImgListMock.dart ├── ios ├── Flutter │ ├── Debug.xcconfig │ ├── Release.xcconfig │ └── AppFrameworkInfo.plist ├── Runner │ ├── Runner-Bridging-Header.h │ ├── Assets.xcassets │ │ ├── LaunchImage.imageset │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ ├── README.md │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ └── Contents.json │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.storyboard │ └── Info.plist ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── WorkspaceSettings.xcsettings │ │ └── IDEWorkspaceChecks.plist ├── Runner.xcodeproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ └── IDEWorkspaceChecks.plist │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ └── project.pbxproj └── .gitignore ├── renovate.json ├── .github └── FUNDING.yml ├── assets └── images │ ├── hi.png │ ├── book.png │ ├── boot.png │ ├── fruit.png │ ├── more.png │ ├── phone.png │ ├── taobao.png │ ├── zhima.png │ ├── package.png │ ├── qiandao.png │ ├── zhifubao.png │ ├── Screenshot_1608024527.png │ └── Screenshot_1608024533.png ├── android ├── gradle.properties ├── app │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── launch_image.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── xml │ │ │ │ │ └── network_security_config.xml │ │ │ │ ├── drawable │ │ │ │ │ └── launch_background.xml │ │ │ │ └── values │ │ │ │ │ └── styles.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── example │ │ │ │ │ └── fishflutter │ │ │ │ │ └── MainActivity.kt │ │ │ └── AndroidManifest.xml │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ └── profile │ │ │ └── AndroidManifest.xml │ └── build.gradle ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties ├── .gitignore ├── settings.gradle └── build.gradle ├── CONTRIBUTORS.md ├── .metadata ├── .vscode └── launch.json ├── .gitignore ├── README.md ├── LICENSE ├── test └── widget_test.dart ├── pubspec.yaml └── pubspec.lock /lib/http/HttpError.dart: -------------------------------------------------------------------------------- 1 | class HttpError {} 2 | -------------------------------------------------------------------------------- /lib/http/HttpManager.dart: -------------------------------------------------------------------------------- 1 | class HttpManager {} 2 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [BB-Code] 4 | -------------------------------------------------------------------------------- /assets/images/hi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/assets/images/hi.png -------------------------------------------------------------------------------- /assets/images/book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/assets/images/book.png -------------------------------------------------------------------------------- /assets/images/boot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/assets/images/boot.png -------------------------------------------------------------------------------- /assets/images/fruit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/assets/images/fruit.png -------------------------------------------------------------------------------- /assets/images/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/assets/images/more.png -------------------------------------------------------------------------------- /assets/images/phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/assets/images/phone.png -------------------------------------------------------------------------------- /assets/images/taobao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/assets/images/taobao.png -------------------------------------------------------------------------------- /assets/images/zhima.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/assets/images/zhima.png -------------------------------------------------------------------------------- /assets/images/package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/assets/images/package.png -------------------------------------------------------------------------------- /assets/images/qiandao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/assets/images/qiandao.png -------------------------------------------------------------------------------- /assets/images/zhifubao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/assets/images/zhifubao.png -------------------------------------------------------------------------------- /assets/images/Screenshot_1608024527.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/assets/images/Screenshot_1608024527.png -------------------------------------------------------------------------------- /assets/images/Screenshot_1608024533.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/assets/images/Screenshot_1608024533.png -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | android.enableR8=true 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/launch_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/android/app/src/main/res/mipmap-xhdpi/launch_image.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BB-Code/fishflutter/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/fishflutter/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.fishflutter 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /lib/provider/Counter.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Counter with ChangeNotifier { 4 | int _count = 0; 5 | int get count => _count; 6 | void increment() { 7 | _count++; 8 | notifyListeners(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-all.zip 7 | -------------------------------------------------------------------------------- /CONTRIBUTORS.md: -------------------------------------------------------------------------------- 1 | 2 | ## Contributors 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /lib/pages/Me.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Me extends StatefulWidget { 4 | @override 5 | MeState createState() => MeState(); 6 | } 7 | 8 | class MeState extends State { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Center( 12 | child: Text("我的"), 13 | ); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 8874f21e79d7ec66d0457c7ab338348e31b17f1d 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /lib/config/config.dart: -------------------------------------------------------------------------------- 1 | class Config { 2 | static String imagePrefix = "assets/images/"; 3 | static String freeMp4 = "https://www.runoob.com/try/demo_source/movie.mp4"; 4 | static String freeMp42 = "http://vjs.zencdn.net/v/oceans.mp4"; 5 | static String freeM3u8 = 6 | "https://stream72.shidur.net/htvlive2/_definst_/smil:live2.smil/chunklist_b1248000.m3u8"; 7 | } 8 | -------------------------------------------------------------------------------- /lib/pages/Fishond.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Fishond extends StatefulWidget { 4 | @override 5 | FishondState createState() => FishondState(); 6 | } 7 | 8 | class FishondState extends State { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Center( 12 | child: Text("鱼塘"), 13 | ); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /lib/pages/Idle.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Idle extends StatefulWidget { 4 | @override 5 | IdleState createState() => IdleState(); 6 | } 7 | 8 | class IdleState extends State { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Scaffold( 12 | body: Center( 13 | child: Text("闲置"), 14 | )); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /lib/utils/HexColor.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class HexColor extends Color { 4 | static int toHexColor(String hexColor) { 5 | hexColor = hexColor.toLowerCase().replaceAll("#", ""); 6 | if (hexColor.length == 6) { 7 | hexColor = "FF" + hexColor; 8 | } 9 | return int.parse(hexColor, radix: 16); 10 | } 11 | 12 | HexColor(final String hexColor) : super(toHexColor(hexColor)); 13 | } 14 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "fishflutter", 9 | "request": "launch", 10 | "type": "dart", 11 | "program": "lib/main.dart" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.8.10' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.4.2' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | jcenter() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | # The .vscode folder contains launch configuration and tasks you configure in 18 | # VS Code which you may wish to be included in version control, so this line 19 | # is commented out by default. 20 | #.vscode/ 21 | 22 | # Flutter/Dart/Pub related 23 | **/doc/api/ 24 | **/ios/Flutter/.last_build_id 25 | .dart_tool/ 26 | .flutter-plugins 27 | .flutter-plugins-dependencies 28 | .packages 29 | .pub-cache/ 30 | .pub/ 31 | /build/ 32 | 33 | # Web related 34 | lib/generated_plugin_registrant.dart 35 | 36 | # Symbolication related 37 | app.*.symbols 38 | 39 | # Obfuscation related 40 | app.*.map.json 41 | -------------------------------------------------------------------------------- /lib/pages/Messages.dart: -------------------------------------------------------------------------------- 1 | // import 'package:awsome_video_player/awsome_video_player.dart'; 2 | // import 'package:fishflutter/config/config.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class Messages extends StatefulWidget { 6 | @override 7 | MessagesState createState() => MessagesState(); 8 | } 9 | 10 | class MessagesState extends State { 11 | @override 12 | Widget build(BuildContext context) { 13 | return Center( 14 | child: Text("消息"), 15 | // child: AwsomeVideoPlayer( 16 | // Config.freeM3u8, 17 | // playOptions: VideoPlayOptions( 18 | // seekSeconds: 30, 19 | // aspectRatio: 16 / 9, 20 | // loop: true, 21 | // autoplay: true, 22 | // allowScrubbing: true, 23 | // startPosition: Duration(seconds: 0)), 24 | // ), 25 | ); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 9.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /lib/maps/ImgList.dart: -------------------------------------------------------------------------------- 1 | class ImgList { 2 | String title; 3 | String src; 4 | int prices; 5 | int like; 6 | String author; 7 | String name; 8 | bool zhima; 9 | 10 | ImgList( 11 | {this.title, this.src, this.prices, this.like, this.author, this.zhima}); 12 | 13 | ImgList.fromJson(Map json) { 14 | title = json['title']; 15 | src = json['src']; 16 | prices = json['prices']; 17 | like = json['like']; 18 | author = json['author']; 19 | name = json['name']; 20 | zhima = json['zhima']; 21 | } 22 | 23 | Map toJson() { 24 | final Map data = new Map(); 25 | data['title'] = this.title; 26 | data['src'] = this.src; 27 | data['prices'] = this.prices; 28 | data['like'] = this.like; 29 | data['author'] = this.author; 30 | data['name'] = this.name; 31 | data['zhima'] = this.zhima; 32 | return data; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # fishflutter 2 | 3 | > :fish: flutter 高仿咸鱼 欢迎 :star: 4 | 5 | ## Star History 6 | 7 | [![Star History Chart](https://api.star-history.com/svg?repos=BB-Code/fishflutter&type=Date)](https://star-history.com/#BB-Code/fishflutter&Date) 8 | 9 | 10 | - [x] 搭建架构 11 | ``` 12 | ─ components 组件 13 | ─ config 配置 14 | ─ http 网络请求 15 | ─ maps 数据映射 16 | ─ models 数据模型 17 | ─ pages 页面 18 | ─ provider 状态共享 19 | ─ utils 工具类 20 | ``` 21 | 22 | - [x] 启功页面 23 | - [x] 底部导航 24 | - [x] 登录页面 25 | - [x] 首页头部 26 | - [x] 实现下拉瀑布流 27 | 28 | 29 | > 标注 30 | 31 | - 图片是随机生成的 32 | - 目前用的是Mock数据,后面整体布局完成后改为服务数据 33 | 34 | > 预览 35 | 36 | 首页 37 | 首页 38 | 39 | 40 | 41 | > 本APP的素材都用于学习研究,版权归咸鱼所有,侵权删除 42 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /lib/utils/UISize.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class UISize { 4 | static MediaQueryData mediaQueryData; 5 | static double screenWidth; 6 | static double screenHeight; 7 | static double blockSizeHorizontal; 8 | static double blockSizeVertical; 9 | 10 | static double safeAreaHorizontal; 11 | static double safeAreaVertical; 12 | static double safeBlockHorizontal; 13 | static double safeBlockVertical; 14 | 15 | void init(BuildContext context) { 16 | mediaQueryData = MediaQuery.of(context); 17 | screenWidth = mediaQueryData.size.width; 18 | screenHeight = mediaQueryData.size.height; 19 | blockSizeHorizontal = screenWidth / 100.0; 20 | blockSizeVertical = screenHeight / 100.0; 21 | 22 | safeAreaHorizontal = 23 | mediaQueryData.padding.left + mediaQueryData.padding.right; 24 | safeAreaVertical = 25 | mediaQueryData.padding.top + mediaQueryData.padding.bottom; 26 | safeBlockHorizontal = (screenWidth - safeAreaHorizontal) / 100.0; 27 | safeBlockVertical = (screenHeight - safeAreaVertical) / 100.0; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 BoBo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:fishflutter/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /lib/components/Mask.dart: -------------------------------------------------------------------------------- 1 | import 'package:fishflutter/utils/UISize.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class Mask extends StatelessWidget { 5 | const Mask({Key key}) : super(key: key); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | UISize().init(context); 10 | return Container( 11 | width: UISize.screenWidth, 12 | color: Color.fromARGB(80, 72, 72, 72), 13 | child: Row( 14 | mainAxisSize: MainAxisSize.max, 15 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 16 | crossAxisAlignment: CrossAxisAlignment.center, 17 | children: [ 18 | Icon(Icons.person, color: Colors.white), 19 | Padding( 20 | padding: EdgeInsets.only(right: 140), 21 | child: SizedBox( 22 | width: 100, 23 | child: Text( 24 | "欢迎来到咸鱼~ 登录打开新世界", 25 | style: TextStyle(color: Colors.white), 26 | ), 27 | )), 28 | FlatButton( 29 | color: Colors.redAccent[200], 30 | onPressed: () {}, 31 | child: Text("马上登录", style: TextStyle(color: Colors.white)), 32 | ) 33 | ], 34 | )); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:fishflutter/components/BottomNav.dart'; 2 | import 'package:fishflutter/pages/Fishond.dart'; 3 | import 'package:fishflutter/pages/Home.dart'; 4 | import 'package:fishflutter/pages/Idle.dart'; 5 | import 'package:fishflutter/pages/Login.dart'; 6 | import 'package:fishflutter/pages/Me.dart'; 7 | import 'package:fishflutter/pages/Messages.dart'; 8 | import 'package:fishflutter/provider/Counter.dart'; 9 | import 'package:flutter/material.dart'; 10 | import 'package:provider/provider.dart'; 11 | 12 | void main() { 13 | runApp(MyApp()); 14 | } 15 | 16 | class MyApp extends StatelessWidget { 17 | // This widget is the root of your application. 18 | @override 19 | Widget build(BuildContext context) { 20 | return MultiProvider( 21 | providers: [ChangeNotifierProvider(create: (_) => Counter())], 22 | child: MaterialApp( 23 | routes: { 24 | '/Home': (BuildContext context) => Home(), 25 | '/Fishond': (BuildContext context) => Fishond(), 26 | '/Idle': (BuildContext context) => Idle(), 27 | '/Message': (BuildContext context) => Messages(), 28 | '/Me': (BuildContext context) => Me(), 29 | "/Login": (BuildContext context) => Login() 30 | }, 31 | title: '高仿咸鱼', 32 | theme: ThemeData( 33 | primarySwatch: Colors.yellow, 34 | highlightColor: Color.fromRGBO(0, 0, 0, 0), 35 | splashColor: Color.fromRGBO(0, 0, 0, 0), 36 | visualDensity: VisualDensity.adaptivePlatformDensity, 37 | ), 38 | home: BottomNav(), 39 | debugShowCheckedModeBanner: false, 40 | )); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | fishflutter 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /lib/components/HeaderNav.dart: -------------------------------------------------------------------------------- 1 | import 'package:fishflutter/config/config.dart'; 2 | import 'package:fishflutter/utils/HexColor.dart'; 3 | import 'package:fishflutter/utils/uisize.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | class HeaderNav extends StatelessWidget { 7 | const HeaderNav({Key key}) : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | UISize().init(context); 12 | return Container( 13 | margin: EdgeInsets.only(left: 20, right: 20, bottom: 10), 14 | child: Row( 15 | mainAxisAlignment: MainAxisAlignment.spaceAround, 16 | children: [ 17 | Column(children: [ 18 | Image.asset(Config.imagePrefix + "phone.png", width: 40), 19 | Text( 20 | "二手手机", 21 | style: TextStyle(color: HexColor("979797"), fontSize: 14), 22 | ) 23 | ]), 24 | Column(children: [ 25 | Image.asset(Config.imagePrefix + "fruit.png", width: 40), 26 | Text( 27 | "生鲜水果", 28 | style: TextStyle(color: HexColor("979797"), fontSize: 14), 29 | ) 30 | ]), 31 | Column(children: [ 32 | Image.asset(Config.imagePrefix + "package.png", width: 40), 33 | Text( 34 | "奢品珠宝", 35 | style: TextStyle(color: HexColor("979797"), fontSize: 14), 36 | ) 37 | ]), 38 | Column(children: [ 39 | Image.asset(Config.imagePrefix + "book.png", width: 40), 40 | Text( 41 | "二手图书", 42 | style: TextStyle(color: HexColor("979797"), fontSize: 14), 43 | ) 44 | ]), 45 | Column(children: [ 46 | Image.asset(Config.imagePrefix + "more.png", width: 40), 47 | Text( 48 | "分类", 49 | style: TextStyle(color: HexColor("979797"), fontSize: 14), 50 | ) 51 | ]) 52 | ], 53 | ), 54 | ); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion 29 30 | 31 | sourceSets { 32 | main.java.srcDirs += 'src/main/kotlin' 33 | } 34 | 35 | lintOptions { 36 | disable 'InvalidPackage' 37 | } 38 | 39 | defaultConfig { 40 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 41 | applicationId "com.example.fishflutter" 42 | minSdkVersion 16 43 | targetSdkVersion 29 44 | versionCode flutterVersionCode.toInteger() 45 | versionName flutterVersionName 46 | } 47 | 48 | buildTypes { 49 | release { 50 | // TODO: Add your own signing config for the release build. 51 | // Signing with the debug keys for now, so `flutter run --release` works. 52 | signingConfig signingConfigs.debug 53 | } 54 | } 55 | } 56 | 57 | flutter { 58 | source '../..' 59 | } 60 | 61 | dependencies { 62 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 63 | } 64 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /lib/components/ImagePlaceholder.dart: -------------------------------------------------------------------------------- 1 | import 'package:fishflutter/utils/HexColor.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class ImagePlaceholder extends StatelessWidget { 5 | final String radiusDirection; 6 | final String bgColor; 7 | final String labelTitle; 8 | const ImagePlaceholder( 9 | {Key key, this.radiusDirection, this.bgColor, this.labelTitle}) 10 | : super(key: key); 11 | @override 12 | Widget build(BuildContext context) { 13 | return radiusDirection == "L" 14 | ? Container( 15 | width: 80.0, 16 | height: 80.0, 17 | decoration: BoxDecoration( 18 | borderRadius: BorderRadius.only( 19 | topLeft: Radius.circular(10), 20 | bottomLeft: Radius.circular(10)), 21 | image: DecorationImage( 22 | image: NetworkImage("https://unsplash.it/100/100/?random"), 23 | ), 24 | ), 25 | ) 26 | : radiusDirection == "R" 27 | ? Container( 28 | width: 80.0, 29 | height: 80.0, 30 | decoration: BoxDecoration( 31 | borderRadius: BorderRadius.only( 32 | topRight: Radius.circular(10), 33 | bottomRight: Radius.circular(10)), 34 | image: DecorationImage( 35 | image: NetworkImage("https://unsplash.it/100/100/?random"), 36 | ), 37 | ), 38 | ) 39 | : Container( 40 | width: 76.0, 41 | height: 76.0, 42 | decoration: BoxDecoration( 43 | borderRadius: BorderRadius.circular(10), 44 | image: DecorationImage( 45 | image: NetworkImage("https://unsplash.it/80/80/?random"), 46 | ), 47 | ), 48 | child: Stack(fit: StackFit.loose, children: [ 49 | Positioned( 50 | top: 50, 51 | left: 4, 52 | child: Container( 53 | alignment: Alignment.center, 54 | height: 20.0, 55 | width: 66, 56 | decoration: BoxDecoration( 57 | borderRadius: BorderRadius.circular(10), 58 | color: HexColor(bgColor), 59 | ), 60 | child: Text( 61 | labelTitle, 62 | style: TextStyle(color: Colors.white, fontSize: 11), 63 | )), 64 | ) 65 | ])); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 8 | 13 | 20 | 24 | 28 | 33 | 37 | 38 | 39 | 40 | 41 | 42 | 44 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /lib/mock/ImgListMock.dart: -------------------------------------------------------------------------------- 1 | List imgListMock = [ 2 | { 3 | "title": "LV 老花水桶 今年7月官网购", 4 | "src": "https://unsplash.it/300/250/?random", 5 | "prices": 1000, 6 | "like": 44, 7 | "author": "https://unsplash.it/10/10/?random", 8 | "name": "bobo", 9 | "zhima": false 10 | }, 11 | { 12 | "title": "全新的水貂顶帽子冲动", 13 | "src": "https://unsplash.it/300/150/?random", 14 | "prices": 85, 15 | "like": 20, 16 | "author": "https://unsplash.it/10/10/?random", 17 | "name": "lili", 18 | "zhima": true 19 | }, 20 | { 21 | "title": "今天的衣服值得你拥有", 22 | "src": "https://unsplash.it/300/300/?random", 23 | "prices": 15, 24 | "like": 3, 25 | "author": "https://unsplash.it/10/10/?random", 26 | "name": "cece", 27 | "zhima": false 28 | }, 29 | { 30 | "title": "LV 老花水桶 今年7月官网购", 31 | "src": "https://unsplash.it/300/260/?random", 32 | "prices": 10000, 33 | "like": 44, 34 | "author": "https://unsplash.it/10/10/?random", 35 | "name": "rere", 36 | "zhima": true 37 | }, 38 | { 39 | "title": "全新的水貂顶帽子冲动", 40 | "src": "https://unsplash.it/300/390/?random", 41 | "prices": 85, 42 | "like": 20, 43 | "author": "https://unsplash.it/10/10/?random", 44 | "name": "tt", 45 | "zhima": false 46 | }, 47 | { 48 | "title": "今天的衣服值得你拥有", 49 | "src": "https://unsplash.it/300/160/?random", 50 | "prices": 15, 51 | "like": 3, 52 | "author": "https://unsplash.it/10/10/?random", 53 | "name": "rr", 54 | "zhima": true 55 | }, 56 | { 57 | "title": "LV 老花水桶 今年7月官网购", 58 | "src": "https://unsplash.it/300/180/?random", 59 | "prices": 10000, 60 | "like": 44, 61 | "author": "https://unsplash.it/10/10/?random", 62 | "name": "bobocode", 63 | "zhima": true 64 | }, 65 | { 66 | "title": "全新的水貂顶帽子冲动", 67 | "src": "https://unsplash.it/300/170/?random", 68 | "prices": 85, 69 | "like": 20, 70 | "author": "https://unsplash.it/10/10/?random", 71 | "name": "lili", 72 | "zhima": false 73 | }, 74 | { 75 | "title": "今天的衣服值得你拥有", 76 | "src": "https://unsplash.it/300/168/?random", 77 | "prices": 15, 78 | "like": 3, 79 | "author": "https://unsplash.it/10/10/?random", 80 | "name": "cece", 81 | "zhima": true 82 | }, 83 | { 84 | "title": "LV 老花水桶 今年7月官网购", 85 | "src": "https://unsplash.it/300/530/?random", 86 | "prices": 10000, 87 | "like": 44, 88 | "author": "https://unsplash.it/10/10/?random", 89 | "name": "rere", 90 | "zhima": false 91 | }, 92 | { 93 | "title": "全新的水貂顶帽子冲动", 94 | "src": "https://unsplash.it/300/148/?random", 95 | "prices": 85, 96 | "like": 20, 97 | "author": "https://unsplash.it/10/10/?random", 98 | "name": "tt", 99 | "zhima": true 100 | }, 101 | { 102 | "title": "今天的衣服值得你拥有", 103 | "src": "https://unsplash.it/300/175/?random", 104 | "prices": 15, 105 | "like": 3, 106 | "author": "https://unsplash.it/10/10/?random", 107 | "name": "rr", 108 | "zhima": true 109 | } 110 | ]; 111 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /lib/components/BottomNav.dart: -------------------------------------------------------------------------------- 1 | import 'package:fishflutter/pages/Fishond.dart'; 2 | import 'package:fishflutter/pages/Home.dart'; 3 | import 'package:fishflutter/pages/Idle.dart'; 4 | import 'package:fishflutter/pages/Me.dart'; 5 | import 'package:fishflutter/pages/Messages.dart'; 6 | import 'package:flutter/material.dart'; 7 | 8 | class BottomNav extends StatefulWidget { 9 | @override 10 | BottomNavState createState() => BottomNavState(); 11 | } 12 | 13 | class BottomNavState extends State { 14 | int _currentIndex = 0; 15 | PageController _pageController = PageController(); 16 | final List _pages = [ 17 | Home(), 18 | Fishond(), 19 | Idle(), 20 | Messages(), 21 | Me() 22 | ]; 23 | @override 24 | void initState() { 25 | super.initState(); 26 | } 27 | 28 | @override 29 | Widget build(BuildContext context) { 30 | final navColor = Colors.black; 31 | final navSelectedColor = Colors.yellow; 32 | return Scaffold( 33 | body: PageView.builder( 34 | physics: AlwaysScrollableScrollPhysics(), 35 | controller: _pageController, 36 | itemCount: _pages.length, 37 | itemBuilder: (BuildContext context, int index) { 38 | return _pages[index]; 39 | }, 40 | ), 41 | floatingActionButtonAnimator: FloatingActionButtonAnimator.scaling, 42 | floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, 43 | floatingActionButton: FloatingActionButton( 44 | child: Icon(Icons.add, size: 26), 45 | onPressed: () { 46 | Navigator.pushNamed(context, "/Login"); 47 | }, 48 | ), 49 | bottomNavigationBar: BottomNavigationBar( 50 | unselectedFontSize: 10, 51 | selectedFontSize: 10, 52 | type: BottomNavigationBarType.fixed, 53 | currentIndex: _currentIndex, 54 | items: [ 55 | BottomNavigationBarItem( 56 | activeIcon: Icon(Icons.home, size: 26, color: navSelectedColor), 57 | icon: Icon(Icons.home_outlined, size: 26, color: navColor), 58 | title: Text('首页', style: TextStyle(color: navColor))), 59 | BottomNavigationBarItem( 60 | activeIcon: 61 | Icon(Icons.access_alarm, size: 26, color: navSelectedColor), 62 | icon: 63 | Icon(Icons.access_alarm_outlined, size: 26, color: navColor), 64 | title: Text('鱼塘', style: TextStyle(color: navColor))), 65 | BottomNavigationBarItem( 66 | title: Text('卖闲置', style: TextStyle(color: navColor)), 67 | icon: Icon(Icons.access_alarm, 68 | size: 26, color: Colors.transparent)), 69 | BottomNavigationBarItem( 70 | activeIcon: Icon(Icons.info, size: 26, color: navSelectedColor), 71 | icon: Icon(Icons.info_outlined, size: 26, color: navColor), 72 | title: Text('消息', style: TextStyle(color: navColor))), 73 | BottomNavigationBarItem( 74 | activeIcon: Icon(Icons.person, size: 26, color: navSelectedColor), 75 | icon: Icon(Icons.person_outlined, size: 26, color: navColor), 76 | title: Text('我的', style: TextStyle(color: navColor))) 77 | ], 78 | onTap: (int index) { 79 | setState(() { 80 | _currentIndex = index; 81 | }); 82 | _pageController.jumpToPage(_currentIndex); 83 | }, 84 | ), 85 | ); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /lib/pages/Login.dart: -------------------------------------------------------------------------------- 1 | import 'package:fishflutter/config/config.dart'; 2 | import 'package:provider/provider.dart'; 3 | import 'package:fishflutter/provider/Counter.dart'; 4 | import 'package:fishflutter/utils/UISize.dart'; 5 | import 'package:fishflutter/utils/HexColor.dart'; 6 | import 'package:flutter/material.dart'; 7 | 8 | class Login extends StatefulWidget { 9 | Login({Key key}) : super(key: key); 10 | 11 | @override 12 | _LoginState createState() => _LoginState(); 13 | } 14 | 15 | class _LoginState extends State { 16 | @override 17 | void initState() { 18 | super.initState(); 19 | } 20 | 21 | @override 22 | Widget build(BuildContext context) { 23 | UISize().init(context); 24 | final counter = Provider.of(context); 25 | return Scaffold( 26 | appBar: AppBar( 27 | elevation: 0, 28 | backgroundColor: HexColor("FFFFFF"), 29 | ), 30 | body: Container( 31 | color: HexColor("FFFFFF"), 32 | child: Column( 33 | mainAxisAlignment: MainAxisAlignment.center, 34 | children: [ 35 | Image.asset( 36 | Config.imagePrefix + "hi.png", 37 | fit: BoxFit.cover, 38 | ), 39 | SizedBox( 40 | width: UISize.screenWidth / 1.1, 41 | child: RaisedButton( 42 | shape: RoundedRectangleBorder( 43 | borderRadius: BorderRadius.circular(25), 44 | ), 45 | color: HexColor("F87C22"), 46 | onPressed: () {}, 47 | child: Row( 48 | mainAxisAlignment: MainAxisAlignment.center, 49 | children: [ 50 | Image.asset(Config.imagePrefix + "taobao.png", 51 | fit: BoxFit.cover), 52 | Text("快速登录", style: TextStyle(color: Colors.white)) 53 | ], 54 | )), 55 | ), 56 | SizedBox( 57 | width: UISize.screenWidth / 1.1, 58 | child: RaisedButton( 59 | shape: RoundedRectangleBorder( 60 | borderRadius: BorderRadius.circular(25), 61 | ), 62 | color: HexColor("48A2F8"), 63 | onPressed: () {}, 64 | child: Row( 65 | mainAxisAlignment: MainAxisAlignment.center, 66 | children: [ 67 | Image.asset(Config.imagePrefix + "zhifubao.png", 68 | fit: BoxFit.contain), 69 | Text("快速登录", style: TextStyle(color: Colors.white)) 70 | ], 71 | )), 72 | ), 73 | SizedBox( 74 | width: UISize.screenWidth / 1.1, 75 | child: RaisedButton( 76 | shape: RoundedRectangleBorder( 77 | side: BorderSide(color: Colors.black45), 78 | borderRadius: BorderRadius.circular(25), 79 | ), 80 | onPressed: () { 81 | counter.increment(); 82 | }, 83 | color: Colors.white, 84 | child: Text("账号密码/短信验证码登录 ${counter.count}", 85 | style: TextStyle(color: Colors.black)))) 86 | ], 87 | ))); 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: fishflutter 2 | description: A new Flutter project. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `pub publish`. This is preferred for private packages. 6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 7 | 8 | # The following defines the version and build number for your application. 9 | # A version number is three numbers separated by dots, like 1.2.43 10 | # followed by an optional build number separated by a +. 11 | # Both the version and the builder number may be overridden in flutter 12 | # build by specifying --build-name and --build-number, respectively. 13 | # In Android, build-name is used as versionName while build-number used as versionCode. 14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 16 | # Read more about iOS versioning at 17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 18 | version: 1.0.0+1 19 | 20 | environment: 21 | sdk: ">=2.7.0 <3.0.0" 22 | 23 | dependencies: 24 | flutter: 25 | sdk: flutter 26 | 27 | dio: ^5.0.0 28 | provider: ^6.0.0 29 | # The following adds the Cupertino Icons font to your application. 30 | # Use with the CupertinoIcons class for iOS style icons. 31 | cupertino_icons: ^1.0.0 32 | flutter_staggered_grid_view: ^0.6.0 33 | awsome_video_player: ^1.0.8+1 34 | flutter_screenutil: ^5.0.0 35 | dev_dependencies: 36 | flutter_test: 37 | sdk: flutter 38 | 39 | # For information on the generic Dart part of this file, see the 40 | # following page: https://dart.dev/tools/pub/pubspec 41 | 42 | # The following section is specific to Flutter. 43 | flutter: 44 | 45 | # The following line ensures that the Material Icons font is 46 | # included with your application, so that you can use the icons in 47 | # the material Icons class. 48 | uses-material-design: true 49 | 50 | # To add assets to your application, add an assets section, like this: 51 | assets: 52 | - assets/images/hi.png 53 | - assets/images/taobao.png 54 | - assets/images/zhifubao.png 55 | - assets/images/boot.png 56 | - assets/images/qiandao.png 57 | - assets/images/phone.png 58 | - assets/images/fruit.png 59 | - assets/images/package.png 60 | - assets/images/book.png 61 | - assets/images/more.png 62 | - assets/images/zhima.png 63 | # - images/a_dot_ham.jpeg 64 | 65 | # An image asset can refer to one or more resolution-specific "variants", see 66 | # https://flutter.dev/assets-and-images/#resolution-aware. 67 | 68 | # For details regarding adding assets from package dependencies, see 69 | # https://flutter.dev/assets-and-images/#from-packages 70 | 71 | # To add custom fonts to your application, add a fonts section here, 72 | # in this "flutter" section. Each entry in this list should have a 73 | # "family" key with the font family name, and a "fonts" key with a 74 | # list giving the asset and other descriptors for the font. For 75 | # example: 76 | # fonts: 77 | # - family: Schyler 78 | # fonts: 79 | # - asset: fonts/Schyler-Regular.ttf 80 | # - asset: fonts/Schyler-Italic.ttf 81 | # style: italic 82 | # - family: Trajan Pro 83 | # fonts: 84 | # - asset: fonts/TrajanPro.ttf 85 | # - asset: fonts/TrajanPro_Bold.ttf 86 | # weight: 700 87 | # 88 | # For details regarding fonts from package dependencies, 89 | # see https://flutter.dev/custom-fonts/#from-packages 90 | -------------------------------------------------------------------------------- /lib/components/BlockNav2.dart: -------------------------------------------------------------------------------- 1 | import 'package:fishflutter/utils/HexColor.dart'; 2 | import 'package:fishflutter/utils/UISize.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class BlockNav2 extends StatelessWidget { 6 | const BlockNav2({Key key}) : super(key: key); 7 | @override 8 | Widget build(BuildContext context) { 9 | UISize().init(context); 10 | return Container( 11 | margin: EdgeInsets.only(top: 10), 12 | decoration: BoxDecoration( 13 | borderRadius: BorderRadius.circular(10), 14 | color: Colors.white, 15 | ), 16 | child: Column( 17 | crossAxisAlignment: CrossAxisAlignment.start, 18 | children: [ 19 | Container( 20 | margin: EdgeInsets.only(top: 4, bottom: 4), 21 | child: Text(" 卖闲置换钱", 22 | style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold)), 23 | ), 24 | Row( 25 | crossAxisAlignment: CrossAxisAlignment.start, 26 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 27 | children: [ 28 | Container( 29 | margin: EdgeInsets.only(left: 10), 30 | padding: EdgeInsets.all(6), 31 | decoration: BoxDecoration( 32 | borderRadius: BorderRadius.circular(10), 33 | color: HexColor("F8F8F8"), 34 | ), 35 | width: UISize.screenWidth / 2.4, 36 | child: Row( 37 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 38 | children: [ 39 | Column( 40 | crossAxisAlignment: CrossAxisAlignment.start, 41 | children: [ 42 | Text("上门回 ▶", 43 | style: TextStyle( 44 | fontSize: 13, 45 | color: HexColor("FE2A1F"))), 46 | Text("57 类免费上门", 47 | style: TextStyle( 48 | fontSize: 11, color: Colors.grey)), 49 | ]), 50 | Image.network("https://unsplash.it/30/30/?random"), 51 | ])), 52 | Container( 53 | margin: EdgeInsets.only(bottom: 10), 54 | padding: EdgeInsets.all(6), 55 | decoration: BoxDecoration( 56 | borderRadius: BorderRadius.circular(10), 57 | color: HexColor("F8F8F8"), 58 | ), 59 | width: UISize.screenWidth / 4.8, 60 | child: Column(children: [ 61 | Text("手机寄卖 ▶", 62 | style: TextStyle( 63 | fontSize: 13, color: HexColor("FE8E2D"))), 64 | Text("48小时卖掉", 65 | style: TextStyle(fontSize: 11, color: Colors.grey)) 66 | ])), 67 | Container( 68 | margin: EdgeInsets.only(bottom: 10, right: 10), 69 | padding: EdgeInsets.all(6), 70 | decoration: BoxDecoration( 71 | borderRadius: BorderRadius.circular(10), 72 | color: HexColor("F8F8F8"), 73 | ), 74 | width: UISize.screenWidth / 4.8, 75 | child: Column(children: [ 76 | Text("淘宝转卖 ▶", 77 | style: TextStyle( 78 | fontSize: 13, color: HexColor("FEC345"))), 79 | Text("一键发布", 80 | style: TextStyle(fontSize: 11, color: Colors.grey)) 81 | ])), 82 | ]) 83 | ], 84 | ), 85 | ); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /lib/pages/Home.dart: -------------------------------------------------------------------------------- 1 | import 'package:fishflutter/components/FallsList.dart'; 2 | import 'package:fishflutter/components/Mask.dart'; 3 | import 'package:fishflutter/config/config.dart'; 4 | import 'package:fishflutter/utils/HexColor.dart'; 5 | import 'package:fishflutter/utils/UISize.dart'; 6 | import 'package:flutter/material.dart'; 7 | 8 | class Home extends StatefulWidget { 9 | @override 10 | HomeState createState() => HomeState(); 11 | } 12 | 13 | class HomeState extends State { 14 | @override 15 | Widget build(BuildContext context) { 16 | UISize().init(context); 17 | return Container( 18 | color: HexColor("#F2F2F2"), 19 | child: Stack( 20 | children: [ 21 | FullsList(), 22 | Positioned( 23 | top: 0, 24 | left: 0, 25 | child: Container( 26 | decoration: BoxDecoration( 27 | color: HexColor("FFE915"), 28 | borderRadius: BorderRadius.only( 29 | bottomLeft: Radius.circular(20), 30 | bottomRight: Radius.circular(20))), 31 | height: 100, 32 | width: UISize.screenWidth, 33 | child: Container( 34 | margin: EdgeInsets.only(top: 10), 35 | child: Row( 36 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 37 | crossAxisAlignment: CrossAxisAlignment.center, 38 | children: [ 39 | Padding( 40 | padding: EdgeInsets.only(left: 20), 41 | child: Icon(Icons.qr_code_scanner)), 42 | SizedBox( 43 | width: 200, 44 | child: Row( 45 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 46 | children: [ 47 | Text( 48 | "关注", 49 | style: TextStyle(fontSize: 18), 50 | ), 51 | Container( 52 | decoration: BoxDecoration( 53 | border: Border( 54 | bottom: BorderSide( 55 | color: Colors.black, 56 | width: 3, 57 | ), 58 | )), 59 | child: Text( 60 | "首页", 61 | style: TextStyle( 62 | fontSize: 20, 63 | fontWeight: FontWeight.bold, 64 | ), 65 | ), 66 | ), 67 | Text( 68 | "海外", 69 | style: TextStyle(fontSize: 18), 70 | ) 71 | ]), 72 | ), 73 | Image.asset( 74 | Config.imagePrefix + "qiandao.png", 75 | width: 50, 76 | fit: BoxFit.cover, 77 | ) 78 | ], 79 | ), 80 | ), 81 | ), 82 | //搜索框 83 | ), 84 | Positioned( 85 | top: UISize.screenHeight / 8, 86 | left: UISize.screenWidth / 20, 87 | child: Container( 88 | width: UISize.screenWidth / 1.1, 89 | height: UISize.screenHeight / 16, 90 | alignment: Alignment.center, 91 | child: TextField( 92 | decoration: InputDecoration( 93 | fillColor: Colors.white, 94 | filled: true, 95 | border: OutlineInputBorder( 96 | borderRadius: BorderRadius.circular(20), 97 | borderSide: BorderSide.none), 98 | alignLabelWithHint: true, 99 | //prefix: Icon(Icons.search, color: Colors.grey), 100 | //prefixIcon: Icon(Icons.search, color: Colors.grey), 101 | contentPadding: EdgeInsets.symmetric(vertical: 4.0), 102 | hintText: "🔍 冰箱| 华为 mate30pro"), 103 | textAlign: TextAlign.center, 104 | ), 105 | ), 106 | ), 107 | 108 | //登录遮罩 109 | Positioned( 110 | top: UISize.screenHeight / 1.18, 111 | child: Mask(), 112 | ) 113 | ], 114 | )); 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /lib/components/BlockNav1.dart: -------------------------------------------------------------------------------- 1 | import 'package:fishflutter/components/ImagePlaceholder.dart'; 2 | import 'package:fishflutter/utils/HexColor.dart'; 3 | import 'package:fishflutter/utils/UISize.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | class BlockNav1 extends StatelessWidget { 7 | const BlockNav1({Key key}) : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | UISize().init(context); 12 | return Container( 13 | padding: EdgeInsets.all(4), 14 | width: UISize.screenWidth / 1.4, 15 | decoration: BoxDecoration( 16 | borderRadius: BorderRadius.circular(10), color: Colors.white), 17 | child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [ 18 | Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ 19 | Container( 20 | margin: EdgeInsets.only(bottom: 6), 21 | child: RichText( 22 | text: TextSpan( 23 | text: "玩家", 24 | style: TextStyle( 25 | color: Colors.black, 26 | fontSize: 14, 27 | fontWeight: FontWeight.bold), 28 | children: [ 29 | TextSpan( 30 | text: " 最懂的人最狠的货", 31 | style: TextStyle(color: Colors.grey, fontSize: 10)) 32 | ]), 33 | ), 34 | ), 35 | Row(children: [ 36 | ImagePlaceholder(radiusDirection: "L"), 37 | SizedBox( 38 | width: 1, 39 | height: 12, 40 | child: DecoratedBox( 41 | decoration: BoxDecoration(color: Colors.white), 42 | ), 43 | ), 44 | ImagePlaceholder(radiusDirection: "R"), 45 | ]), 46 | Row( 47 | mainAxisAlignment: MainAxisAlignment.spaceAround, 48 | children: [ 49 | Container( 50 | margin: EdgeInsets.only(top: 4, bottom: 4), 51 | child: Text("租房", 52 | style: TextStyle( 53 | fontSize: 14, fontWeight: FontWeight.bold))), 54 | SizedBox(width: 60), 55 | Text("借租", 56 | style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold)), 57 | ], 58 | ), 59 | Row(children: [ 60 | ImagePlaceholder(bgColor: "18CAFE", labelTitle: "免中介费"), 61 | SizedBox( 62 | width: 10, 63 | height: 12, 64 | child: DecoratedBox( 65 | decoration: BoxDecoration(color: Colors.white), 66 | ), 67 | ), 68 | ImagePlaceholder(bgColor: "12D4A7", labelTitle: "9.9月包邮"), 69 | ]) 70 | ]), 71 | Container( 72 | padding: EdgeInsets.only(left: 10, right: 10), 73 | child: SizedBox( 74 | width: 1, 75 | height: 220, 76 | child: DecoratedBox( 77 | decoration: BoxDecoration(color: HexColor("F4F4F4")), 78 | ), 79 | ), 80 | ), 81 | Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ 82 | Container( 83 | margin: EdgeInsets.only(bottom: 6), 84 | child: RichText( 85 | text: TextSpan( 86 | text: "免费送", 87 | style: TextStyle( 88 | color: Colors.black, 89 | fontSize: 14, 90 | fontWeight: FontWeight.bold), 91 | children: [ 92 | TextSpan( 93 | text: " 41.9万件宝贝", 94 | style: TextStyle(color: Colors.grey, fontSize: 10)) 95 | ])), 96 | ), 97 | Row(children: [ 98 | ImagePlaceholder(radiusDirection: "L"), 99 | SizedBox( 100 | width: 1, 101 | height: 12, 102 | child: DecoratedBox( 103 | decoration: BoxDecoration(color: Colors.white), 104 | ), 105 | ), 106 | ImagePlaceholder(radiusDirection: "R"), 107 | ]), 108 | Row( 109 | children: [ 110 | Container( 111 | margin: EdgeInsets.only(top: 4, bottom: 4), 112 | child: RichText( 113 | text: TextSpan( 114 | text: "咸鱼优品", 115 | style: TextStyle( 116 | color: Colors.black, 117 | fontSize: 14, 118 | fontWeight: FontWeight.bold), 119 | children: [ 120 | TextSpan( 121 | text: " 二手正品好货", 122 | style: 123 | TextStyle(color: Colors.grey, fontSize: 10)) 124 | ]), 125 | )), 126 | ], 127 | ), 128 | Row(children: [ 129 | ImagePlaceholder(bgColor: "FF9218", labelTitle: "原装二手"), 130 | SizedBox( 131 | width: 10, 132 | height: 12, 133 | child: DecoratedBox( 134 | decoration: BoxDecoration(color: Colors.white), 135 | ), 136 | ), 137 | ImagePlaceholder(bgColor: "1962CE", labelTitle: "库存样机"), 138 | ]) 139 | ]), 140 | ]), 141 | ); 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /lib/components/FallsList.dart: -------------------------------------------------------------------------------- 1 | import 'package:fishflutter/components/BlockNav1.dart'; 2 | import 'package:fishflutter/components/BlockNav2.dart'; 3 | import 'package:fishflutter/components/HeaderNav.dart'; 4 | import 'package:fishflutter/config/config.dart'; 5 | import 'package:fishflutter/maps/ImgList.dart'; 6 | import 'package:fishflutter/mock/ImgListMock.dart'; 7 | import 'package:fishflutter/utils/UISize.dart'; 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; 10 | 11 | class FullsList extends StatefulWidget { 12 | FullsList({Key key}) : super(key: key); 13 | 14 | @override 15 | _FullsListState createState() => _FullsListState(); 16 | } 17 | 18 | class _FullsListState extends State { 19 | ScrollController _controller = ScrollController(); 20 | @override 21 | Widget build(BuildContext context) { 22 | UISize().init(context); 23 | return Container( 24 | alignment: Alignment.center, 25 | margin: EdgeInsets.only(top: 150), 26 | child: CustomScrollView( 27 | physics: AlwaysScrollableScrollPhysics(), 28 | shrinkWrap: true, 29 | controller: _controller, 30 | slivers: [ 31 | SliverToBoxAdapter(child: HeaderNav()), 32 | SliverToBoxAdapter(child: BlockNav1()), 33 | SliverToBoxAdapter(child: BlockNav2()), 34 | SliverToBoxAdapter( 35 | child: RefreshIndicator( 36 | onRefresh: () async { 37 | await Future.delayed(Duration(seconds: 5)); 38 | }, 39 | child: StaggeredGridView.countBuilder( 40 | physics: BouncingScrollPhysics(), 41 | shrinkWrap: true, 42 | itemCount: imgListMock.length, 43 | crossAxisCount: 4, 44 | mainAxisSpacing: 2.0, 45 | crossAxisSpacing: 2.0, 46 | itemBuilder: (context, index) { 47 | return itemWidget(index); 48 | }, 49 | staggeredTileBuilder: (index) => StaggeredTile.fit(2), 50 | ))) 51 | ])); 52 | } 53 | 54 | Widget itemWidget(int index) { 55 | return Container( 56 | decoration: BoxDecoration(boxShadow: [ 57 | BoxShadow(offset: Offset(2, 1), color: Colors.grey, blurRadius: 10) 58 | ], borderRadius: BorderRadius.circular(20), color: Colors.white), 59 | margin: EdgeInsets.only(bottom: 10, left: 10, right: 10), 60 | child: Column( 61 | crossAxisAlignment: CrossAxisAlignment.center, 62 | mainAxisAlignment: MainAxisAlignment.start, 63 | children: [ 64 | ClipRRect( 65 | borderRadius: BorderRadius.only( 66 | topLeft: Radius.circular(10), 67 | topRight: Radius.circular(10)), 68 | child: Image.network(ImgList.fromJson(imgListMock[index]).src, 69 | width: 200)), 70 | Text(ImgList.fromJson(imgListMock[index]).title, 71 | overflow: TextOverflow.ellipsis, 72 | style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold)), 73 | Container( 74 | margin: EdgeInsets.only(left: 10, right: 10), 75 | child: Row( 76 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 77 | children: [ 78 | Text( 79 | "¥" + 80 | ImgList.fromJson(imgListMock[index]) 81 | .prices 82 | .toString(), 83 | style: TextStyle( 84 | fontSize: 14, 85 | fontWeight: FontWeight.bold, 86 | color: Colors.red)), 87 | Text( 88 | ImgList.fromJson(imgListMock[index]).like.toString() + 89 | "人想要", 90 | style: TextStyle(fontSize: 10, color: Colors.grey)), 91 | ], 92 | )), 93 | Container( 94 | margin: EdgeInsets.only(left: 10, right: 10), 95 | child: Row( 96 | crossAxisAlignment: CrossAxisAlignment.center, 97 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 98 | children: [ 99 | SizedBox( 100 | width: 20, 101 | child: CircleAvatar( 102 | backgroundImage: NetworkImage( 103 | ImgList.fromJson(imgListMock[index]).author, 104 | ), 105 | ), 106 | ), 107 | SizedBox(width: 8), 108 | Expanded( 109 | child: Text( 110 | ImgList.fromJson(imgListMock[index]).name, 111 | overflow: TextOverflow.ellipsis, 112 | ), 113 | ), 114 | SizedBox(width: 8), 115 | ImgList.fromJson(imgListMock[index]).zhima 116 | ? Image.asset( 117 | Config.imagePrefix + 'zhima.png', 118 | fit: BoxFit.cover, 119 | width: 100, 120 | ) 121 | : SizedBox( 122 | child: Container( 123 | alignment: Alignment.center, 124 | padding: const EdgeInsets.only( 125 | left: 3.0, right: 3.0), 126 | decoration: BoxDecoration( 127 | borderRadius: BorderRadius.circular(4), 128 | border: Border.all(color: Colors.grey)), 129 | child: Text( 130 | "广告", 131 | style: TextStyle( 132 | color: Colors.grey, 133 | fontSize: 10, 134 | ), 135 | ), 136 | )) 137 | ])) 138 | ])); 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | async: 5 | dependency: transitive 6 | description: 7 | name: async 8 | sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "2.10.0" 12 | awsome_video_player: 13 | dependency: "direct main" 14 | description: 15 | name: awsome_video_player 16 | sha256: e7c4b462f5de951d582388343276a039f9f44d3effaa8e26bedcdd713948db7e 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "1.0.8+1" 20 | boolean_selector: 21 | dependency: transitive 22 | description: 23 | name: boolean_selector 24 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.1.1" 28 | characters: 29 | dependency: transitive 30 | description: 31 | name: characters 32 | sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c 33 | url: "https://pub.dev" 34 | source: hosted 35 | version: "1.2.1" 36 | clock: 37 | dependency: transitive 38 | description: 39 | name: clock 40 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf 41 | url: "https://pub.dev" 42 | source: hosted 43 | version: "1.1.1" 44 | collection: 45 | dependency: transitive 46 | description: 47 | name: collection 48 | sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.17.0" 52 | connectivity: 53 | dependency: transitive 54 | description: 55 | name: connectivity 56 | sha256: "63c75e3b899f89b4f3c0ed2aedb1a2833bb04cb141d74718bf8f38b1d23f7a32" 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "0.4.9+5" 60 | connectivity_for_web: 61 | dependency: transitive 62 | description: 63 | name: connectivity_for_web 64 | sha256: a90f39f9e2c9533a189b05596ce2eea9494b61efa34a78f079ba06fa4c50075d 65 | url: "https://pub.dev" 66 | source: hosted 67 | version: "0.3.1+4" 68 | connectivity_macos: 69 | dependency: transitive 70 | description: 71 | name: connectivity_macos 72 | sha256: "2ac537281b02e1117f50b154bd5a6b18cb889d6c18e2f415104886e4d2b6549e" 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "0.1.0+7" 76 | connectivity_platform_interface: 77 | dependency: transitive 78 | description: 79 | name: connectivity_platform_interface 80 | sha256: "3e3c0891ec5d22c0e265b0df5743810c91160a30ac4f3327cf04fd24782e8add" 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "1.0.6" 84 | cupertino_icons: 85 | dependency: "direct main" 86 | description: 87 | name: cupertino_icons 88 | sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "1.0.5" 92 | dio: 93 | dependency: "direct main" 94 | description: 95 | name: dio 96 | sha256: "9fdbf71baeb250fc9da847f6cb2052196f62c19906a3657adfc18631a667d316" 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "5.0.0" 100 | fake_async: 101 | dependency: transitive 102 | description: 103 | name: fake_async 104 | sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "1.3.1" 108 | flutter: 109 | dependency: "direct main" 110 | description: flutter 111 | source: sdk 112 | version: "0.0.0" 113 | flutter_screenutil: 114 | dependency: "direct main" 115 | description: 116 | name: flutter_screenutil 117 | sha256: "8e049ecdc1a62c90e6bf0e9c8398ace8dde81b92889c70cfe06281d79d59113a" 118 | url: "https://pub.dev" 119 | source: hosted 120 | version: "5.6.1" 121 | flutter_staggered_grid_view: 122 | dependency: "direct main" 123 | description: 124 | name: flutter_staggered_grid_view 125 | sha256: "1312314293acceb65b92754298754801b0e1f26a1845833b740b30415bbbcf07" 126 | url: "https://pub.dev" 127 | source: hosted 128 | version: "0.6.2" 129 | flutter_test: 130 | dependency: "direct dev" 131 | description: flutter 132 | source: sdk 133 | version: "0.0.0" 134 | flutter_web_plugins: 135 | dependency: transitive 136 | description: flutter 137 | source: sdk 138 | version: "0.0.0" 139 | http_parser: 140 | dependency: transitive 141 | description: 142 | name: http_parser 143 | sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" 144 | url: "https://pub.dev" 145 | source: hosted 146 | version: "4.0.2" 147 | js: 148 | dependency: transitive 149 | description: 150 | name: js 151 | sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" 152 | url: "https://pub.dev" 153 | source: hosted 154 | version: "0.6.5" 155 | matcher: 156 | dependency: transitive 157 | description: 158 | name: matcher 159 | sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" 160 | url: "https://pub.dev" 161 | source: hosted 162 | version: "0.12.13" 163 | material_color_utilities: 164 | dependency: transitive 165 | description: 166 | name: material_color_utilities 167 | sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 168 | url: "https://pub.dev" 169 | source: hosted 170 | version: "0.2.0" 171 | meta: 172 | dependency: transitive 173 | description: 174 | name: meta 175 | sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" 176 | url: "https://pub.dev" 177 | source: hosted 178 | version: "1.8.0" 179 | nested: 180 | dependency: transitive 181 | description: 182 | name: nested 183 | sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" 184 | url: "https://pub.dev" 185 | source: hosted 186 | version: "1.0.0" 187 | orientation: 188 | dependency: transitive 189 | description: 190 | name: orientation 191 | sha256: "16f229c87220a897db803456e0709364ffb25fc4405df0e3214bef99fa91d81c" 192 | url: "https://pub.dev" 193 | source: hosted 194 | version: "1.3.0" 195 | path: 196 | dependency: transitive 197 | description: 198 | name: path 199 | sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b 200 | url: "https://pub.dev" 201 | source: hosted 202 | version: "1.8.2" 203 | plugin_platform_interface: 204 | dependency: transitive 205 | description: 206 | name: plugin_platform_interface 207 | sha256: c3ebbff365bfb1b5f7b690c9857d2dabea167f35b05eb7586186499b407efb37 208 | url: "https://pub.dev" 209 | source: hosted 210 | version: "1.0.3" 211 | provider: 212 | dependency: "direct main" 213 | description: 214 | name: provider 215 | sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f 216 | url: "https://pub.dev" 217 | source: hosted 218 | version: "6.0.5" 219 | screen: 220 | dependency: transitive 221 | description: 222 | name: screen 223 | sha256: f953f9f906b15b971597acadad16b5ab1d3912cbb325e807416f223313ce8ed6 224 | url: "https://pub.dev" 225 | source: hosted 226 | version: "0.0.5" 227 | sky_engine: 228 | dependency: transitive 229 | description: flutter 230 | source: sdk 231 | version: "0.0.99" 232 | source_span: 233 | dependency: transitive 234 | description: 235 | name: source_span 236 | sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 237 | url: "https://pub.dev" 238 | source: hosted 239 | version: "1.9.1" 240 | stack_trace: 241 | dependency: transitive 242 | description: 243 | name: stack_trace 244 | sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 245 | url: "https://pub.dev" 246 | source: hosted 247 | version: "1.11.0" 248 | stream_channel: 249 | dependency: transitive 250 | description: 251 | name: stream_channel 252 | sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" 253 | url: "https://pub.dev" 254 | source: hosted 255 | version: "2.1.1" 256 | string_scanner: 257 | dependency: transitive 258 | description: 259 | name: string_scanner 260 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 261 | url: "https://pub.dev" 262 | source: hosted 263 | version: "1.2.0" 264 | term_glyph: 265 | dependency: transitive 266 | description: 267 | name: term_glyph 268 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 269 | url: "https://pub.dev" 270 | source: hosted 271 | version: "1.2.1" 272 | test_api: 273 | dependency: transitive 274 | description: 275 | name: test_api 276 | sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 277 | url: "https://pub.dev" 278 | source: hosted 279 | version: "0.4.16" 280 | typed_data: 281 | dependency: transitive 282 | description: 283 | name: typed_data 284 | sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" 285 | url: "https://pub.dev" 286 | source: hosted 287 | version: "1.3.1" 288 | vector_math: 289 | dependency: transitive 290 | description: 291 | name: vector_math 292 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" 293 | url: "https://pub.dev" 294 | source: hosted 295 | version: "2.1.4" 296 | video_player: 297 | dependency: transitive 298 | description: 299 | name: video_player 300 | sha256: "474a32082d4090de451da25ddea7a02e900fe6f4f424c9f8a82c5164ae194f27" 301 | url: "https://pub.dev" 302 | source: hosted 303 | version: "0.10.12+5" 304 | video_player_platform_interface: 305 | dependency: transitive 306 | description: 307 | name: video_player_platform_interface 308 | sha256: bb4802458d45af51566048bcacd4977e2fbc1539bc6aa683893e8c82d009fa9c 309 | url: "https://pub.dev" 310 | source: hosted 311 | version: "2.2.0" 312 | video_player_web: 313 | dependency: transitive 314 | description: 315 | name: video_player_web 316 | sha256: "1b0fb9d61cc7dc4e4a79c1ca9d1903ba97bb1b8571868262184e9190babb1241" 317 | url: "https://pub.dev" 318 | source: hosted 319 | version: "0.1.4+1" 320 | sdks: 321 | dart: ">=2.18.0 <3.0.0" 322 | flutter: ">=2.0.1" 323 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXCopyFilesBuildPhase section */ 19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 20 | isa = PBXCopyFilesBuildPhase; 21 | buildActionMask = 2147483647; 22 | dstPath = ""; 23 | dstSubfolderSpec = 10; 24 | files = ( 25 | ); 26 | name = "Embed Frameworks"; 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXCopyFilesBuildPhase section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | /* End PBXFrameworksBuildPhase section */ 56 | 57 | /* Begin PBXGroup section */ 58 | 9740EEB11CF90186004384FC /* Flutter */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 65 | ); 66 | name = Flutter; 67 | sourceTree = ""; 68 | }; 69 | 97C146E51CF9000F007C117D = { 70 | isa = PBXGroup; 71 | children = ( 72 | 9740EEB11CF90186004384FC /* Flutter */, 73 | 97C146F01CF9000F007C117D /* Runner */, 74 | 97C146EF1CF9000F007C117D /* Products */, 75 | ); 76 | sourceTree = ""; 77 | }; 78 | 97C146EF1CF9000F007C117D /* Products */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 97C146EE1CF9000F007C117D /* Runner.app */, 82 | ); 83 | name = Products; 84 | sourceTree = ""; 85 | }; 86 | 97C146F01CF9000F007C117D /* Runner */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 92 | 97C147021CF9000F007C117D /* Info.plist */, 93 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 94 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 95 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 96 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 97 | ); 98 | path = Runner; 99 | sourceTree = ""; 100 | }; 101 | /* End PBXGroup section */ 102 | 103 | /* Begin PBXNativeTarget section */ 104 | 97C146ED1CF9000F007C117D /* Runner */ = { 105 | isa = PBXNativeTarget; 106 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 107 | buildPhases = ( 108 | 9740EEB61CF901F6004384FC /* Run Script */, 109 | 97C146EA1CF9000F007C117D /* Sources */, 110 | 97C146EB1CF9000F007C117D /* Frameworks */, 111 | 97C146EC1CF9000F007C117D /* Resources */, 112 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 113 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 114 | ); 115 | buildRules = ( 116 | ); 117 | dependencies = ( 118 | ); 119 | name = Runner; 120 | productName = Runner; 121 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 122 | productType = "com.apple.product-type.application"; 123 | }; 124 | /* End PBXNativeTarget section */ 125 | 126 | /* Begin PBXProject section */ 127 | 97C146E61CF9000F007C117D /* Project object */ = { 128 | isa = PBXProject; 129 | attributes = { 130 | LastUpgradeCheck = 1020; 131 | ORGANIZATIONNAME = ""; 132 | TargetAttributes = { 133 | 97C146ED1CF9000F007C117D = { 134 | CreatedOnToolsVersion = 7.3.1; 135 | LastSwiftMigration = 1100; 136 | }; 137 | }; 138 | }; 139 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 140 | compatibilityVersion = "Xcode 9.3"; 141 | developmentRegion = en; 142 | hasScannedForEncodings = 0; 143 | knownRegions = ( 144 | en, 145 | Base, 146 | ); 147 | mainGroup = 97C146E51CF9000F007C117D; 148 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 149 | projectDirPath = ""; 150 | projectRoot = ""; 151 | targets = ( 152 | 97C146ED1CF9000F007C117D /* Runner */, 153 | ); 154 | }; 155 | /* End PBXProject section */ 156 | 157 | /* Begin PBXResourcesBuildPhase section */ 158 | 97C146EC1CF9000F007C117D /* Resources */ = { 159 | isa = PBXResourcesBuildPhase; 160 | buildActionMask = 2147483647; 161 | files = ( 162 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 163 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 164 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 165 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXResourcesBuildPhase section */ 170 | 171 | /* Begin PBXShellScriptBuildPhase section */ 172 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 173 | isa = PBXShellScriptBuildPhase; 174 | buildActionMask = 2147483647; 175 | files = ( 176 | ); 177 | inputPaths = ( 178 | ); 179 | name = "Thin Binary"; 180 | outputPaths = ( 181 | ); 182 | runOnlyForDeploymentPostprocessing = 0; 183 | shellPath = /bin/sh; 184 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 185 | }; 186 | 9740EEB61CF901F6004384FC /* Run Script */ = { 187 | isa = PBXShellScriptBuildPhase; 188 | buildActionMask = 2147483647; 189 | files = ( 190 | ); 191 | inputPaths = ( 192 | ); 193 | name = "Run Script"; 194 | outputPaths = ( 195 | ); 196 | runOnlyForDeploymentPostprocessing = 0; 197 | shellPath = /bin/sh; 198 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 199 | }; 200 | /* End PBXShellScriptBuildPhase section */ 201 | 202 | /* Begin PBXSourcesBuildPhase section */ 203 | 97C146EA1CF9000F007C117D /* Sources */ = { 204 | isa = PBXSourcesBuildPhase; 205 | buildActionMask = 2147483647; 206 | files = ( 207 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 208 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 209 | ); 210 | runOnlyForDeploymentPostprocessing = 0; 211 | }; 212 | /* End PBXSourcesBuildPhase section */ 213 | 214 | /* Begin PBXVariantGroup section */ 215 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 216 | isa = PBXVariantGroup; 217 | children = ( 218 | 97C146FB1CF9000F007C117D /* Base */, 219 | ); 220 | name = Main.storyboard; 221 | sourceTree = ""; 222 | }; 223 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 224 | isa = PBXVariantGroup; 225 | children = ( 226 | 97C147001CF9000F007C117D /* Base */, 227 | ); 228 | name = LaunchScreen.storyboard; 229 | sourceTree = ""; 230 | }; 231 | /* End PBXVariantGroup section */ 232 | 233 | /* Begin XCBuildConfiguration section */ 234 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 235 | isa = XCBuildConfiguration; 236 | buildSettings = { 237 | ALWAYS_SEARCH_USER_PATHS = NO; 238 | CLANG_ANALYZER_NONNULL = YES; 239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 240 | CLANG_CXX_LIBRARY = "libc++"; 241 | CLANG_ENABLE_MODULES = YES; 242 | CLANG_ENABLE_OBJC_ARC = YES; 243 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 244 | CLANG_WARN_BOOL_CONVERSION = YES; 245 | CLANG_WARN_COMMA = YES; 246 | CLANG_WARN_CONSTANT_CONVERSION = YES; 247 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 248 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 249 | CLANG_WARN_EMPTY_BODY = YES; 250 | CLANG_WARN_ENUM_CONVERSION = YES; 251 | CLANG_WARN_INFINITE_RECURSION = YES; 252 | CLANG_WARN_INT_CONVERSION = YES; 253 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 254 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 255 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 256 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 257 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 258 | CLANG_WARN_STRICT_PROTOTYPES = YES; 259 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 260 | CLANG_WARN_UNREACHABLE_CODE = YES; 261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 262 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 263 | COPY_PHASE_STRIP = NO; 264 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 265 | ENABLE_NS_ASSERTIONS = NO; 266 | ENABLE_STRICT_OBJC_MSGSEND = YES; 267 | GCC_C_LANGUAGE_STANDARD = gnu99; 268 | GCC_NO_COMMON_BLOCKS = YES; 269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 271 | GCC_WARN_UNDECLARED_SELECTOR = YES; 272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 273 | GCC_WARN_UNUSED_FUNCTION = YES; 274 | GCC_WARN_UNUSED_VARIABLE = YES; 275 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 276 | MTL_ENABLE_DEBUG_INFO = NO; 277 | SDKROOT = iphoneos; 278 | SUPPORTED_PLATFORMS = iphoneos; 279 | TARGETED_DEVICE_FAMILY = "1,2"; 280 | VALIDATE_PRODUCT = YES; 281 | }; 282 | name = Profile; 283 | }; 284 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 285 | isa = XCBuildConfiguration; 286 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 287 | buildSettings = { 288 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 289 | CLANG_ENABLE_MODULES = YES; 290 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 291 | ENABLE_BITCODE = NO; 292 | FRAMEWORK_SEARCH_PATHS = ( 293 | "$(inherited)", 294 | "$(PROJECT_DIR)/Flutter", 295 | ); 296 | INFOPLIST_FILE = Runner/Info.plist; 297 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 298 | LIBRARY_SEARCH_PATHS = ( 299 | "$(inherited)", 300 | "$(PROJECT_DIR)/Flutter", 301 | ); 302 | PRODUCT_BUNDLE_IDENTIFIER = com.example.fishflutter; 303 | PRODUCT_NAME = "$(TARGET_NAME)"; 304 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 305 | SWIFT_VERSION = 5.0; 306 | VERSIONING_SYSTEM = "apple-generic"; 307 | }; 308 | name = Profile; 309 | }; 310 | 97C147031CF9000F007C117D /* Debug */ = { 311 | isa = XCBuildConfiguration; 312 | buildSettings = { 313 | ALWAYS_SEARCH_USER_PATHS = NO; 314 | CLANG_ANALYZER_NONNULL = YES; 315 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 316 | CLANG_CXX_LIBRARY = "libc++"; 317 | CLANG_ENABLE_MODULES = YES; 318 | CLANG_ENABLE_OBJC_ARC = YES; 319 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 320 | CLANG_WARN_BOOL_CONVERSION = YES; 321 | CLANG_WARN_COMMA = YES; 322 | CLANG_WARN_CONSTANT_CONVERSION = YES; 323 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 324 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 325 | CLANG_WARN_EMPTY_BODY = YES; 326 | CLANG_WARN_ENUM_CONVERSION = YES; 327 | CLANG_WARN_INFINITE_RECURSION = YES; 328 | CLANG_WARN_INT_CONVERSION = YES; 329 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 330 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 331 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 332 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 333 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 334 | CLANG_WARN_STRICT_PROTOTYPES = YES; 335 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 336 | CLANG_WARN_UNREACHABLE_CODE = YES; 337 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 338 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 339 | COPY_PHASE_STRIP = NO; 340 | DEBUG_INFORMATION_FORMAT = dwarf; 341 | ENABLE_STRICT_OBJC_MSGSEND = YES; 342 | ENABLE_TESTABILITY = YES; 343 | GCC_C_LANGUAGE_STANDARD = gnu99; 344 | GCC_DYNAMIC_NO_PIC = NO; 345 | GCC_NO_COMMON_BLOCKS = YES; 346 | GCC_OPTIMIZATION_LEVEL = 0; 347 | GCC_PREPROCESSOR_DEFINITIONS = ( 348 | "DEBUG=1", 349 | "$(inherited)", 350 | ); 351 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 352 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 353 | GCC_WARN_UNDECLARED_SELECTOR = YES; 354 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 355 | GCC_WARN_UNUSED_FUNCTION = YES; 356 | GCC_WARN_UNUSED_VARIABLE = YES; 357 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 358 | MTL_ENABLE_DEBUG_INFO = YES; 359 | ONLY_ACTIVE_ARCH = YES; 360 | SDKROOT = iphoneos; 361 | TARGETED_DEVICE_FAMILY = "1,2"; 362 | }; 363 | name = Debug; 364 | }; 365 | 97C147041CF9000F007C117D /* Release */ = { 366 | isa = XCBuildConfiguration; 367 | buildSettings = { 368 | ALWAYS_SEARCH_USER_PATHS = NO; 369 | CLANG_ANALYZER_NONNULL = YES; 370 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 371 | CLANG_CXX_LIBRARY = "libc++"; 372 | CLANG_ENABLE_MODULES = YES; 373 | CLANG_ENABLE_OBJC_ARC = YES; 374 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 375 | CLANG_WARN_BOOL_CONVERSION = YES; 376 | CLANG_WARN_COMMA = YES; 377 | CLANG_WARN_CONSTANT_CONVERSION = YES; 378 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 379 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 380 | CLANG_WARN_EMPTY_BODY = YES; 381 | CLANG_WARN_ENUM_CONVERSION = YES; 382 | CLANG_WARN_INFINITE_RECURSION = YES; 383 | CLANG_WARN_INT_CONVERSION = YES; 384 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 385 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 386 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 387 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 388 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 389 | CLANG_WARN_STRICT_PROTOTYPES = YES; 390 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 391 | CLANG_WARN_UNREACHABLE_CODE = YES; 392 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 393 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 394 | COPY_PHASE_STRIP = NO; 395 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 396 | ENABLE_NS_ASSERTIONS = NO; 397 | ENABLE_STRICT_OBJC_MSGSEND = YES; 398 | GCC_C_LANGUAGE_STANDARD = gnu99; 399 | GCC_NO_COMMON_BLOCKS = YES; 400 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 401 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 402 | GCC_WARN_UNDECLARED_SELECTOR = YES; 403 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 404 | GCC_WARN_UNUSED_FUNCTION = YES; 405 | GCC_WARN_UNUSED_VARIABLE = YES; 406 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 407 | MTL_ENABLE_DEBUG_INFO = NO; 408 | SDKROOT = iphoneos; 409 | SUPPORTED_PLATFORMS = iphoneos; 410 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 411 | TARGETED_DEVICE_FAMILY = "1,2"; 412 | VALIDATE_PRODUCT = YES; 413 | }; 414 | name = Release; 415 | }; 416 | 97C147061CF9000F007C117D /* Debug */ = { 417 | isa = XCBuildConfiguration; 418 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 419 | buildSettings = { 420 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 421 | CLANG_ENABLE_MODULES = YES; 422 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 423 | ENABLE_BITCODE = NO; 424 | FRAMEWORK_SEARCH_PATHS = ( 425 | "$(inherited)", 426 | "$(PROJECT_DIR)/Flutter", 427 | ); 428 | INFOPLIST_FILE = Runner/Info.plist; 429 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 430 | LIBRARY_SEARCH_PATHS = ( 431 | "$(inherited)", 432 | "$(PROJECT_DIR)/Flutter", 433 | ); 434 | PRODUCT_BUNDLE_IDENTIFIER = com.example.fishflutter; 435 | PRODUCT_NAME = "$(TARGET_NAME)"; 436 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 437 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 438 | SWIFT_VERSION = 5.0; 439 | VERSIONING_SYSTEM = "apple-generic"; 440 | }; 441 | name = Debug; 442 | }; 443 | 97C147071CF9000F007C117D /* Release */ = { 444 | isa = XCBuildConfiguration; 445 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 446 | buildSettings = { 447 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 448 | CLANG_ENABLE_MODULES = YES; 449 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 450 | ENABLE_BITCODE = NO; 451 | FRAMEWORK_SEARCH_PATHS = ( 452 | "$(inherited)", 453 | "$(PROJECT_DIR)/Flutter", 454 | ); 455 | INFOPLIST_FILE = Runner/Info.plist; 456 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 457 | LIBRARY_SEARCH_PATHS = ( 458 | "$(inherited)", 459 | "$(PROJECT_DIR)/Flutter", 460 | ); 461 | PRODUCT_BUNDLE_IDENTIFIER = com.example.fishflutter; 462 | PRODUCT_NAME = "$(TARGET_NAME)"; 463 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 464 | SWIFT_VERSION = 5.0; 465 | VERSIONING_SYSTEM = "apple-generic"; 466 | }; 467 | name = Release; 468 | }; 469 | /* End XCBuildConfiguration section */ 470 | 471 | /* Begin XCConfigurationList section */ 472 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 473 | isa = XCConfigurationList; 474 | buildConfigurations = ( 475 | 97C147031CF9000F007C117D /* Debug */, 476 | 97C147041CF9000F007C117D /* Release */, 477 | 249021D3217E4FDB00AE95B9 /* Profile */, 478 | ); 479 | defaultConfigurationIsVisible = 0; 480 | defaultConfigurationName = Release; 481 | }; 482 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 483 | isa = XCConfigurationList; 484 | buildConfigurations = ( 485 | 97C147061CF9000F007C117D /* Debug */, 486 | 97C147071CF9000F007C117D /* Release */, 487 | 249021D4217E4FDB00AE95B9 /* Profile */, 488 | ); 489 | defaultConfigurationIsVisible = 0; 490 | defaultConfigurationName = Release; 491 | }; 492 | /* End XCConfigurationList section */ 493 | }; 494 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 495 | } 496 | --------------------------------------------------------------------------------