├── .gitattributes ├── .gitignore ├── CHANGELOG.md ├── CODEOWNERS ├── LICENSE ├── README.md ├── example ├── README.md ├── android │ ├── app │ │ ├── build.gradle │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ ├── com │ │ │ │ │ └── fiftyfivebuilds │ │ │ │ │ │ └── ff_nagivation_bar_example │ │ │ │ │ │ └── MainActivity.java │ │ │ │ └── io │ │ │ │ │ └── flutter │ │ │ │ │ └── plugins │ │ │ │ │ └── GeneratedPluginRegistrant.java │ │ │ └── res │ │ │ │ ├── drawable │ │ │ │ └── launch_background.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ └── values │ │ │ │ └── styles.xml │ │ │ └── profile │ │ │ └── AndroidManifest.xml │ ├── build.gradle │ ├── ff_nagivation_bar_example_android.iml │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── local.properties │ └── settings.gradle ├── ios │ ├── Flutter │ │ ├── App.framework │ │ │ ├── App │ │ │ ├── Info.plist │ │ │ └── flutter_assets │ │ │ │ ├── AssetManifest.json │ │ │ │ ├── FontManifest.json │ │ │ │ ├── LICENSE │ │ │ │ ├── fonts │ │ │ │ └── MaterialIcons-Regular.ttf │ │ │ │ ├── isolate_snapshot_data │ │ │ │ ├── kernel_blob.bin │ │ │ │ └── vm_snapshot_data │ │ ├── AppFrameworkInfo.plist │ │ ├── Debug.xcconfig │ │ ├── Flutter.framework │ │ │ ├── Flutter │ │ │ ├── Headers │ │ │ │ ├── Flutter.h │ │ │ │ ├── FlutterAppDelegate.h │ │ │ │ ├── FlutterBinaryMessenger.h │ │ │ │ ├── FlutterCallbackCache.h │ │ │ │ ├── FlutterChannels.h │ │ │ │ ├── FlutterCodecs.h │ │ │ │ ├── FlutterDartProject.h │ │ │ │ ├── FlutterEngine.h │ │ │ │ ├── FlutterHeadlessDartRunner.h │ │ │ │ ├── FlutterMacros.h │ │ │ │ ├── FlutterPlatformViews.h │ │ │ │ ├── FlutterPlugin.h │ │ │ │ ├── FlutterPluginAppLifeCycleDelegate.h │ │ │ │ ├── FlutterTexture.h │ │ │ │ └── FlutterViewController.h │ │ │ ├── Info.plist │ │ │ ├── Modules │ │ │ │ └── module.modulemap │ │ │ ├── _CodeSignature │ │ │ │ └── CodeResources │ │ │ └── icudtl.dat │ │ ├── Generated.xcconfig │ │ ├── Release.xcconfig │ │ └── flutter_export_environment.sh │ ├── Runner.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace │ │ └── contents.xcworkspacedata │ ├── Runner │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ │ └── LaunchImage.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ └── README.md │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── GeneratedPluginRegistrant.h │ │ ├── GeneratedPluginRegistrant.m │ │ ├── Info.plist │ │ └── main.m │ └── ServiceDefinitions.json ├── lib │ └── main.dart └── pubspec.yaml ├── ff_navigation_bar.iml ├── lib ├── ff_navigation_bar.dart ├── ff_navigation_bar_item.dart └── ff_navigation_bar_theme.dart ├── navbar-demo.gif ├── pubspec.yaml └── test └── ff_navigation_bar_test.dart /.gitattributes: -------------------------------------------------------------------------------- 1 | example/* linguist-vendored 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://www.dartlang.org/guides/libraries/private-files 2 | 3 | # Files and directories created by pub 4 | .dart_tool/ 5 | .packages 6 | .pub/ 7 | build/ 8 | # If you're building an application, you may want to check-in your pubspec.lock 9 | pubspec.lock 10 | 11 | # Directory created by dartdoc 12 | # If you don't generate documentation locally you can remove this line. 13 | doc/api/ 14 | /.DS_Store 15 | /.idea 16 | .DS_Store 17 | /example/android 18 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [0.1.5] - 22-FEB-2020 2 | 3 | * Fixed bug where hitbox for each navigation item collapsed to its content size. Now uses a SizedBox to fix the hitbox to the theme's barHeight value and the navigation bar's width / number of items in the bar. This gives a uniform hitbox size for each item. 4 | 5 | ## [0.1.4] - 20-JAN-2020 6 | 7 | * Maintenance release with support for Provider library version 4.0.2 8 | 9 | ## [0.1.3] - 20-DEC-2019 10 | 11 | * Fixed bug where setting showSelectedItemShadow = false in the theme did not hide the shadow on the navbar 12 | * Demo app updated to a taller bar height and cleaner style for better display across devices 13 | 14 | ## [0.1.2] - 27-NOV-2019 15 | 16 | * Added support for selectedItemBorderColor in the theme options 17 | 18 | ## [0.1.1] - 16-NOV-2019 19 | 20 | * Fixed example code and tidied deployment structure 21 | 22 | ## [0.1.0] - 16-NOV-2019 23 | 24 | * Included example code 25 | 26 | ## [0.0.1] - 15-NOV-2019 27 | 28 | * First release of the package 29 | 30 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | # These owners will be the default owners for everything in 2 | # the repo. Unless a later match takes precedence, 3 | # @jwbaldry will be requested for review when someone 4 | # opens a pull request. 5 | * @jwbaldry 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 55 Builds 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ff_navigation_bar 2 | A highly configurable navigation bar with emphasis for the selected item. 3 | ![](navbar-demo.gif) 4 | 5 | ## Add dependency 6 | ``` 7 | dependencies: 8 | ff_navigation_bar: ^0.1.5 9 | ``` 10 | 11 | ## Basic use 12 | ``` 13 | import 'package:flutter/material.dart'; 14 | import 'package:ff_navigation_bar/ff_navigation_bar.dart'; 15 | ... 16 | return Scaffold( 17 | appBar: AppBar( 18 | title: Text(widget.title), 19 | ), 20 | body: Center( 21 | child: Column( 22 | mainAxisAlignment: MainAxisAlignment.center, 23 | children: [ 24 | Text( 25 | 'Demonstration', 26 | ), 27 | ], 28 | ), 29 | ), 30 | bottomNavigationBar: FFNavigationBar( 31 | theme: FFNavigationBarTheme( 32 | barBackgroundColor: Colors.white, 33 | selectedItemBorderColor: Colors.yellow, 34 | selectedItemBackgroundColor: Colors.green, 35 | selectedItemIconColor: Colors.white, 36 | selectedItemLabelColor: Colors.black, 37 | ), 38 | selectedIndex: selectedIndex, 39 | onSelectTab: (index) { 40 | setState(() { 41 | selectedIndex = index; 42 | }); 43 | }, 44 | items: [ 45 | FFNavigationBarItem( 46 | iconData: Icons.calendar_today, 47 | label: 'Schedule', 48 | ), 49 | FFNavigationBarItem( 50 | iconData: Icons.people, 51 | label: 'Contacts', 52 | ), 53 | FFNavigationBarItem( 54 | iconData: Icons.attach_money, 55 | label: 'Bills', 56 | ), 57 | FFNavigationBarItem( 58 | iconData: Icons.note, 59 | label: 'Notes', 60 | ), 61 | FFNavigationBarItem( 62 | iconData: Icons.settings, 63 | label: 'Settings', 64 | ), 65 | ], 66 | ), 67 | ); 68 | ``` 69 | 70 | ## Theme 71 | The navbar has a Theme class which can be used to define the majority of appearance settings for the navbar and its items. 72 | * barBackgroundColor: The background color for the entire bar (default = white) 73 | * selectedItemBackgroundColor: The background color for the CircleAvatar widget used to display the selected item's icon (default = blueAccent) 74 | * selectedItemIconColor: The color for the selected item's icon (default = white) 75 | * selectedItemLabelColor: The color for the selected item's label (default = black) 76 | * selectedItemBorderColor: The color for the selected item's border (default = white) 77 | * unselectedItemBackgroundColor: The background color for unselected items (default = transparent) 78 | * unselectedItemIconColor: The color for unselected items' icons (default = grey) 79 | * unselectedItemLabelColor: The color for unselected items' icons (default = grey) 80 | * selectedItemTextStyle: The text style to use for the selected item's label. The selectedItemLabelColor takes priority over any color attribute of the style (defaults to size = 13.0, weight = Bold) 81 | * unselectedItemTextStyle: The text style to use for the unselected items' labels (defaults to size = 12.0, weight = Normal) 82 | * barHeight: The height for the bar (which is automatically included within a SafeArea widget) 83 | * itemWidth: The width to use for the selected item CircleAvater (default = 48.0) 84 | * showSelectedItemShadow: Indicates if the drop shadow below the selected item should be displayed (default = true) 85 | 86 | ## FFNavigationBar Attributes 87 | * selectedIndex: The item number (zero indexed) which should be marked as selected 88 | * onSelectTab: Callback function to receive tap notifications using the typedef `Function(int selectedIndex)` 89 | * items: List of FFNavigationBarItem objects to be displayed as the bar's items 90 | * theme: A FFNavigationBarTheme theme object 91 | 92 | ## FFNavigationBarItem 93 | * label: The String to display as the item's label 94 | * iconData: The IconData to use in the item's Icon 95 | * animationDuration: A Duration object which can be used to tweak the AnimatedContainer behaviour of the navigation bar item. 96 | * selectedBackgroundColor: A Color value which can override the theme's selectedItemBackgroundColor value for a specific navigation bar item (used to create different colors for each item) 97 | * selectedForegroundColor: A Color value which can override the theme's selectedItemIconColor value 98 | * selectedLabelColor: A Color value which can override the theme's selectedItemLabelColor value 99 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # ff_nagivation_bar_example 2 | 3 | Example flutter app for the ff_navigation_bar package 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 13 | 14 | For help getting started with Flutter, view our 15 | [online documentation](https://flutter.dev/docs), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /example/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 26 | 27 | android { 28 | compileSdkVersion 28 29 | 30 | lintOptions { 31 | disable 'InvalidPackage' 32 | } 33 | 34 | defaultConfig { 35 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 36 | applicationId "com.fiftyfivebuilds.ff_nagivation_bar_example" 37 | minSdkVersion 16 38 | targetSdkVersion 28 39 | versionCode flutterVersionCode.toInteger() 40 | versionName flutterVersionName 41 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 42 | } 43 | 44 | buildTypes { 45 | release { 46 | // TODO: Add your own signing config for the release build. 47 | // Signing with the debug keys for now, so `flutter run --release` works. 48 | signingConfig signingConfigs.debug 49 | } 50 | } 51 | } 52 | 53 | flutter { 54 | source '../..' 55 | } 56 | 57 | dependencies { 58 | testImplementation 'junit:junit:4.12' 59 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 60 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 61 | } 62 | -------------------------------------------------------------------------------- /example/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | 13 | 20 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /example/android/app/src/main/java/com/fiftyfivebuilds/ff_nagivation_bar_example/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.fiftyfivebuilds.ff_nagivation_bar_example; 2 | 3 | import android.os.Bundle; 4 | import io.flutter.app.FlutterActivity; 5 | import io.flutter.plugins.GeneratedPluginRegistrant; 6 | 7 | public class MainActivity extends FlutterActivity { 8 | @Override 9 | protected void onCreate(Bundle savedInstanceState) { 10 | super.onCreate(savedInstanceState); 11 | GeneratedPluginRegistrant.registerWith(this); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java: -------------------------------------------------------------------------------- 1 | package io.flutter.plugins; 2 | 3 | import io.flutter.plugin.common.PluginRegistry; 4 | 5 | /** 6 | * Generated file. Do not edit. 7 | */ 8 | public final class GeneratedPluginRegistrant { 9 | public static void registerWith(PluginRegistry registry) { 10 | if (alreadyRegisteredWith(registry)) { 11 | return; 12 | } 13 | } 14 | 15 | private static boolean alreadyRegisteredWith(PluginRegistry registry) { 16 | final String key = GeneratedPluginRegistrant.class.getCanonicalName(); 17 | if (registry.hasPlugin(key)) { 18 | return true; 19 | } 20 | registry.registrarFor(key); 21 | return false; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /example/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.2.1' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | jcenter() 16 | } 17 | } 18 | 19 | rootProject.buildDir = '../build' 20 | subprojects { 21 | project.buildDir = "${rootProject.buildDir}/${project.name}" 22 | } 23 | subprojects { 24 | project.evaluationDependsOn(':app') 25 | } 26 | 27 | task clean(type: Delete) { 28 | delete rootProject.buildDir 29 | } 30 | -------------------------------------------------------------------------------- /example/android/ff_nagivation_bar_example_android.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /example/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | 3 | android.enableR8=true 4 | -------------------------------------------------------------------------------- /example/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /example/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip 7 | -------------------------------------------------------------------------------- /example/android/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # Attempt to set APP_HOME 46 | # Resolve links: $0 may be a link 47 | PRG="$0" 48 | # Need this for relative symlinks. 49 | while [ -h "$PRG" ] ; do 50 | ls=`ls -ld "$PRG"` 51 | link=`expr "$ls" : '.*-> \(.*\)$'` 52 | if expr "$link" : '/.*' > /dev/null; then 53 | PRG="$link" 54 | else 55 | PRG=`dirname "$PRG"`"/$link" 56 | fi 57 | done 58 | SAVED="`pwd`" 59 | cd "`dirname \"$PRG\"`/" >/dev/null 60 | APP_HOME="`pwd -P`" 61 | cd "$SAVED" >/dev/null 62 | 63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 64 | 65 | # Determine the Java command to use to start the JVM. 66 | if [ -n "$JAVA_HOME" ] ; then 67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 68 | # IBM's JDK on AIX uses strange locations for the executables 69 | JAVACMD="$JAVA_HOME/jre/sh/java" 70 | else 71 | JAVACMD="$JAVA_HOME/bin/java" 72 | fi 73 | if [ ! -x "$JAVACMD" ] ; then 74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 75 | 76 | Please set the JAVA_HOME variable in your environment to match the 77 | location of your Java installation." 78 | fi 79 | else 80 | JAVACMD="java" 81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 82 | 83 | Please set the JAVA_HOME variable in your environment to match the 84 | location of your Java installation." 85 | fi 86 | 87 | # Increase the maximum file descriptors if we can. 88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 89 | MAX_FD_LIMIT=`ulimit -H -n` 90 | if [ $? -eq 0 ] ; then 91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 92 | MAX_FD="$MAX_FD_LIMIT" 93 | fi 94 | ulimit -n $MAX_FD 95 | if [ $? -ne 0 ] ; then 96 | warn "Could not set maximum file descriptor limit: $MAX_FD" 97 | fi 98 | else 99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 100 | fi 101 | fi 102 | 103 | # For Darwin, add options to specify how the application appears in the dock 104 | if $darwin; then 105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 106 | fi 107 | 108 | # For Cygwin, switch paths to Windows format before running java 109 | if $cygwin ; then 110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 112 | JAVACMD=`cygpath --unix "$JAVACMD"` 113 | 114 | # We build the pattern for arguments to be converted via cygpath 115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 116 | SEP="" 117 | for dir in $ROOTDIRSRAW ; do 118 | ROOTDIRS="$ROOTDIRS$SEP$dir" 119 | SEP="|" 120 | done 121 | OURCYGPATTERN="(^($ROOTDIRS))" 122 | # Add a user-defined pattern to the cygpath arguments 123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 125 | fi 126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 127 | i=0 128 | for arg in "$@" ; do 129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 131 | 132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 134 | else 135 | eval `echo args$i`="\"$arg\"" 136 | fi 137 | i=$((i+1)) 138 | done 139 | case $i in 140 | (0) set -- ;; 141 | (1) set -- "$args0" ;; 142 | (2) set -- "$args0" "$args1" ;; 143 | (3) set -- "$args0" "$args1" "$args2" ;; 144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 150 | esac 151 | fi 152 | 153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 154 | function splitJvmOpts() { 155 | JVM_OPTS=("$@") 156 | } 157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 159 | 160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 161 | -------------------------------------------------------------------------------- /example/android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /example/android/local.properties: -------------------------------------------------------------------------------- 1 | sdk.dir=/Users/jwb/Library/Android/sdk 2 | flutter.sdk=/Users/jwb/Local/Workspaces/Unversioned/FlutterDevelopment 3 | flutter.buildMode=debug 4 | flutter.versionName=1.0.0 5 | flutter.versionCode=1 -------------------------------------------------------------------------------- /example/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() 4 | 5 | def plugins = new Properties() 6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') 7 | if (pluginsFile.exists()) { 8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } 9 | } 10 | 11 | plugins.each { name, path -> 12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() 13 | include ":$name" 14 | project(":$name").projectDir = pluginDirectory 15 | } 16 | -------------------------------------------------------------------------------- /example/ios/Flutter/App.framework/App: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Flutter/App.framework/App -------------------------------------------------------------------------------- /example/ios/Flutter/App.framework/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/ios/Flutter/App.framework/flutter_assets/AssetManifest.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /example/ios/Flutter/App.framework/flutter_assets/FontManifest.json: -------------------------------------------------------------------------------- 1 | [{"fonts":[{"asset":"fonts/MaterialIcons-Regular.ttf"}],"family":"MaterialIcons"}] -------------------------------------------------------------------------------- /example/ios/Flutter/App.framework/flutter_assets/fonts/MaterialIcons-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Flutter/App.framework/flutter_assets/fonts/MaterialIcons-Regular.ttf -------------------------------------------------------------------------------- /example/ios/Flutter/App.framework/flutter_assets/isolate_snapshot_data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Flutter/App.framework/flutter_assets/isolate_snapshot_data -------------------------------------------------------------------------------- /example/ios/Flutter/App.framework/flutter_assets/kernel_blob.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Flutter/App.framework/flutter_assets/kernel_blob.bin -------------------------------------------------------------------------------- /example/ios/Flutter/App.framework/flutter_assets/vm_snapshot_data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Flutter/App.framework/flutter_assets/vm_snapshot_data -------------------------------------------------------------------------------- /example/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Flutter: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Flutter/Flutter.framework/Flutter -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/Flutter.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTER_H_ 6 | #define FLUTTER_FLUTTER_H_ 7 | 8 | /** 9 | BREAKING CHANGES: 10 | 11 | December 17, 2018: 12 | - Changed designated initializer on FlutterEngine 13 | 14 | October 5, 2018: 15 | - Removed FlutterNavigationController.h/.mm 16 | - Changed return signature of `FlutterDartHeadlessCodeRunner.run*` from void 17 | to bool 18 | - Removed HeadlessPlatformViewIOS 19 | - Marked FlutterDartHeadlessCodeRunner deprecated 20 | 21 | August 31, 2018: Marked -[FlutterDartProject 22 | initFromDefaultSourceForConfiguration] and FlutterStandardBigInteger as 23 | unavailable. 24 | 25 | July 26, 2018: Marked -[FlutterDartProject 26 | initFromDefaultSourceForConfiguration] deprecated. 27 | 28 | February 28, 2018: Removed "initWithFLXArchive" and 29 | "initWithFLXArchiveWithScriptSnapshot". 30 | 31 | January 15, 2018: Marked "initWithFLXArchive" and 32 | "initWithFLXArchiveWithScriptSnapshot" as unavailable following the 33 | deprecation from December 11, 2017. Scheduled to be removed on February 34 | 19, 2018. 35 | 36 | January 09, 2018: Deprecated "FlutterStandardBigInteger" and its use in 37 | "FlutterStandardMessageCodec" and "FlutterStandardMethodCodec". Scheduled to 38 | be marked as unavailable once the deprecation has been available on the 39 | flutter/flutter alpha branch for four weeks. "FlutterStandardBigInteger" was 40 | needed because the Dart 1.0 int type had no size limit. With Dart 2.0, the 41 | int type is a fixed-size, 64-bit signed integer. If you need to communicate 42 | larger integers, use NSString encoding instead. 43 | 44 | December 11, 2017: Deprecated "initWithFLXArchive" and 45 | "initWithFLXArchiveWithScriptSnapshot" and scheculed the same to be marked as 46 | unavailable on January 15, 2018. Instead, "initWithFlutterAssets" and 47 | "initWithFlutterAssetsWithScriptSnapshot" should be used. The reason for this 48 | change is that the FLX archive will be deprecated and replaced with a flutter 49 | assets directory containing the same files as the FLX did. 50 | 51 | November 29, 2017: Added a BREAKING CHANGES section. 52 | */ 53 | 54 | #include "FlutterAppDelegate.h" 55 | #include "FlutterBinaryMessenger.h" 56 | #include "FlutterCallbackCache.h" 57 | #include "FlutterChannels.h" 58 | #include "FlutterCodecs.h" 59 | #include "FlutterDartProject.h" 60 | #include "FlutterEngine.h" 61 | #include "FlutterHeadlessDartRunner.h" 62 | #include "FlutterMacros.h" 63 | #include "FlutterPlatformViews.h" 64 | #include "FlutterPlugin.h" 65 | #include "FlutterPluginAppLifeCycleDelegate.h" 66 | #include "FlutterTexture.h" 67 | #include "FlutterViewController.h" 68 | 69 | #endif // FLUTTER_FLUTTER_H_ 70 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterAppDelegate.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERAPPDELEGATE_H_ 6 | #define FLUTTER_FLUTTERAPPDELEGATE_H_ 7 | 8 | #import 9 | 10 | #include "FlutterMacros.h" 11 | #include "FlutterPlugin.h" 12 | 13 | /** 14 | * `UIApplicationDelegate` subclass for simple apps that want default behavior. 15 | * 16 | * This class implements the following behaviors: 17 | * * Status bar touches are forwarded to the key window's root view 18 | * `FlutterViewController`, in order to trigger scroll to top. 19 | * * Keeps the Flutter connection open in debug mode when the phone screen 20 | * locks. 21 | * 22 | * App delegates for Flutter applications are *not* required to inherit from 23 | * this class. Developers of custom app delegate classes should copy and paste 24 | * code as necessary from FlutterAppDelegate.mm. 25 | */ 26 | FLUTTER_EXPORT 27 | @interface FlutterAppDelegate 28 | : UIResponder 29 | 30 | @property(strong, nonatomic) UIWindow* window; 31 | 32 | @end 33 | 34 | #endif // FLUTTER_FLUTTERDARTPROJECT_H_ 35 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterBinaryMessenger.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERBINARYMESSENGER_H_ 6 | #define FLUTTER_FLUTTERBINARYMESSENGER_H_ 7 | 8 | #import 9 | 10 | #include "FlutterMacros.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | /** 14 | * A message reply callback. 15 | * 16 | * Used for submitting a binary reply back to a Flutter message sender. Also used 17 | * in for handling a binary message reply received from Flutter. 18 | * 19 | * @param reply The reply. 20 | */ 21 | typedef void (^FlutterBinaryReply)(NSData* _Nullable reply); 22 | 23 | /** 24 | * A strategy for handling incoming binary messages from Flutter and to send 25 | * asynchronous replies back to Flutter. 26 | * 27 | * @param message The message. 28 | * @param reply A callback for submitting an asynchronous reply to the sender. 29 | */ 30 | typedef void (^FlutterBinaryMessageHandler)(NSData* _Nullable message, FlutterBinaryReply reply); 31 | 32 | /** 33 | * A facility for communicating with the Flutter side using asynchronous message 34 | * passing with binary messages. 35 | * 36 | * Implementated by: 37 | * - `FlutterBasicMessageChannel`, which supports communication using structured 38 | * messages. 39 | * - `FlutterMethodChannel`, which supports communication using asynchronous 40 | * method calls. 41 | * - `FlutterEventChannel`, which supports commuication using event streams. 42 | */ 43 | FLUTTER_EXPORT 44 | @protocol FlutterBinaryMessenger 45 | /** 46 | * Sends a binary message to the Flutter side on the specified channel, expecting 47 | * no reply. 48 | * 49 | * @param channel The channel name. 50 | * @param message The message. 51 | */ 52 | - (void)sendOnChannel:(NSString*)channel message:(NSData* _Nullable)message; 53 | 54 | /** 55 | * Sends a binary message to the Flutter side on the specified channel, expecting 56 | * an asynchronous reply. 57 | * 58 | * @param channel The channel name. 59 | * @param message The message. 60 | * @param callback A callback for receiving a reply. 61 | */ 62 | - (void)sendOnChannel:(NSString*)channel 63 | message:(NSData* _Nullable)message 64 | binaryReply:(FlutterBinaryReply _Nullable)callback; 65 | 66 | /** 67 | * Registers a message handler for incoming binary messages from the Flutter side 68 | * on the specified channel. 69 | * 70 | * Replaces any existing handler. Use a `nil` handler for unregistering the 71 | * existing handler. 72 | * 73 | * @param channel The channel name. 74 | * @param handler The message handler. 75 | */ 76 | - (void)setMessageHandlerOnChannel:(NSString*)channel 77 | binaryMessageHandler:(FlutterBinaryMessageHandler _Nullable)handler; 78 | @end 79 | NS_ASSUME_NONNULL_END 80 | #endif // FLUTTER_FLUTTERBINARYMESSENGER_H_ 81 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterCallbackCache.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERCALLBACKCACHE_H_ 6 | #define FLUTTER_FLUTTERCALLBACKCACHE_H_ 7 | 8 | #import 9 | 10 | #include "FlutterMacros.h" 11 | 12 | /** 13 | * An object containing the result of `FlutterCallbackCache`'s `lookupCallbackInformation` 14 | * method. 15 | */ 16 | FLUTTER_EXPORT 17 | @interface FlutterCallbackInformation : NSObject 18 | /** 19 | * The name of the callback. 20 | */ 21 | @property(retain) NSString* callbackName; 22 | /** 23 | * The class name of the callback. 24 | */ 25 | @property(retain) NSString* callbackClassName; 26 | /** 27 | * The library path of the callback. 28 | */ 29 | @property(retain) NSString* callbackLibraryPath; 30 | @end 31 | 32 | /** 33 | * The cache containing callback information for spawning a 34 | * `FlutterHeadlessDartRunner`. 35 | */ 36 | FLUTTER_EXPORT 37 | @interface FlutterCallbackCache : NSObject 38 | /** 39 | * Returns the callback information for the given callback handle. 40 | * This callback information can be used when spawning a 41 | * `FlutterHeadlessDartRunner`. 42 | * 43 | * @param handle The handle for a callback, provided by the 44 | * Dart method `PluginUtilities.getCallbackHandle`. 45 | * @return A `FlutterCallbackInformation` object which contains the name of the 46 | * callback, the name of the class in which the callback is defined, and the 47 | * path of the library which contains the callback. If the provided handle is 48 | * invalid, nil is returned. 49 | */ 50 | + (FlutterCallbackInformation*)lookupCallbackInformation:(int64_t)handle; 51 | 52 | @end 53 | 54 | #endif // FLUTTER_FLUTTERCALLBACKCACHE_H_ 55 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterChannels.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERCHANNELS_H_ 6 | #define FLUTTER_FLUTTERCHANNELS_H_ 7 | 8 | #include "FlutterBinaryMessenger.h" 9 | #include "FlutterCodecs.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | /** 13 | * A message reply callback. 14 | * 15 | * Used for submitting a reply back to a Flutter message sender. Also used in 16 | * the dual capacity for handling a message reply received from Flutter. 17 | * 18 | * @param reply The reply. 19 | */ 20 | typedef void (^FlutterReply)(id _Nullable reply); 21 | 22 | /** 23 | * A strategy for handling incoming messages from Flutter and to send 24 | * asynchronous replies back to Flutter. 25 | * 26 | * @param message The message. 27 | * @param callback A callback for submitting a reply to the sender. 28 | */ 29 | typedef void (^FlutterMessageHandler)(id _Nullable message, FlutterReply callback); 30 | 31 | /** 32 | * A channel for communicating with the Flutter side using basic, asynchronous 33 | * message passing. 34 | */ 35 | FLUTTER_EXPORT 36 | @interface FlutterBasicMessageChannel : NSObject 37 | /** 38 | * Creates a `FlutterBasicMessageChannel` with the specified name and binary 39 | * messenger. 40 | * 41 | * The channel name logically identifies the channel; identically named channels 42 | * interfere with each other's communication. 43 | * 44 | * The binary messenger is a facility for sending raw, binary messages to the 45 | * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. 46 | * 47 | * The channel uses `FlutterStandardMessageCodec` to encode and decode messages. 48 | * 49 | * @param name The channel name. 50 | * @param messenger The binary messenger. 51 | */ 52 | + (instancetype)messageChannelWithName:(NSString*)name 53 | binaryMessenger:(NSObject*)messenger; 54 | 55 | /** 56 | * Creates a `FlutterBasicMessageChannel` with the specified name, binary 57 | * messenger, and message codec. 58 | * 59 | * The channel name logically identifies the channel; identically named channels 60 | * interfere with each other's communication. 61 | * 62 | * The binary messenger is a facility for sending raw, binary messages to the 63 | * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. 64 | * 65 | * @param name The channel name. 66 | * @param messenger The binary messenger. 67 | * @param codec The message codec. 68 | */ 69 | + (instancetype)messageChannelWithName:(NSString*)name 70 | binaryMessenger:(NSObject*)messenger 71 | codec:(NSObject*)codec; 72 | 73 | /** 74 | * Initializes a `FlutterBasicMessageChannel` with the specified name, binary 75 | * messenger, and message codec. 76 | * 77 | * The channel name logically identifies the channel; identically named channels 78 | * interfere with each other's communication. 79 | * 80 | * The binary messenger is a facility for sending raw, binary messages to the 81 | * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. 82 | * 83 | * @param name The channel name. 84 | * @param messenger The binary messenger. 85 | * @param codec The message codec. 86 | */ 87 | - (instancetype)initWithName:(NSString*)name 88 | binaryMessenger:(NSObject*)messenger 89 | codec:(NSObject*)codec; 90 | 91 | /** 92 | * Sends the specified message to the Flutter side, ignoring any reply. 93 | * 94 | * @param message The message. Must be supported by the codec of this 95 | * channel. 96 | */ 97 | - (void)sendMessage:(id _Nullable)message; 98 | 99 | /** 100 | * Sends the specified message to the Flutter side, expecting an asynchronous 101 | * reply. 102 | * 103 | * @param message The message. Must be supported by the codec of this channel. 104 | * @param callback A callback to be invoked with the message reply from Flutter. 105 | */ 106 | - (void)sendMessage:(id _Nullable)message reply:(FlutterReply _Nullable)callback; 107 | 108 | /** 109 | * Registers a message handler with this channel. 110 | * 111 | * Replaces any existing handler. Use a `nil` handler for unregistering the 112 | * existing handler. 113 | * 114 | * @param handler The message handler. 115 | */ 116 | - (void)setMessageHandler:(FlutterMessageHandler _Nullable)handler; 117 | @end 118 | 119 | /** 120 | * A method call result callback. 121 | * 122 | * Used for submitting a method call result back to a Flutter caller. Also used in 123 | * the dual capacity for handling a method call result received from Flutter. 124 | * 125 | * @param result The result. 126 | */ 127 | typedef void (^FlutterResult)(id _Nullable result); 128 | 129 | /** 130 | * A strategy for handling method calls. 131 | * 132 | * @param call The incoming method call. 133 | * @param result A callback to asynchronously submit the result of the call. 134 | * Invoke the callback with a `FlutterError` to indicate that the call failed. 135 | * Invoke the callback with `FlutterMethodNotImplemented` to indicate that the 136 | * method was unknown. Any other values, including `nil`, are interpreted as 137 | * successful results. 138 | */ 139 | typedef void (^FlutterMethodCallHandler)(FlutterMethodCall* call, FlutterResult result); 140 | 141 | /** 142 | * A constant used with `FlutterMethodCallHandler` to respond to the call of an 143 | * unknown method. 144 | */ 145 | FLUTTER_EXPORT 146 | extern NSObject const* FlutterMethodNotImplemented; 147 | 148 | /** 149 | * A channel for communicating with the Flutter side using invocation of 150 | * asynchronous methods. 151 | */ 152 | FLUTTER_EXPORT 153 | @interface FlutterMethodChannel : NSObject 154 | /** 155 | * Creates a `FlutterMethodChannel` with the specified name and binary messenger. 156 | * 157 | * The channel name logically identifies the channel; identically named channels 158 | * interfere with each other's communication. 159 | * 160 | * The binary messenger is a facility for sending raw, binary messages to the 161 | * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. 162 | * 163 | * The channel uses `FlutterStandardMethodCodec` to encode and decode method calls 164 | * and result envelopes. 165 | * 166 | * @param name The channel name. 167 | * @param messenger The binary messenger. 168 | */ 169 | + (instancetype)methodChannelWithName:(NSString*)name 170 | binaryMessenger:(NSObject*)messenger; 171 | 172 | /** 173 | * Creates a `FlutterMethodChannel` with the specified name, binary messenger, and 174 | * method codec. 175 | * 176 | * The channel name logically identifies the channel; identically named channels 177 | * interfere with each other's communication. 178 | * 179 | * The binary messenger is a facility for sending raw, binary messages to the 180 | * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. 181 | * 182 | * @param name The channel name. 183 | * @param messenger The binary messenger. 184 | * @param codec The method codec. 185 | */ 186 | + (instancetype)methodChannelWithName:(NSString*)name 187 | binaryMessenger:(NSObject*)messenger 188 | codec:(NSObject*)codec; 189 | 190 | /** 191 | * Initializes a `FlutterMethodChannel` with the specified name, binary messenger, 192 | * and method codec. 193 | * 194 | * The channel name logically identifies the channel; identically named channels 195 | * interfere with each other's communication. 196 | * 197 | * The binary messenger is a facility for sending raw, binary messages to the 198 | * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. 199 | * 200 | * @param name The channel name. 201 | * @param messenger The binary messenger. 202 | * @param codec The method codec. 203 | */ 204 | - (instancetype)initWithName:(NSString*)name 205 | binaryMessenger:(NSObject*)messenger 206 | codec:(NSObject*)codec; 207 | 208 | // clang-format off 209 | /** 210 | * Invokes the specified Flutter method with the specified arguments, expecting 211 | * no results. 212 | * 213 | * @see [MethodChannel.setMethodCallHandler](https://docs.flutter.io/flutter/services/MethodChannel/setMethodCallHandler.html) 214 | * 215 | * @param method The name of the method to invoke. 216 | * @param arguments The arguments. Must be a value supported by the codec of this 217 | * channel. 218 | */ 219 | // clang-format on 220 | - (void)invokeMethod:(NSString*)method arguments:(id _Nullable)arguments; 221 | 222 | /** 223 | * Invokes the specified Flutter method with the specified arguments, expecting 224 | * an asynchronous result. 225 | * 226 | * @param method The name of the method to invoke. 227 | * @param arguments The arguments. Must be a value supported by the codec of this 228 | * channel. 229 | * @param callback A callback that will be invoked with the asynchronous result. 230 | * The result will be a `FlutterError` instance, if the method call resulted 231 | * in an error on the Flutter side. Will be `FlutterMethodNotImplemented`, if 232 | * the method called was not implemented on the Flutter side. Any other value, 233 | * including `nil`, should be interpreted as successful results. 234 | */ 235 | - (void)invokeMethod:(NSString*)method 236 | arguments:(id _Nullable)arguments 237 | result:(FlutterResult _Nullable)callback 238 | // TODO: Add macOS support for replies once 239 | // https://github.com/flutter/flutter/issues/18852 is fixed. 240 | API_UNAVAILABLE(macos); 241 | 242 | /** 243 | * Registers a handler for method calls from the Flutter side. 244 | * 245 | * Replaces any existing handler. Use a `nil` handler for unregistering the 246 | * existing handler. 247 | * 248 | * @param handler The method call handler. 249 | */ 250 | - (void)setMethodCallHandler:(FlutterMethodCallHandler _Nullable)handler; 251 | @end 252 | 253 | /** 254 | * An event sink callback. 255 | * 256 | * @param event The event. 257 | */ 258 | typedef void (^FlutterEventSink)(id _Nullable event); 259 | 260 | /** 261 | * A strategy for exposing an event stream to the Flutter side. 262 | */ 263 | FLUTTER_EXPORT 264 | @protocol FlutterStreamHandler 265 | /** 266 | * Sets up an event stream and begin emitting events. 267 | * 268 | * Invoked when the first listener is registered with the Stream associated to 269 | * this channel on the Flutter side. 270 | * 271 | * @param arguments Arguments for the stream. 272 | * @param events A callback to asynchronously emit events. Invoke the 273 | * callback with a `FlutterError` to emit an error event. Invoke the 274 | * callback with `FlutterEndOfEventStream` to indicate that no more 275 | * events will be emitted. Any other value, including `nil` are emitted as 276 | * successful events. 277 | * @return A FlutterError instance, if setup fails. 278 | */ 279 | - (FlutterError* _Nullable)onListenWithArguments:(id _Nullable)arguments 280 | eventSink:(FlutterEventSink)events; 281 | 282 | /** 283 | * Tears down an event stream. 284 | * 285 | * Invoked when the last listener is deregistered from the Stream associated to 286 | * this channel on the Flutter side. 287 | * 288 | * The channel implementation may call this method with `nil` arguments 289 | * to separate a pair of two consecutive set up requests. Such request pairs 290 | * may occur during Flutter hot restart. 291 | * 292 | * @param arguments Arguments for the stream. 293 | * @return A FlutterError instance, if teardown fails. 294 | */ 295 | - (FlutterError* _Nullable)onCancelWithArguments:(id _Nullable)arguments; 296 | @end 297 | 298 | /** 299 | * A constant used with `FlutterEventChannel` to indicate end of stream. 300 | */ 301 | FLUTTER_EXPORT 302 | extern NSObject const* FlutterEndOfEventStream; 303 | 304 | /** 305 | * A channel for communicating with the Flutter side using event streams. 306 | */ 307 | FLUTTER_EXPORT 308 | @interface FlutterEventChannel : NSObject 309 | /** 310 | * Creates a `FlutterEventChannel` with the specified name and binary messenger. 311 | * 312 | * The channel name logically identifies the channel; identically named channels 313 | * interfere with each other's communication. 314 | * 315 | * The binary messenger is a facility for sending raw, binary messages to the 316 | * Flutter side. This protocol is implemented by `FlutterViewController`. 317 | * 318 | * The channel uses `FlutterStandardMethodCodec` to decode stream setup and 319 | * teardown requests, and to encode event envelopes. 320 | * 321 | * @param name The channel name. 322 | * @param messenger The binary messenger. 323 | */ 324 | + (instancetype)eventChannelWithName:(NSString*)name 325 | binaryMessenger:(NSObject*)messenger; 326 | 327 | /** 328 | * Creates a `FlutterEventChannel` with the specified name, binary messenger, 329 | * and method codec. 330 | * 331 | * The channel name logically identifies the channel; identically named channels 332 | * interfere with each other's communication. 333 | * 334 | * The binary messenger is a facility for sending raw, binary messages to the 335 | * Flutter side. This protocol is implemented by `FlutterViewController`. 336 | * 337 | * @param name The channel name. 338 | * @param messenger The binary messenger. 339 | * @param codec The method codec. 340 | */ 341 | + (instancetype)eventChannelWithName:(NSString*)name 342 | binaryMessenger:(NSObject*)messenger 343 | codec:(NSObject*)codec; 344 | 345 | /** 346 | * Initializes a `FlutterEventChannel` with the specified name, binary messenger, 347 | * and method codec. 348 | * 349 | * The channel name logically identifies the channel; identically named channels 350 | * interfere with each other's communication. 351 | * 352 | * The binary messenger is a facility for sending raw, binary messages to the 353 | * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. 354 | * 355 | * @param name The channel name. 356 | * @param messenger The binary messenger. 357 | * @param codec The method codec. 358 | */ 359 | - (instancetype)initWithName:(NSString*)name 360 | binaryMessenger:(NSObject*)messenger 361 | codec:(NSObject*)codec; 362 | /** 363 | * Registers a handler for stream setup requests from the Flutter side. 364 | * 365 | * Replaces any existing handler. Use a `nil` handler for unregistering the 366 | * existing handler. 367 | * 368 | * @param handler The stream handler. 369 | */ 370 | - (void)setStreamHandler:(NSObject* _Nullable)handler; 371 | @end 372 | NS_ASSUME_NONNULL_END 373 | 374 | #endif // FLUTTER_FLUTTERCHANNELS_H_ 375 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterCodecs.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERCODECS_H_ 6 | #define FLUTTER_FLUTTERCODECS_H_ 7 | 8 | #import 9 | #include "FlutterMacros.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /** 14 | A message encoding/decoding mechanism. 15 | */ 16 | FLUTTER_EXPORT 17 | @protocol FlutterMessageCodec 18 | /** 19 | * Returns a shared instance of this `FlutterMessageCodec`. 20 | */ 21 | + (instancetype)sharedInstance; 22 | 23 | /** 24 | * Encodes the specified message into binary. 25 | * 26 | * @param message The message. 27 | * @return The binary encoding, or `nil`, if `message` was `nil`. 28 | */ 29 | - (NSData* _Nullable)encode:(id _Nullable)message; 30 | 31 | /** 32 | * Decodes the specified message from binary. 33 | * 34 | * @param message The message. 35 | * @return The decoded message, or `nil`, if `message` was `nil`. 36 | */ 37 | - (id _Nullable)decode:(NSData* _Nullable)message; 38 | @end 39 | 40 | /** 41 | * A `FlutterMessageCodec` using unencoded binary messages, represented as 42 | * `NSData` instances. 43 | * 44 | * This codec is guaranteed to be compatible with the corresponding 45 | * [BinaryCodec](https://docs.flutter.io/flutter/services/BinaryCodec-class.html) 46 | * on the Dart side. These parts of the Flutter SDK are evolved synchronously. 47 | * 48 | * On the Dart side, messages are represented using `ByteData`. 49 | */ 50 | FLUTTER_EXPORT 51 | @interface FlutterBinaryCodec : NSObject 52 | @end 53 | 54 | /** 55 | * A `FlutterMessageCodec` using UTF-8 encoded `NSString` messages. 56 | * 57 | * This codec is guaranteed to be compatible with the corresponding 58 | * [StringCodec](https://docs.flutter.io/flutter/services/StringCodec-class.html) 59 | * on the Dart side. These parts of the Flutter SDK are evolved synchronously. 60 | */ 61 | FLUTTER_EXPORT 62 | @interface FlutterStringCodec : NSObject 63 | @end 64 | 65 | /** 66 | * A `FlutterMessageCodec` using UTF-8 encoded JSON messages. 67 | * 68 | * This codec is guaranteed to be compatible with the corresponding 69 | * [JSONMessageCodec](https://docs.flutter.io/flutter/services/JSONMessageCodec-class.html) 70 | * on the Dart side. These parts of the Flutter SDK are evolved synchronously. 71 | * 72 | * Supports values accepted by `NSJSONSerialization` plus top-level 73 | * `nil`, `NSNumber`, and `NSString`. 74 | * 75 | * On the Dart side, JSON messages are handled by the JSON facilities of the 76 | * [`dart:convert`](https://api.dartlang.org/stable/dart-convert/JSON-constant.html) 77 | * package. 78 | */ 79 | FLUTTER_EXPORT 80 | @interface FlutterJSONMessageCodec : NSObject 81 | @end 82 | 83 | /** 84 | * A writer of the Flutter standard binary encoding. 85 | * 86 | * See `FlutterStandardMessageCodec` for details on the encoding. 87 | * 88 | * The encoding is extensible via subclasses overriding `writeValue`. 89 | */ 90 | FLUTTER_EXPORT 91 | @interface FlutterStandardWriter : NSObject 92 | - (instancetype)initWithData:(NSMutableData*)data; 93 | - (void)writeByte:(UInt8)value; 94 | - (void)writeBytes:(const void*)bytes length:(NSUInteger)length; 95 | - (void)writeData:(NSData*)data; 96 | - (void)writeSize:(UInt32)size; 97 | - (void)writeAlignment:(UInt8)alignment; 98 | - (void)writeUTF8:(NSString*)value; 99 | - (void)writeValue:(id)value; 100 | @end 101 | 102 | /** 103 | * A reader of the Flutter standard binary encoding. 104 | * 105 | * See `FlutterStandardMessageCodec` for details on the encoding. 106 | * 107 | * The encoding is extensible via subclasses overriding `readValueOfType`. 108 | */ 109 | FLUTTER_EXPORT 110 | @interface FlutterStandardReader : NSObject 111 | - (instancetype)initWithData:(NSData*)data; 112 | - (BOOL)hasMore; 113 | - (UInt8)readByte; 114 | - (void)readBytes:(void*)destination length:(NSUInteger)length; 115 | - (NSData*)readData:(NSUInteger)length; 116 | - (UInt32)readSize; 117 | - (void)readAlignment:(UInt8)alignment; 118 | - (NSString*)readUTF8; 119 | - (nullable id)readValue; 120 | - (nullable id)readValueOfType:(UInt8)type; 121 | @end 122 | 123 | /** 124 | * A factory of compatible reader/writer instances using the Flutter standard 125 | * binary encoding or extensions thereof. 126 | */ 127 | FLUTTER_EXPORT 128 | @interface FlutterStandardReaderWriter : NSObject 129 | - (FlutterStandardWriter*)writerWithData:(NSMutableData*)data; 130 | - (FlutterStandardReader*)readerWithData:(NSData*)data; 131 | @end 132 | 133 | /** 134 | * A `FlutterMessageCodec` using the Flutter standard binary encoding. 135 | * 136 | * This codec is guaranteed to be compatible with the corresponding 137 | * [StandardMessageCodec](https://docs.flutter.io/flutter/services/StandardMessageCodec-class.html) 138 | * on the Dart side. These parts of the Flutter SDK are evolved synchronously. 139 | * 140 | * Supported messages are acyclic values of these forms: 141 | * 142 | * - `nil` or `NSNull` 143 | * - `NSNumber` (including their representation of Boolean values) 144 | * - `NSString` 145 | * - `FlutterStandardTypedData` 146 | * - `NSArray` of supported values 147 | * - `NSDictionary` with supported keys and values 148 | * 149 | * On the Dart side, these values are represented as follows: 150 | * 151 | * - `nil` or `NSNull`: null 152 | * - `NSNumber`: `bool`, `int`, or `double`, depending on the contained value. 153 | * - `NSString`: `String` 154 | * - `FlutterStandardTypedData`: `Uint8List`, `Int32List`, `Int64List`, or `Float64List` 155 | * - `NSArray`: `List` 156 | * - `NSDictionary`: `Map` 157 | */ 158 | FLUTTER_EXPORT 159 | @interface FlutterStandardMessageCodec : NSObject 160 | + (instancetype)codecWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter; 161 | @end 162 | 163 | /** 164 | Command object representing a method call on a `FlutterMethodChannel`. 165 | */ 166 | FLUTTER_EXPORT 167 | @interface FlutterMethodCall : NSObject 168 | /** 169 | * Creates a method call for invoking the specified named method with the 170 | * specified arguments. 171 | * 172 | * @param method the name of the method to call. 173 | * @param arguments the arguments value. 174 | */ 175 | + (instancetype)methodCallWithMethodName:(NSString*)method arguments:(id _Nullable)arguments; 176 | 177 | /** 178 | * The method name. 179 | */ 180 | @property(readonly, nonatomic) NSString* method; 181 | 182 | /** 183 | * The arguments. 184 | */ 185 | @property(readonly, nonatomic, nullable) id arguments; 186 | @end 187 | 188 | /** 189 | * Error object representing an unsuccessful outcome of invoking a method 190 | * on a `FlutterMethodChannel`, or an error event on a `FlutterEventChannel`. 191 | */ 192 | FLUTTER_EXPORT 193 | @interface FlutterError : NSObject 194 | /** 195 | * Creates a `FlutterError` with the specified error code, message, and details. 196 | * 197 | * @param code An error code string for programmatic use. 198 | * @param message A human-readable error message. 199 | * @param details Custom error details. 200 | */ 201 | + (instancetype)errorWithCode:(NSString*)code 202 | message:(NSString* _Nullable)message 203 | details:(id _Nullable)details; 204 | /** 205 | The error code. 206 | */ 207 | @property(readonly, nonatomic) NSString* code; 208 | 209 | /** 210 | The error message. 211 | */ 212 | @property(readonly, nonatomic, nullable) NSString* message; 213 | 214 | /** 215 | The error details. 216 | */ 217 | @property(readonly, nonatomic, nullable) id details; 218 | @end 219 | 220 | /** 221 | * Type of numeric data items encoded in a `FlutterStandardDataType`. 222 | * 223 | * - FlutterStandardDataTypeUInt8: plain bytes 224 | * - FlutterStandardDataTypeInt32: 32-bit signed integers 225 | * - FlutterStandardDataTypeInt64: 64-bit signed integers 226 | * - FlutterStandardDataTypeFloat64: 64-bit floats 227 | */ 228 | typedef NS_ENUM(NSInteger, FlutterStandardDataType) { 229 | FlutterStandardDataTypeUInt8, 230 | FlutterStandardDataTypeInt32, 231 | FlutterStandardDataTypeInt64, 232 | FlutterStandardDataTypeFloat64, 233 | }; 234 | 235 | /** 236 | * A byte buffer holding `UInt8`, `SInt32`, `SInt64`, or `Float64` values, used 237 | * with `FlutterStandardMessageCodec` and `FlutterStandardMethodCodec`. 238 | * 239 | * Two's complement encoding is used for signed integers. IEEE754 240 | * double-precision representation is used for floats. The platform's native 241 | * endianness is assumed. 242 | */ 243 | FLUTTER_EXPORT 244 | @interface FlutterStandardTypedData : NSObject 245 | /** 246 | * Creates a `FlutterStandardTypedData` which interprets the specified data 247 | * as plain bytes. 248 | * 249 | * @param data the byte data. 250 | */ 251 | + (instancetype)typedDataWithBytes:(NSData*)data; 252 | 253 | /** 254 | * Creates a `FlutterStandardTypedData` which interprets the specified data 255 | * as 32-bit signed integers. 256 | * 257 | * @param data the byte data. The length must be divisible by 4. 258 | */ 259 | + (instancetype)typedDataWithInt32:(NSData*)data; 260 | 261 | /** 262 | * Creates a `FlutterStandardTypedData` which interprets the specified data 263 | * as 64-bit signed integers. 264 | * 265 | * @param data the byte data. The length must be divisible by 8. 266 | */ 267 | + (instancetype)typedDataWithInt64:(NSData*)data; 268 | 269 | /** 270 | * Creates a `FlutterStandardTypedData` which interprets the specified data 271 | * as 64-bit floats. 272 | * 273 | * @param data the byte data. The length must be divisible by 8. 274 | */ 275 | + (instancetype)typedDataWithFloat64:(NSData*)data; 276 | 277 | /** 278 | * The raw underlying data buffer. 279 | */ 280 | @property(readonly, nonatomic) NSData* data; 281 | 282 | /** 283 | * The type of the encoded values. 284 | */ 285 | @property(readonly, nonatomic) FlutterStandardDataType type; 286 | 287 | /** 288 | * The number of value items encoded. 289 | */ 290 | @property(readonly, nonatomic) UInt32 elementCount; 291 | 292 | /** 293 | * The number of bytes used by the encoding of a single value item. 294 | */ 295 | @property(readonly, nonatomic) UInt8 elementSize; 296 | @end 297 | 298 | /** 299 | * An arbitrarily large integer value, used with `FlutterStandardMessageCodec` 300 | * and `FlutterStandardMethodCodec`. 301 | */ 302 | FLUTTER_EXPORT 303 | FLUTTER_UNAVAILABLE("Unavailable on 2018-08-31. Deprecated on 2018-01-09. " 304 | "FlutterStandardBigInteger was needed because the Dart 1.0 int type had no " 305 | "size limit. With Dart 2.0, the int type is a fixed-size, 64-bit signed " 306 | "integer. If you need to communicate larger integers, use NSString encoding " 307 | "instead.") 308 | @interface FlutterStandardBigInteger : NSObject 309 | @end 310 | 311 | /** 312 | * A codec for method calls and enveloped results. 313 | * 314 | * Method calls are encoded as binary messages with enough structure that the 315 | * codec can extract a method name `NSString` and an arguments `NSObject`, 316 | * possibly `nil`. These data items are used to populate a `FlutterMethodCall`. 317 | * 318 | * Result envelopes are encoded as binary messages with enough structure that 319 | * the codec can determine whether the result was successful or an error. In 320 | * the former case, the codec can extract the result `NSObject`, possibly `nil`. 321 | * In the latter case, the codec can extract an error code `NSString`, a 322 | * human-readable `NSString` error message (possibly `nil`), and a custom 323 | * error details `NSObject`, possibly `nil`. These data items are used to 324 | * populate a `FlutterError`. 325 | */ 326 | FLUTTER_EXPORT 327 | @protocol FlutterMethodCodec 328 | /** 329 | * Provides access to a shared instance this codec. 330 | * 331 | * @return The shared instance. 332 | */ 333 | + (instancetype)sharedInstance; 334 | 335 | /** 336 | * Encodes the specified method call into binary. 337 | * 338 | * @param methodCall The method call. The arguments value 339 | * must be supported by this codec. 340 | * @return The binary encoding. 341 | */ 342 | - (NSData*)encodeMethodCall:(FlutterMethodCall*)methodCall; 343 | 344 | /** 345 | * Decodes the specified method call from binary. 346 | * 347 | * @param methodCall The method call to decode. 348 | * @return The decoded method call. 349 | */ 350 | - (FlutterMethodCall*)decodeMethodCall:(NSData*)methodCall; 351 | 352 | /** 353 | * Encodes the specified successful result into binary. 354 | * 355 | * @param result The result. Must be a value supported by this codec. 356 | * @return The binary encoding. 357 | */ 358 | - (NSData*)encodeSuccessEnvelope:(id _Nullable)result; 359 | 360 | /** 361 | * Encodes the specified error result into binary. 362 | * 363 | * @param error The error object. The error details value must be supported 364 | * by this codec. 365 | * @return The binary encoding. 366 | */ 367 | - (NSData*)encodeErrorEnvelope:(FlutterError*)error; 368 | 369 | /** 370 | * Deccodes the specified result envelope from binary. 371 | * 372 | * @param envelope The error object. 373 | * @return The result value, if the envelope represented a successful result, 374 | * or a `FlutterError` instance, if not. 375 | */ 376 | - (id _Nullable)decodeEnvelope:(NSData*)envelope; 377 | @end 378 | 379 | /** 380 | * A `FlutterMethodCodec` using UTF-8 encoded JSON method calls and result 381 | * envelopes. 382 | * 383 | * This codec is guaranteed to be compatible with the corresponding 384 | * [JSONMethodCodec](https://docs.flutter.io/flutter/services/JSONMethodCodec-class.html) 385 | * on the Dart side. These parts of the Flutter SDK are evolved synchronously. 386 | * 387 | * Values supported as methods arguments and result payloads are 388 | * those supported as top-level or leaf values by `FlutterJSONMessageCodec`. 389 | */ 390 | FLUTTER_EXPORT 391 | @interface FlutterJSONMethodCodec : NSObject 392 | @end 393 | 394 | /** 395 | * A `FlutterMethodCodec` using the Flutter standard binary encoding. 396 | * 397 | * This codec is guaranteed to be compatible with the corresponding 398 | * [StandardMethodCodec](https://docs.flutter.io/flutter/services/StandardMethodCodec-class.html) 399 | * on the Dart side. These parts of the Flutter SDK are evolved synchronously. 400 | * 401 | * Values supported as method arguments and result payloads are those supported by 402 | * `FlutterStandardMessageCodec`. 403 | */ 404 | FLUTTER_EXPORT 405 | @interface FlutterStandardMethodCodec : NSObject 406 | + (instancetype)codecWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter; 407 | @end 408 | 409 | NS_ASSUME_NONNULL_END 410 | 411 | #endif // FLUTTER_FLUTTERCODECS_H_ 412 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterDartProject.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERDARTPROJECT_H_ 6 | #define FLUTTER_FLUTTERDARTPROJECT_H_ 7 | 8 | #import 9 | 10 | #include "FlutterMacros.h" 11 | 12 | /** 13 | * A set of Flutter and Dart assets used by a `FlutterEngine` to initialize execution. 14 | */ 15 | FLUTTER_EXPORT 16 | @interface FlutterDartProject : NSObject 17 | 18 | /** 19 | * Initializes a Flutter Dart project from a bundle. 20 | */ 21 | - (instancetype)initWithPrecompiledDartBundle:(NSBundle*)bundle NS_DESIGNATED_INITIALIZER; 22 | 23 | /** 24 | * Unavailable - use `init` instead. 25 | */ 26 | - (instancetype)initFromDefaultSourceForConfiguration FLUTTER_UNAVAILABLE("Use -init instead."); 27 | 28 | /** 29 | * Returns the file name for the given asset. If the bundle with the identifier 30 | * "io.flutter.flutter.app" exists, it will try use that bundle; otherwise, it 31 | * will use the main bundle. To specify a different bundle, use 32 | * `-lookupKeyForAsset:asset:fromBundle`. 33 | * 34 | * @param asset The name of the asset. The name can be hierarchical. 35 | * @return the file name to be used for lookup in the main bundle. 36 | */ 37 | + (NSString*)lookupKeyForAsset:(NSString*)asset; 38 | 39 | /** 40 | * Returns the file name for the given asset. 41 | * The returned file name can be used to access the asset in the supplied bundle. 42 | * 43 | * @param asset The name of the asset. The name can be hierarchical. 44 | * @param bundle The `NSBundle` to use for looking up the asset. 45 | * @return the file name to be used for lookup in the main bundle. 46 | */ 47 | + (NSString*)lookupKeyForAsset:(NSString*)asset fromBundle:(NSBundle*)bundle; 48 | 49 | /** 50 | * Returns the file name for the given asset which originates from the specified package. 51 | * The returned file name can be used to access the asset in the application's main bundle. 52 | * 53 | * @param asset The name of the asset. The name can be hierarchical. 54 | * @param package The name of the package from which the asset originates. 55 | * @return the file name to be used for lookup in the main bundle. 56 | */ 57 | + (NSString*)lookupKeyForAsset:(NSString*)asset fromPackage:(NSString*)package; 58 | 59 | /** 60 | * Returns the file name for the given asset which originates from the specified package. 61 | * The returned file name can be used to access the asset in the specified bundle. 62 | * 63 | * @param asset The name of the asset. The name can be hierarchical. 64 | * @param package The name of the package from which the asset originates. 65 | * @param bundle The bundle to use when doing the lookup. 66 | * @return the file name to be used for lookup in the main bundle. 67 | */ 68 | + (NSString*)lookupKeyForAsset:(NSString*)asset 69 | fromPackage:(NSString*)package 70 | fromBundle:(NSBundle*)bundle; 71 | 72 | /** 73 | * Returns the default identifier for the bundle where we expect to find the Flutter Dart 74 | * application. 75 | */ 76 | + (NSString*)defaultBundleIdentifier; 77 | 78 | @end 79 | 80 | #endif // FLUTTER_FLUTTERDARTPROJECT_H_ 81 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterEngine.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERENGINE_H_ 6 | #define FLUTTER_FLUTTERENGINE_H_ 7 | 8 | #import 9 | #import 10 | 11 | #include "FlutterBinaryMessenger.h" 12 | #include "FlutterDartProject.h" 13 | #include "FlutterMacros.h" 14 | #include "FlutterPlugin.h" 15 | #include "FlutterTexture.h" 16 | 17 | @class FlutterViewController; 18 | 19 | /** 20 | * The FlutterEngine class coordinates a single instance of execution for a 21 | * `FlutterDartProject`. It may have zero or one `FlutterViewController` at a 22 | * time, which can be specified via `-setViewController:`. 23 | * `FlutterViewController`'s `initWithEngine` initializer will automatically call 24 | * `-setViewController:` for itself. 25 | * 26 | * A FlutterEngine can be created independently of a `FlutterViewController` for 27 | * headless execution. It can also persist across the lifespan of multiple 28 | * `FlutterViewController` instances to maintain state and/or asynchronous tasks 29 | * (such as downloading a large file). 30 | * 31 | * Alternatively, you can simply create a new `FlutterViewController` with only a 32 | * `FlutterDartProject`. That `FlutterViewController` will internally manage its 33 | * own instance of a FlutterEngine, but will not guarantee survival of the engine 34 | * beyond the life of the ViewController. 35 | * 36 | * A newly initialized FlutterEngine will not actually run a Dart Isolate until 37 | * either `-runWithEntrypoint:` or `-runWithEntrypoint:libraryURI` is invoked. 38 | * One of these methods must be invoked before calling `-setViewController:`. 39 | */ 40 | FLUTTER_EXPORT 41 | @interface FlutterEngine : NSObject 42 | /** 43 | * Initialize this FlutterEngine with a `FlutterDartProject`. 44 | * 45 | * If the FlutterDartProject is not specified, the FlutterEngine will attempt to locate 46 | * the project in a default location (the flutter_assets folder in the iOS application 47 | * bundle). 48 | * 49 | * A newly initialized engine will not run the `FlutterDartProject` until either 50 | * `-runWithEntrypoint:` or `-runWithEntrypoint:libraryURI:` is called. 51 | * 52 | * FlutterEngine created with this method will have allowHeadlessExecution set to `YES`. 53 | * This means that the engine will continue to run regardless of whether a `FlutterViewController` 54 | * is attached to it or not, until `-destroyContext:` is called or the process finishes. 55 | * 56 | * @param labelPrefix The label prefix used to identify threads for this instance. Should 57 | * be unique across FlutterEngine instances, and is used in instrumentation to label 58 | * the threads used by this FlutterEngine. 59 | * @param projectOrNil The `FlutterDartProject` to run. 60 | */ 61 | - (instancetype)initWithName:(NSString*)labelPrefix project:(FlutterDartProject*)projectOrNil; 62 | 63 | /** 64 | * Initialize this FlutterEngine with a `FlutterDartProject`. 65 | * 66 | * If the FlutterDartProject is not specified, the FlutterEngine will attempt to locate 67 | * the project in a default location (the flutter_assets folder in the iOS application 68 | * bundle). 69 | * 70 | * A newly initialized engine will not run the `FlutterDartProject` until either 71 | * `-runWithEntrypoint:` or `-runWithEntrypoint:libraryURI:` is called. 72 | * 73 | * @param labelPrefix The label prefix used to identify threads for this instance. Should 74 | * be unique across FlutterEngine instances, and is used in instrumentation to label 75 | * the threads used by this FlutterEngine. 76 | * @param projectOrNil The `FlutterDartProject` to run. 77 | * @param allowHeadlessExecution Whether or not to allow this instance to continue 78 | * running after passing a nil `FlutterViewController` to `-setViewController:`. 79 | */ 80 | - (instancetype)initWithName:(NSString*)labelPrefix 81 | project:(FlutterDartProject*)projectOrNil 82 | allowHeadlessExecution:(BOOL)allowHeadlessExecution NS_DESIGNATED_INITIALIZER; 83 | 84 | /** 85 | * The default initializer is not available for this object. 86 | * Callers must use `-[FlutterEngine initWithName:project:]`. 87 | */ 88 | - (instancetype)init NS_UNAVAILABLE; 89 | 90 | + (instancetype)new NS_UNAVAILABLE; 91 | 92 | /** 93 | * Runs a Dart program on an Isolate from the main Dart library (i.e. the library that 94 | * contains `main()`). 95 | * 96 | * The first call to this method will create a new Isolate. Subsequent calls will return 97 | * immediately. 98 | * 99 | * @param entrypoint The name of a top-level function from the same Dart 100 | * library that contains the app's main() function. If this is nil, it will 101 | * default to `main()`. If it is not the app's main() function, that function 102 | * must be decorated with `@pragma(vm:entry-point)` to ensure the method is not 103 | * tree-shaken by the Dart compiler. 104 | * @return YES if the call succeeds in creating and running a Flutter Engine instance; NO otherwise. 105 | */ 106 | - (BOOL)runWithEntrypoint:(NSString*)entrypoint; 107 | 108 | /** 109 | * Runs a Dart program on an Isolate using the specified entrypoint and Dart library, 110 | * which may not be the same as the library containing the Dart program's `main()` function. 111 | * 112 | * The first call to this method will create a new Isolate. Subsequent calls will return 113 | * immediately. 114 | * 115 | * @param entrypoint The name of a top-level function from a Dart library. If nil, this will 116 | * default to `main()`. If it is not the app's main() function, that function 117 | * must be decorated with `@pragma(vm:entry-point)` to ensure the method is not 118 | * tree-shaken by the Dart compiler. 119 | * @param uri The URI of the Dart library which contains the entrypoint method. IF nil, 120 | * this will default to the same library as the `main()` function in the Dart program. 121 | * @return YES if the call succeeds in creating and running a Flutter Engine instance; NO otherwise. 122 | */ 123 | - (BOOL)runWithEntrypoint:(NSString*)entrypoint libraryURI:(NSString*)uri; 124 | 125 | /** 126 | * Destroy running context for an engine. 127 | * 128 | * This method can be used to force the FlutterEngine object to release all resources. 129 | * After sending this message, the object will be in an unusable state until it is deallocated. 130 | * Accessing properties or sending messages to it will result in undefined behavior or runtime 131 | * errors. 132 | */ 133 | - (void)destroyContext; 134 | 135 | /** 136 | * Ensures that Flutter will generate a semantics tree. 137 | * 138 | * This is enabled by default if certain accessibility services are turned on by 139 | * the user, or when using a Simulator. This method allows a user to turn 140 | * semantics on when they would not ordinarily be generated and the performance 141 | * overhead is not a concern, e.g. for UI testing. Note that semantics should 142 | * never be programmatically turned off, as it would potentially disable 143 | * accessibility services an end user has requested. 144 | * 145 | * This method must only be called after launching the engine via 146 | * `-runWithEntrypoint:` or `-runWithEntryPoint:libraryURI`. 147 | * 148 | * Although this method returns synchronously, it does not guarantee that a 149 | * semantics tree is actually available when the method returns. It 150 | * synchronously ensures that the next frame the Flutter framework creates will 151 | * have a semantics tree. 152 | * 153 | * You can subscribe to semantics updates via `NSNotificationCenter` by adding 154 | * an observer for the name `FlutterSemanticsUpdateNotification`. The `object` 155 | * parameter will be the `FlutterViewController` associated with the semantics 156 | * update. This will asynchronously fire after a semantics tree has actually 157 | * built (which may be some time after the frame has been rendered). 158 | */ 159 | - (void)ensureSemanticsEnabled; 160 | 161 | /** 162 | * Sets the `FlutterViewController` for this instance. The FlutterEngine must be 163 | * running (e.g. a successful call to `-runWithEntrypoint:` or `-runWithEntrypoint:libraryURI`) 164 | * before calling this method. Callers may pass nil to remove the viewController 165 | * and have the engine run headless in the current process. 166 | * 167 | * A FlutterEngine can only have one `FlutterViewController` at a time. If there is 168 | * already a `FlutterViewController` associated with this instance, this method will replace 169 | * the engine's current viewController with the newly specified one. 170 | * 171 | * Setting the viewController will signal the engine to start animations and drawing, and unsetting 172 | * it will signal the engine to stop animations and drawing. However, neither will impact the state 173 | * of the Dart program's execution. 174 | */ 175 | @property(nonatomic, weak) FlutterViewController* viewController; 176 | 177 | /** 178 | * The `FlutterMethodChannel` used for localization related platform messages, such as 179 | * setting the locale. 180 | */ 181 | @property(nonatomic, readonly) FlutterMethodChannel* localizationChannel; 182 | /** 183 | * The `FlutterMethodChannel` used for navigation related platform messages. 184 | * 185 | * @see [Navigation 186 | * Channel](https://docs.flutter.io/flutter/services/SystemChannels/navigation-constant.html) 187 | * @see [Navigator Widget](https://docs.flutter.io/flutter/widgets/Navigator-class.html) 188 | */ 189 | @property(nonatomic, readonly) FlutterMethodChannel* navigationChannel; 190 | 191 | /** 192 | * The `FlutterMethodChannel` used for core platform messages, such as 193 | * information about the screen orientation. 194 | */ 195 | @property(nonatomic, readonly) FlutterMethodChannel* platformChannel; 196 | 197 | /** 198 | * The `FlutterMethodChannel` used to communicate text input events to the 199 | * Dart Isolate. 200 | * 201 | * @see [Text Input 202 | * Channel](https://docs.flutter.io/flutter/services/SystemChannels/textInput-constant.html) 203 | */ 204 | @property(nonatomic, readonly) FlutterMethodChannel* textInputChannel; 205 | 206 | /** 207 | * The `FlutterBasicMessageChannel` used to communicate app lifecycle events 208 | * to the Dart Isolate. 209 | * 210 | * @see [Lifecycle 211 | * Channel](https://docs.flutter.io/flutter/services/SystemChannels/lifecycle-constant.html) 212 | */ 213 | @property(nonatomic, readonly) FlutterBasicMessageChannel* lifecycleChannel; 214 | 215 | /** 216 | * The `FlutterBasicMessageChannel` used for communicating system events, such as 217 | * memory pressure events. 218 | * 219 | * @see [System 220 | * Channel](https://docs.flutter.io/flutter/services/SystemChannels/system-constant.html) 221 | */ 222 | @property(nonatomic, readonly) FlutterBasicMessageChannel* systemChannel; 223 | 224 | /** 225 | * The `FlutterBasicMessageChannel` used for communicating user settings such as 226 | * clock format and text scale. 227 | */ 228 | @property(nonatomic, readonly) FlutterBasicMessageChannel* settingsChannel; 229 | 230 | /** 231 | * The `NSURL` of the observatory for the service isolate. 232 | * 233 | * This is only set in debug and profile runtime modes, and only after the 234 | * observatory service is ready. In release mode or before the observatory has 235 | * started, it returns `nil`. 236 | */ 237 | @property(nonatomic, readonly) NSURL* observatoryUrl; 238 | 239 | /** 240 | * The `FlutterBinaryMessenger` associated with this FlutterEngine (used for communicating with 241 | * channels). 242 | */ 243 | @property(nonatomic, readonly) NSObject* binaryMessenger; 244 | 245 | /** 246 | * The UI Isolate ID of of the engine. 247 | * 248 | * This property will be nil if the engine is not running. 249 | */ 250 | @property(nonatomic, readonly, copy) NSString* isolateId; 251 | 252 | @end 253 | 254 | #endif // FLUTTER_FLUTTERENGINE_H_ 255 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterHeadlessDartRunner.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERHEADLESSDARTRUNNER_H_ 6 | #define FLUTTER_FLUTTERHEADLESSDARTRUNNER_H_ 7 | 8 | #import 9 | 10 | #include "FlutterBinaryMessenger.h" 11 | #include "FlutterDartProject.h" 12 | #include "FlutterEngine.h" 13 | #include "FlutterMacros.h" 14 | 15 | /** 16 | * A callback for when FlutterHeadlessDartRunner has attempted to start a Dart 17 | * Isolate in the background. 18 | * 19 | * @param success YES if the Isolate was started and run successfully, NO 20 | * otherwise. 21 | */ 22 | typedef void (^FlutterHeadlessDartRunnerCallback)(BOOL success); 23 | 24 | /** 25 | * The FlutterHeadlessDartRunner runs Flutter Dart code with a null rasterizer, 26 | * and no native drawing surface. It is appropriate for use in running Dart 27 | * code e.g. in the background from a plugin. 28 | * 29 | * Most callers should prefer using `FlutterEngine` directly; this interface exists 30 | * for legacy support. 31 | */ 32 | FLUTTER_EXPORT 33 | FLUTTER_DEPRECATED("FlutterEngine should be used rather than FlutterHeadlessDartRunner") 34 | @interface FlutterHeadlessDartRunner : FlutterEngine 35 | 36 | /** 37 | * Iniitalize this FlutterHeadlessDartRunner with a `FlutterDartProject`. 38 | * 39 | * If the FlutterDartProject is not specified, the FlutterHeadlessDartRunner will attempt to locate 40 | * the project in a default location. 41 | * 42 | * A newly initialized engine will not run the `FlutterDartProject` until either 43 | * `-runWithEntrypoint:` or `-runWithEntrypoint:libraryURI` is called. 44 | * 45 | * @param labelPrefix The label prefix used to identify threads for this instance. Should 46 | * be unique across FlutterEngine instances 47 | * @param projectOrNil The `FlutterDartProject` to run. 48 | */ 49 | - (instancetype)initWithName:(NSString*)labelPrefix project:(FlutterDartProject*)projectOrNil; 50 | 51 | /** 52 | * Iniitalize this FlutterHeadlessDartRunner with a `FlutterDartProject`. 53 | * 54 | * If the FlutterDartProject is not specified, the FlutterHeadlessDartRunner will attempt to locate 55 | * the project in a default location. 56 | * 57 | * A newly initialized engine will not run the `FlutterDartProject` until either 58 | * `-runWithEntrypoint:` or `-runWithEntrypoint:libraryURI` is called. 59 | * 60 | * @param labelPrefix The label prefix used to identify threads for this instance. Should 61 | * be unique across FlutterEngine instances 62 | * @param projectOrNil The `FlutterDartProject` to run. 63 | * @param allowHeadlessExecution Must be set to `YES`. 64 | */ 65 | - (instancetype)initWithName:(NSString*)labelPrefix 66 | project:(FlutterDartProject*)projectOrNil 67 | allowHeadlessExecution:(BOOL)allowHeadlessExecution NS_DESIGNATED_INITIALIZER; 68 | 69 | /** 70 | * Not recommended for use - will initialize with a default label ("io.flutter.headless") 71 | * and the default FlutterDartProject. 72 | */ 73 | - (instancetype)init; 74 | 75 | @end 76 | 77 | #endif // FLUTTER_FLUTTERHEADLESSDARTRUNNER_H_ 78 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterMacros.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERMACROS_H_ 6 | #define FLUTTER_FLUTTERMACROS_H_ 7 | 8 | #if defined(FLUTTER_FRAMEWORK) 9 | 10 | #define FLUTTER_EXPORT __attribute__((visibility("default"))) 11 | 12 | #else // defined(FLUTTER_SDK) 13 | 14 | #define FLUTTER_EXPORT 15 | 16 | #endif // defined(FLUTTER_SDK) 17 | 18 | #ifndef NS_ASSUME_NONNULL_BEGIN 19 | #define NS_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin") 20 | #define NS_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end") 21 | #endif // defined(NS_ASSUME_NONNULL_BEGIN) 22 | 23 | /** 24 | * Indicates that the API has been deprecated for the specified reason. Code 25 | * that uses the deprecated API will continue to work as before. However, the 26 | * API will soon become unavailable and users are encouraged to immediately take 27 | * the appropriate action mentioned in the deprecation message and the BREAKING 28 | * CHANGES section present in the Flutter.h umbrella header. 29 | */ 30 | #define FLUTTER_DEPRECATED(msg) __attribute__((__deprecated__(msg))) 31 | 32 | /** 33 | * Indicates that the previously deprecated API is now unavailable. Code that 34 | * uses the API will not work and the declaration of the API is only a stub 35 | * meant to display the given message detailing the actions for the user to take 36 | * immediately. 37 | */ 38 | #define FLUTTER_UNAVAILABLE(msg) __attribute__((__unavailable__(msg))) 39 | 40 | #endif // FLUTTER_FLUTTERMACROS_H_ 41 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterPlatformViews.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERPLATFORMVIEWS_H_ 6 | #define FLUTTER_FLUTTERPLATFORMVIEWS_H_ 7 | 8 | #import 9 | 10 | #import "FlutterCodecs.h" 11 | #import "FlutterMacros.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | /** 16 | * Wraps a `UIView` for embedding in the Flutter hierarchy 17 | */ 18 | @protocol FlutterPlatformView 19 | /** 20 | * Returns a reference to the `UIView` that is wrapped by this `FlutterPlatformView`. 21 | */ 22 | - (UIView*)view; 23 | @end 24 | 25 | FLUTTER_EXPORT 26 | @protocol FlutterPlatformViewFactory 27 | /** 28 | * Create a `FlutterPlatformView`. 29 | * 30 | * Implemented by iOS code that expose a `UIView` for embedding in a Flutter app. 31 | * 32 | * The implementation of this method should create a new `UIView` and return it. 33 | * 34 | * @param frame The rectangle for the newly created `UIView` measued in points. 35 | * @param viewId A unique identifier for this `UIView`. 36 | * @param args Parameters for creating the `UIView` sent from the Dart side of the Flutter app. 37 | * If `createArgsCodec` is not implemented, or if no creation arguments were sent from the Dart 38 | * code, this will be null. Otherwise this will be the value sent from the Dart code as decoded by 39 | * `createArgsCodec`. 40 | */ 41 | - (NSObject*)createWithFrame:(CGRect)frame 42 | viewIdentifier:(int64_t)viewId 43 | arguments:(id _Nullable)args; 44 | 45 | /** 46 | * Returns the `FlutterMessageCodec` for decoding the args parameter of `createWithFrame`. 47 | * 48 | * Only needs to be implemented if `createWithFrame` needs an arguments parameter. 49 | */ 50 | @optional 51 | - (NSObject*)createArgsCodec; 52 | @end 53 | 54 | NS_ASSUME_NONNULL_END 55 | 56 | #endif // FLUTTER_FLUTTERPLATFORMVIEWS_H_ 57 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterPlugin.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERPLUGIN_H_ 6 | #define FLUTTER_FLUTTERPLUGIN_H_ 7 | 8 | #import 9 | #import 10 | 11 | #include "FlutterBinaryMessenger.h" 12 | #include "FlutterChannels.h" 13 | #include "FlutterCodecs.h" 14 | #include "FlutterPlatformViews.h" 15 | #include "FlutterTexture.h" 16 | 17 | NS_ASSUME_NONNULL_BEGIN 18 | @protocol FlutterPluginRegistrar; 19 | @protocol FlutterPluginRegistry; 20 | 21 | #pragma mark - 22 | /*************************************************************************************************** 23 | * Protocol for listener of events from the UIApplication, typically a FlutterPlugin. 24 | */ 25 | @protocol FlutterApplicationLifeCycleDelegate 26 | @optional 27 | /** 28 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 29 | * 30 | * @return `NO` if this vetoes application launch. 31 | */ 32 | - (BOOL)application:(UIApplication*)application 33 | didFinishLaunchingWithOptions:(NSDictionary*)launchOptions; 34 | 35 | /** 36 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 37 | * 38 | * @return `NO` if this vetoes application launch. 39 | */ 40 | - (BOOL)application:(UIApplication*)application 41 | willFinishLaunchingWithOptions:(NSDictionary*)launchOptions; 42 | 43 | /** 44 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 45 | */ 46 | - (void)applicationDidBecomeActive:(UIApplication*)application; 47 | 48 | /** 49 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 50 | */ 51 | - (void)applicationWillResignActive:(UIApplication*)application; 52 | 53 | /** 54 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 55 | */ 56 | - (void)applicationDidEnterBackground:(UIApplication*)application; 57 | 58 | /** 59 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 60 | */ 61 | - (void)applicationWillEnterForeground:(UIApplication*)application; 62 | 63 | /** 64 | Called if this has been registered for `UIApplicationDelegate` callbacks. 65 | */ 66 | - (void)applicationWillTerminate:(UIApplication*)application; 67 | 68 | /** 69 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 70 | */ 71 | - (void)application:(UIApplication*)application 72 | didRegisterUserNotificationSettings:(UIUserNotificationSettings*)notificationSettings 73 | API_DEPRECATED( 74 | "See -[UIApplicationDelegate application:didRegisterUserNotificationSettings:] deprecation", 75 | ios(8.0, 10.0)); 76 | 77 | /** 78 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 79 | */ 80 | - (void)application:(UIApplication*)application 81 | didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken; 82 | 83 | /** 84 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 85 | * 86 | * @return `YES` if this handles the request. 87 | */ 88 | - (BOOL)application:(UIApplication*)application 89 | didReceiveRemoteNotification:(NSDictionary*)userInfo 90 | fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler; 91 | 92 | /** 93 | * Calls all plugins registered for `UIApplicationDelegate` callbacks. 94 | */ 95 | - (void)application:(UIApplication*)application 96 | didReceiveLocalNotification:(UILocalNotification*)notification 97 | API_DEPRECATED( 98 | "See -[UIApplicationDelegate application:didReceiveLocalNotification:] deprecation", 99 | ios(4.0, 10.0)); 100 | 101 | /** 102 | * Calls all plugins registered for `UNUserNotificationCenterDelegate` callbacks. 103 | */ 104 | - (void)userNotificationCenter:(UNUserNotificationCenter*)center 105 | willPresentNotification:(UNNotification*)notification 106 | withCompletionHandler: 107 | (void (^)(UNNotificationPresentationOptions options))completionHandler 108 | API_AVAILABLE(ios(10)); 109 | 110 | /** 111 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 112 | * 113 | * @return `YES` if this handles the request. 114 | */ 115 | - (BOOL)application:(UIApplication*)application 116 | openURL:(NSURL*)url 117 | options:(NSDictionary*)options; 118 | 119 | /** 120 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 121 | * 122 | * @return `YES` if this handles the request. 123 | */ 124 | - (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url; 125 | 126 | /** 127 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 128 | * 129 | * @return `YES` if this handles the request. 130 | */ 131 | - (BOOL)application:(UIApplication*)application 132 | openURL:(NSURL*)url 133 | sourceApplication:(NSString*)sourceApplication 134 | annotation:(id)annotation; 135 | 136 | /** 137 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 138 | * 139 | * @return `YES` if this handles the request. 140 | */ 141 | - (BOOL)application:(UIApplication*)application 142 | performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem 143 | completionHandler:(void (^)(BOOL succeeded))completionHandler 144 | API_AVAILABLE(ios(9.0)); 145 | 146 | /** 147 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 148 | * 149 | * @return `YES` if this handles the request. 150 | */ 151 | - (BOOL)application:(UIApplication*)application 152 | handleEventsForBackgroundURLSession:(nonnull NSString*)identifier 153 | completionHandler:(nonnull void (^)(void))completionHandler; 154 | 155 | /** 156 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 157 | * 158 | * @return `YES` if this handles the request. 159 | */ 160 | - (BOOL)application:(UIApplication*)application 161 | performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler; 162 | 163 | /** 164 | * Called if this has been registered for `UIApplicationDelegate` callbacks. 165 | * 166 | * @return `YES` if this handles the request. 167 | */ 168 | - (BOOL)application:(UIApplication*)application 169 | continueUserActivity:(NSUserActivity*)userActivity 170 | restorationHandler:(void (^)(NSArray*))restorationHandler; 171 | @end 172 | 173 | #pragma mark - 174 | /*************************************************************************************************** 175 | * A plugin registration callback. 176 | * 177 | * Used for registering plugins with additional instances of 178 | * `FlutterPluginRegistry`. 179 | * 180 | * @param registry The registry to register plugins with. 181 | */ 182 | typedef void (*FlutterPluginRegistrantCallback)(NSObject* registry); 183 | 184 | #pragma mark - 185 | /*************************************************************************************************** 186 | * Implemented by the iOS part of a Flutter plugin. 187 | * 188 | * Defines a set of optional callback methods and a method to set up the plugin 189 | * and register it to be called by other application components. 190 | */ 191 | @protocol FlutterPlugin 192 | @required 193 | /** 194 | * Registers this plugin using the context information and callback registration 195 | * methods exposed by the given registrar. 196 | * 197 | * The registrar is obtained from a `FlutterPluginRegistry` which keeps track of 198 | * the identity of registered plugins and provides basic support for cross-plugin 199 | * coordination. 200 | * 201 | * The caller of this method, a plugin registrant, is usually autogenerated by 202 | * Flutter tooling based on declared plugin dependencies. The generated registrant 203 | * asks the registry for a registrar for each plugin, and calls this method to 204 | * allow the plugin to initialize itself and register callbacks with application 205 | * objects available through the registrar protocol. 206 | * 207 | * @param registrar A helper providing application context and methods for 208 | * registering callbacks. 209 | */ 210 | + (void)registerWithRegistrar:(NSObject*)registrar; 211 | @optional 212 | /** 213 | * Set a callback for registering plugins to an additional `FlutterPluginRegistry`, 214 | * including headless `FlutterEngine` instances. 215 | * 216 | * This method is typically called from within an application's `AppDelegate` at 217 | * startup to allow for plugins which create additional `FlutterEngine` instances 218 | * to register the application's plugins. 219 | * 220 | * @param callback A callback for registering some set of plugins with a 221 | * `FlutterPluginRegistry`. 222 | */ 223 | + (void)setPluginRegistrantCallback:(FlutterPluginRegistrantCallback)callback; 224 | @optional 225 | /** 226 | * Called if this plugin has been registered to receive `FlutterMethodCall`s. 227 | * 228 | * @param call The method call command object. 229 | * @param result A callback for submitting the result of the call. 230 | */ 231 | - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result; 232 | @end 233 | 234 | #pragma mark - 235 | /*************************************************************************************************** 236 | *Registration context for a single `FlutterPlugin`, providing a one stop shop 237 | *for the plugin to access contextual information and register callbacks for 238 | *various application events. 239 | * 240 | *Registrars are obtained from a `FlutterPluginRegistry` which keeps track of 241 | *the identity of registered plugins and provides basic support for cross-plugin 242 | *coordination. 243 | */ 244 | @protocol FlutterPluginRegistrar 245 | /** 246 | * Returns a `FlutterBinaryMessenger` for creating Dart/iOS communication 247 | * channels to be used by the plugin. 248 | * 249 | * @return The messenger. 250 | */ 251 | - (NSObject*)messenger; 252 | 253 | /** 254 | * Returns a `FlutterTextureRegistry` for registering textures 255 | * provided by the plugin. 256 | * 257 | * @return The texture registry. 258 | */ 259 | - (NSObject*)textures; 260 | 261 | /** 262 | * Registers a `FlutterPlatformViewFactory` for creation of platform views. 263 | * 264 | * Plugins expose `UIView` for embedding in Flutter apps by registering a view factory. 265 | * 266 | * @param factory The view factory that will be registered. 267 | * @param factoryId A unique identifier for the factory, the Dart code of the Flutter app can use 268 | * this identifier to request creation of a `UIView` by the registered factory. 269 | */ 270 | - (void)registerViewFactory:(NSObject*)factory 271 | withId:(NSString*)factoryId; 272 | 273 | /** 274 | * Publishes a value for external use of the plugin. 275 | * 276 | * Plugins may publish a single value, such as an instance of the 277 | * plugin's main class, for situations where external control or 278 | * interaction is needed. 279 | * 280 | * The published value will be available from the `FlutterPluginRegistry`. 281 | * Repeated calls overwrite any previous publication. 282 | * 283 | * @param value The value to be published. 284 | */ 285 | - (void)publish:(NSObject*)value; 286 | 287 | /** 288 | * Registers the plugin as a receiver of incoming method calls from the Dart side 289 | * on the specified `FlutterMethodChannel`. 290 | * 291 | * @param delegate The receiving object, such as the plugin's main class. 292 | * @param channel The channel 293 | */ 294 | - (void)addMethodCallDelegate:(NSObject*)delegate 295 | channel:(FlutterMethodChannel*)channel; 296 | 297 | /** 298 | * Registers the plugin as a receiver of `UIApplicationDelegate` calls. 299 | * 300 | * @param delegate The receiving object, such as the plugin's main class. 301 | */ 302 | - (void)addApplicationDelegate:(NSObject*)delegate; 303 | 304 | /** 305 | * Returns the file name for the given asset. 306 | * The returned file name can be used to access the asset in the application's main bundle. 307 | * 308 | * @param asset The name of the asset. The name can be hierarchical. 309 | * @return the file name to be used for lookup in the main bundle. 310 | */ 311 | - (NSString*)lookupKeyForAsset:(NSString*)asset; 312 | 313 | /** 314 | * Returns the file name for the given asset which originates from the specified package. 315 | * The returned file name can be used to access the asset in the application's main bundle. 316 | * 317 | * 318 | * @param asset The name of the asset. The name can be hierarchical. 319 | * @param package The name of the package from which the asset originates. 320 | * @return the file name to be used for lookup in the main bundle. 321 | */ 322 | - (NSString*)lookupKeyForAsset:(NSString*)asset fromPackage:(NSString*)package; 323 | @end 324 | 325 | #pragma mark - 326 | /*************************************************************************************************** 327 | * A registry of Flutter iOS plugins. 328 | * 329 | * Plugins are identified by unique string keys, typically the name of the 330 | * plugin's main class. The registry tracks plugins by this key, mapping it to 331 | * a value published by the plugin during registration, if any. This provides a 332 | * very basic means of cross-plugin coordination with loose coupling between 333 | * unrelated plugins. 334 | * 335 | * Plugins typically need contextual information and the ability to register 336 | * callbacks for various application events. To keep the API of the registry 337 | * focused, these facilities are not provided directly by the registry, but by 338 | * a `FlutterPluginRegistrar`, created by the registry in exchange for the unique 339 | * key of the plugin. 340 | * 341 | * There is no implied connection between the registry and the registrar. 342 | * Specifically, callbacks registered by the plugin via the registrar may be 343 | * relayed directly to the underlying iOS application objects. 344 | */ 345 | @protocol FlutterPluginRegistry 346 | /** 347 | * Returns a registrar for registering a plugin. 348 | * 349 | * @param pluginKey The unique key identifying the plugin. 350 | */ 351 | - (NSObject*)registrarForPlugin:(NSString*)pluginKey; 352 | /** 353 | * Returns whether the specified plugin has been registered. 354 | * 355 | * @param pluginKey The unique key identifying the plugin. 356 | * @return `YES` if `registrarForPlugin` has been called with `pluginKey`. 357 | */ 358 | - (BOOL)hasPlugin:(NSString*)pluginKey; 359 | 360 | /** 361 | * Returns a value published by the specified plugin. 362 | * 363 | * @param pluginKey The unique key identifying the plugin. 364 | * @return An object published by the plugin, if any. Will be `NSNull` if 365 | * nothing has been published. Will be `nil` if the plugin has not been 366 | * registered. 367 | */ 368 | - (NSObject*)valuePublishedByPlugin:(NSString*)pluginKey; 369 | @end 370 | 371 | #pragma mark - 372 | /*************************************************************************************************** 373 | * Implement this in the `UIAppDelegate` of your app to enable Flutter plugins to register 374 | * themselves to the application life cycle events. 375 | */ 376 | @protocol FlutterAppLifeCycleProvider 377 | - (void)addApplicationLifeCycleDelegate:(NSObject*)delegate; 378 | @end 379 | 380 | NS_ASSUME_NONNULL_END; 381 | 382 | #endif // FLUTTER_FLUTTERPLUGIN_H_ 383 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterPluginAppLifeCycleDelegate.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERPLUGINAPPLIFECYCLEDELEGATE_H_ 6 | #define FLUTTER_FLUTTERPLUGINAPPLIFECYCLEDELEGATE_H_ 7 | 8 | #include "FlutterPlugin.h" 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | /** 13 | * Propagates `UIAppDelegate` callbacks to registered plugins. 14 | */ 15 | FLUTTER_EXPORT 16 | @interface FlutterPluginAppLifeCycleDelegate : NSObject 17 | 18 | /** 19 | * Registers `delegate` to receive life cycle callbacks via this FlutterPluginAppLifecycleDelegate 20 | * as long as it is alive. 21 | * 22 | * `delegate` will only referenced weakly. 23 | */ 24 | - (void)addDelegate:(NSObject*)delegate; 25 | 26 | /** 27 | * Calls all plugins registered for `UIApplicationDelegate` callbacks. 28 | * 29 | * @return `NO` if any plugin vetoes application launch. 30 | */ 31 | - (BOOL)application:(UIApplication*)application 32 | didFinishLaunchingWithOptions:(NSDictionary*)launchOptions; 33 | 34 | /** 35 | * Calls all plugins registered for `UIApplicationDelegate` callbacks. 36 | * 37 | * @return `NO` if any plugin vetoes application launch. 38 | */ 39 | - (BOOL)application:(UIApplication*)application 40 | willFinishLaunchingWithOptions:(NSDictionary*)launchOptions; 41 | 42 | /** 43 | * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. 44 | */ 45 | - (void)application:(UIApplication*)application 46 | didRegisterUserNotificationSettings:(UIUserNotificationSettings*)notificationSettings 47 | API_DEPRECATED( 48 | "See -[UIApplicationDelegate application:didRegisterUserNotificationSettings:] deprecation", 49 | ios(8.0, 10.0)); 50 | 51 | /** 52 | * Calls all plugins registered for `UIApplicationDelegate` callbacks. 53 | */ 54 | - (void)application:(UIApplication*)application 55 | didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken; 56 | 57 | /** 58 | * Calls all plugins registered for `UIApplicationDelegate` callbacks. 59 | */ 60 | - (void)application:(UIApplication*)application 61 | didReceiveRemoteNotification:(NSDictionary*)userInfo 62 | fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler; 63 | 64 | /** 65 | * Calls all plugins registered for `UIApplicationDelegate` callbacks. 66 | */ 67 | - (void)application:(UIApplication*)application 68 | didReceiveLocalNotification:(UILocalNotification*)notification 69 | API_DEPRECATED( 70 | "See -[UIApplicationDelegate application:didReceiveLocalNotification:] deprecation", 71 | ios(4.0, 10.0)); 72 | 73 | /** 74 | * Calls all plugins registered for `UNUserNotificationCenterDelegate` callbacks. 75 | */ 76 | - (void)userNotificationCenter:(UNUserNotificationCenter*)center 77 | willPresentNotification:(UNNotification*)notification 78 | withCompletionHandler: 79 | (void (^)(UNNotificationPresentationOptions options))completionHandler 80 | API_AVAILABLE(ios(10)); 81 | 82 | /** 83 | * Calls all plugins registered for `UIApplicationDelegate` callbacks in order of registration until 84 | * some plugin handles the request. 85 | * 86 | * @return `YES` if any plugin handles the request. 87 | */ 88 | - (BOOL)application:(UIApplication*)application 89 | openURL:(NSURL*)url 90 | options:(NSDictionary*)options; 91 | 92 | /** 93 | * Calls all plugins registered for `UIApplicationDelegate` callbacks in order of registration until 94 | * some plugin handles the request. 95 | * 96 | * @return `YES` if any plugin handles the request. 97 | */ 98 | - (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url; 99 | 100 | /** 101 | * Calls all plugins registered for `UIApplicationDelegate` callbacks in order of registration until 102 | * some plugin handles the request. 103 | * 104 | * @return `YES` if any plugin handles the request. 105 | */ 106 | - (BOOL)application:(UIApplication*)application 107 | openURL:(NSURL*)url 108 | sourceApplication:(NSString*)sourceApplication 109 | annotation:(id)annotation; 110 | 111 | /** 112 | * Calls all plugins registered for `UIApplicationDelegate` callbacks. 113 | */ 114 | - (void)application:(UIApplication*)application 115 | performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem 116 | completionHandler:(void (^)(BOOL succeeded))completionHandler 117 | API_AVAILABLE(ios(9.0)); 118 | 119 | /** 120 | * Calls all plugins registered for `UIApplicationDelegate` callbacks in order of registration until 121 | * some plugin handles the request. 122 | * 123 | * @return `YES` if any plugin handles the request. 124 | */ 125 | - (BOOL)application:(UIApplication*)application 126 | handleEventsForBackgroundURLSession:(nonnull NSString*)identifier 127 | completionHandler:(nonnull void (^)(void))completionHandler; 128 | 129 | /** 130 | * Calls all plugins registered for `UIApplicationDelegate` callbacks in order of registration until 131 | * some plugin handles the request. 132 | * 133 | * @returns `YES` if any plugin handles the request. 134 | */ 135 | - (BOOL)application:(UIApplication*)application 136 | performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler; 137 | 138 | /** 139 | * Calls all plugins registered for `UIApplicationDelegate` callbacks in order of registration until 140 | * some plugin handles the request. 141 | * 142 | * @return `YES` if any plugin handles the request. 143 | */ 144 | - (BOOL)application:(UIApplication*)application 145 | continueUserActivity:(NSUserActivity*)userActivity 146 | restorationHandler:(void (^)(NSArray*))restorationHandler; 147 | @end 148 | 149 | NS_ASSUME_NONNULL_END 150 | 151 | #endif // FLUTTER_FLUTTERPLUGINAPPLIFECYCLEDELEGATE_H_ 152 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterTexture.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERTEXTURE_H_ 6 | #define FLUTTER_FLUTTERTEXTURE_H_ 7 | 8 | #import 9 | #import 10 | 11 | #include "FlutterMacros.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | FLUTTER_EXPORT 16 | @protocol FlutterTexture 17 | - (CVPixelBufferRef _Nullable)copyPixelBuffer; 18 | @end 19 | 20 | FLUTTER_EXPORT 21 | @protocol FlutterTextureRegistry 22 | - (int64_t)registerTexture:(NSObject*)texture; 23 | - (void)textureFrameAvailable:(int64_t)textureId; 24 | - (void)unregisterTexture:(int64_t)textureId; 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | 29 | #endif // FLUTTER_FLUTTERTEXTURE_H_ 30 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Headers/FlutterViewController.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | #ifndef FLUTTER_FLUTTERVIEWCONTROLLER_H_ 6 | #define FLUTTER_FLUTTERVIEWCONTROLLER_H_ 7 | 8 | #import 9 | #include 10 | 11 | #include "FlutterBinaryMessenger.h" 12 | #include "FlutterDartProject.h" 13 | #include "FlutterEngine.h" 14 | #include "FlutterMacros.h" 15 | #include "FlutterPlugin.h" 16 | #include "FlutterTexture.h" 17 | 18 | @class FlutterEngine; 19 | 20 | /** 21 | * The name used for semantic update notifications via `NSNotificationCenter`. 22 | * 23 | * The object passed as the sender is the `FlutterViewController` associated 24 | * with the update. 25 | */ 26 | FLUTTER_EXPORT 27 | extern NSNotificationName const FlutterSemanticsUpdateNotification; 28 | 29 | /** 30 | * A `UIViewController` implementation for Flutter views. 31 | * 32 | * Dart execution, channel communication, texture registration, and plugin registration are all 33 | * handled by `FlutterEngine`. Calls on this class to those members all proxy through to the 34 | * `FlutterEngine` attached FlutterViewController. 35 | * 36 | * A FlutterViewController can be initialized either with an already-running `FlutterEngine` via 37 | * the `initWithEngine:` initializer, or it can be initialized with a `FlutterDartProject` that 38 | * will be used to implicitly spin up a new `FlutterEngine`. Creating a `FlutterEngine before 39 | * showing a `FlutterViewController` can be used to pre-initialize the Dart VM and to prepare the 40 | * isolate in order to reduce the latency to the first rendered frame. Holding a `FlutterEngine` 41 | * independently of FlutterViewControllers can also be used to not to lose Dart-related state and 42 | * asynchronous tasks when navigating back and forth between a FlutterViewController and other 43 | * `UIViewController`s. 44 | */ 45 | FLUTTER_EXPORT 46 | @interface FlutterViewController : UIViewController 47 | 48 | /** 49 | * Initializes this FlutterViewController with the specified `FlutterEngine`. 50 | * 51 | * The initialized viewcontroller will attach itself to the engine as part of this process. 52 | * 53 | * @param engine The `FlutterEngine` instance to attach to. 54 | * @param nibNameOrNil The NIB name to initialize this UIViewController with. 55 | * @param nibBundleOrNil The NIB bundle. 56 | */ 57 | - (instancetype)initWithEngine:(FlutterEngine*)engine 58 | nibName:(NSString*)nibNameOrNil 59 | bundle:(NSBundle*)nibBundleOrNil NS_DESIGNATED_INITIALIZER; 60 | 61 | /** 62 | * Initializes a new FlutterViewController and `FlutterEngine` with the specified 63 | * `FlutterDartProject`. 64 | * 65 | * @param projectOrNil The `FlutterDartProject` to initialize the `FlutterEngine` with. 66 | * @param nibNameOrNil The NIB name to initialize this UIViewController with. 67 | * @param nibBundleOrNil The NIB bundle. 68 | */ 69 | - (instancetype)initWithProject:(FlutterDartProject*)projectOrNil 70 | nibName:(NSString*)nibNameOrNil 71 | bundle:(NSBundle*)nibBundleOrNil NS_DESIGNATED_INITIALIZER; 72 | 73 | - (void)handleStatusBarTouches:(UIEvent*)event; 74 | 75 | /** 76 | * Registers a callback that will be invoked when the Flutter view has been rendered. 77 | * The callback will be fired only once. 78 | * 79 | * Replaces an existing callback. Use a `nil` callback to unregister the existing one. 80 | */ 81 | - (void)setFlutterViewDidRenderCallback:(void (^)(void))callback; 82 | 83 | /** 84 | * Returns the file name for the given asset. 85 | * The returned file name can be used to access the asset in the application's 86 | * main bundle. 87 | * 88 | * @param asset The name of the asset. The name can be hierarchical. 89 | * @return The file name to be used for lookup in the main bundle. 90 | */ 91 | - (NSString*)lookupKeyForAsset:(NSString*)asset; 92 | 93 | /** 94 | * Returns the file name for the given asset which originates from the specified 95 | * package. 96 | * The returned file name can be used to access the asset in the application's 97 | * main bundle. 98 | * 99 | * @param asset The name of the asset. The name can be hierarchical. 100 | * @param package The name of the package from which the asset originates. 101 | * @return The file name to be used for lookup in the main bundle. 102 | */ 103 | - (NSString*)lookupKeyForAsset:(NSString*)asset fromPackage:(NSString*)package; 104 | 105 | /** 106 | * Sets the first route that the Flutter app shows. The default is "/". 107 | * This method will guarnatee that the initial route is delivered, even if the 108 | * Flutter window hasn't been created yet when called. It cannot be used to update 109 | * the current route being shown in a visible FlutterViewController (see pushRoute 110 | * and popRoute). 111 | * 112 | * @param route The name of the first route to show. 113 | */ 114 | - (void)setInitialRoute:(NSString*)route; 115 | 116 | /** 117 | * Instructs the Flutter Navigator (if any) to go back. 118 | */ 119 | - (void)popRoute; 120 | 121 | /** 122 | * Instructs the Flutter Navigator (if any) to push a route on to the navigation 123 | * stack. The setInitialRoute method should be preferred if this is called before the 124 | * FlutterViewController has come into view. 125 | * 126 | * @param route The name of the route to push to the navigation stack. 127 | */ 128 | - (void)pushRoute:(NSString*)route; 129 | 130 | /** 131 | * The `FlutterPluginRegistry` used by this FlutterViewController. 132 | */ 133 | - (id)pluginRegistry; 134 | 135 | /** 136 | * True if at least one frame has rendered and the ViewController has appeared. 137 | * 138 | * This property is reset to false when the ViewController disappears. It is 139 | * guaranteed to only alternate between true and false for observers. 140 | */ 141 | @property(nonatomic, readonly, getter=isDisplayingFlutterUI) BOOL displayingFlutterUI; 142 | 143 | /** 144 | * Specifies the view to use as a splash screen. Flutter's rendering is asynchronous, so the first 145 | * frame rendered by the Flutter application might not immediately appear when theFlutter view is 146 | * initially placed in the view hierarchy. The splash screen view will be used as 147 | * a replacement until the first frame is rendered. 148 | * 149 | * The view used should be appropriate for multiple sizes; an autoresizing mask to 150 | * have a flexible width and height will be applied automatically. 151 | */ 152 | @property(strong, nonatomic) UIView* splashScreenView; 153 | 154 | /** 155 | * Attempts to set the `splashScreenView` property from the `UILaunchStoryboardName` from the 156 | * main bundle's `Info.plist` file. This method will not change the value of `splashScreenView` 157 | * if it cannot find a default one from a storyboard or nib. 158 | * 159 | * @return `YES` if successful, `NO` otherwise. 160 | */ 161 | - (BOOL)loadDefaultSplashScreenView; 162 | 163 | /** 164 | * Controls whether the created view will be opaque or not. 165 | * 166 | * Default is `YES`. Note that setting this to `NO` may negatively impact performance 167 | * when using hardware acceleration, and toggling this will trigger a re-layout of the 168 | * view. 169 | */ 170 | @property(nonatomic, getter=isViewOpaque) BOOL viewOpaque; 171 | 172 | /** 173 | * The `FlutterEngine` instance for this view controller. 174 | */ 175 | @property(weak, nonatomic, readonly) FlutterEngine* engine; 176 | 177 | /** 178 | * The `FlutterBinaryMessenger` associated with this FlutterViewController (used for communicating 179 | * with channels). 180 | * 181 | * This is just a convenient way to get the |FlutterEngine|'s binary messenger. 182 | */ 183 | @property(nonatomic, readonly) NSObject* binaryMessenger; 184 | 185 | @end 186 | 187 | #endif // FLUTTER_FLUTTERVIEWCONTROLLER_H_ 188 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | Flutter 9 | CFBundleIdentifier 10 | io.flutter.flutter 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | Flutter 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | FlutterEngine 26 | b863200c37df4ed378042de11c4e9ff34e4e58c9 27 | ClangVersion 28 | Fuchsia clang version 8.0.0 (based on LLVM 8.0.0svn) 29 | 30 | 31 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module Flutter { 2 | umbrella header "Flutter.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/_CodeSignature/CodeResources: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | files 6 | 7 | Headers/Flutter.h 8 | 9 | LQBk1GD+u1YEANQovLVv2R/uUag= 10 | 11 | Headers/FlutterAppDelegate.h 12 | 13 | VQRY5CUL6CLzdXzfScbDvTdpElA= 14 | 15 | Headers/FlutterBinaryMessenger.h 16 | 17 | 3TKVS3KoBmkupZxin9YbnrPtMCk= 18 | 19 | Headers/FlutterCallbackCache.h 20 | 21 | v6UEJmd8GTKddiiNFrVRsY9DAZo= 22 | 23 | Headers/FlutterChannels.h 24 | 25 | VA9uQqBQMxHCYJHnGCv1UPch4S0= 26 | 27 | Headers/FlutterCodecs.h 28 | 29 | /PGN0simzUo4u/YhIKuBq/r8rww= 30 | 31 | Headers/FlutterDartProject.h 32 | 33 | buhHk6WXrZ6JBOHQgjXCYITi+xU= 34 | 35 | Headers/FlutterEngine.h 36 | 37 | AdZsTJVwLyqWvLg0GGXL63DxLwA= 38 | 39 | Headers/FlutterHeadlessDartRunner.h 40 | 41 | M8/dhQH3VcQVHupUxQ1dGsbG3Ek= 42 | 43 | Headers/FlutterMacros.h 44 | 45 | Ez4684e7XzQ8vidzmRvJh3qCNxk= 46 | 47 | Headers/FlutterPlatformViews.h 48 | 49 | 14j1xmP4V+DT37g/he3ZhpoeOig= 50 | 51 | Headers/FlutterPlugin.h 52 | 53 | maoHSos7SW7cnlOzz+gFyKQiG/s= 54 | 55 | Headers/FlutterPluginAppLifeCycleDelegate.h 56 | 57 | gctJ/r455gE8/rQYDs4lB3RUOkI= 58 | 59 | Headers/FlutterTexture.h 60 | 61 | 1LdQETkD4xmsSZETVBywMxxLPwM= 62 | 63 | Headers/FlutterViewController.h 64 | 65 | 1iNZtmSzviLXO3AyP98IfgOStLs= 66 | 67 | Info.plist 68 | 69 | mmIimfQR8J/7o8WT4YOSt84JO2I= 70 | 71 | Modules/module.modulemap 72 | 73 | wJV5dCKEGl+FAtDc8wJJh/fvKXs= 74 | 75 | icudtl.dat 76 | 77 | cjDelfr3ugTDn3+r5icq6Ge1n4Q= 78 | 79 | 80 | files2 81 | 82 | Headers/Flutter.h 83 | 84 | hash 85 | 86 | LQBk1GD+u1YEANQovLVv2R/uUag= 87 | 88 | hash2 89 | 90 | 8ZWbAXinM+GRkpUfLzcvsat4nccJ7ZNgGrAhy0iglXs= 91 | 92 | 93 | Headers/FlutterAppDelegate.h 94 | 95 | hash 96 | 97 | VQRY5CUL6CLzdXzfScbDvTdpElA= 98 | 99 | hash2 100 | 101 | TYSAedf2/9SM/60199M+eUXHFYq5f85akCVmksptiNg= 102 | 103 | 104 | Headers/FlutterBinaryMessenger.h 105 | 106 | hash 107 | 108 | 3TKVS3KoBmkupZxin9YbnrPtMCk= 109 | 110 | hash2 111 | 112 | USlivwosbaNJJAtX2mpOdBVwZE9osgj/I3NnC9DCS04= 113 | 114 | 115 | Headers/FlutterCallbackCache.h 116 | 117 | hash 118 | 119 | v6UEJmd8GTKddiiNFrVRsY9DAZo= 120 | 121 | hash2 122 | 123 | 5i4mQAU2+ZEryb3POeTu9hkEM1IZkS/uLLxqLrcXRv0= 124 | 125 | 126 | Headers/FlutterChannels.h 127 | 128 | hash 129 | 130 | VA9uQqBQMxHCYJHnGCv1UPch4S0= 131 | 132 | hash2 133 | 134 | Vjqn7PZHV00y0Cwe+UNlt+OGrzooaDBa5tZfqKvrAIY= 135 | 136 | 137 | Headers/FlutterCodecs.h 138 | 139 | hash 140 | 141 | /PGN0simzUo4u/YhIKuBq/r8rww= 142 | 143 | hash2 144 | 145 | GbPPDQfdsjagMceW1kC1jPNF+b4DsZJtbTzbB4ohtR8= 146 | 147 | 148 | Headers/FlutterDartProject.h 149 | 150 | hash 151 | 152 | buhHk6WXrZ6JBOHQgjXCYITi+xU= 153 | 154 | hash2 155 | 156 | CH/IbvOeuO5i1POUHyFrDUlrdIiZzHMN54RPuzGXxPE= 157 | 158 | 159 | Headers/FlutterEngine.h 160 | 161 | hash 162 | 163 | AdZsTJVwLyqWvLg0GGXL63DxLwA= 164 | 165 | hash2 166 | 167 | JhX0RJjHUfm6ThgTGwDCcmK1+Z9dMlnv9Jiq0jCSIUw= 168 | 169 | 170 | Headers/FlutterHeadlessDartRunner.h 171 | 172 | hash 173 | 174 | M8/dhQH3VcQVHupUxQ1dGsbG3Ek= 175 | 176 | hash2 177 | 178 | 2LUPyCMVHwKeIFZP9I5vV64Kl7unE39yisrUZVrUiVo= 179 | 180 | 181 | Headers/FlutterMacros.h 182 | 183 | hash 184 | 185 | Ez4684e7XzQ8vidzmRvJh3qCNxk= 186 | 187 | hash2 188 | 189 | Lkv4JVLTujcNJRJvmOh5VX+fZHuEvj7MAwT8cSOlJnc= 190 | 191 | 192 | Headers/FlutterPlatformViews.h 193 | 194 | hash 195 | 196 | 14j1xmP4V+DT37g/he3ZhpoeOig= 197 | 198 | hash2 199 | 200 | WtX5LuTXzU9cYk6a/IwuJNP7tIvt2/I+sFiRK1SryNg= 201 | 202 | 203 | Headers/FlutterPlugin.h 204 | 205 | hash 206 | 207 | maoHSos7SW7cnlOzz+gFyKQiG/s= 208 | 209 | hash2 210 | 211 | zVbxlG7MdrPSwtAajDCXzGiZsYEfvRpPlva7i1yMjUk= 212 | 213 | 214 | Headers/FlutterPluginAppLifeCycleDelegate.h 215 | 216 | hash 217 | 218 | gctJ/r455gE8/rQYDs4lB3RUOkI= 219 | 220 | hash2 221 | 222 | 0NeMhrK4y2kLHg0c8MGwANiCI5BUXUcz6iisREtmIuQ= 223 | 224 | 225 | Headers/FlutterTexture.h 226 | 227 | hash 228 | 229 | 1LdQETkD4xmsSZETVBywMxxLPwM= 230 | 231 | hash2 232 | 233 | 7BCnkj4wcr2olEbhMVyuYZSgMXDx0XpJQ6/WdwMLdmE= 234 | 235 | 236 | Headers/FlutterViewController.h 237 | 238 | hash 239 | 240 | 1iNZtmSzviLXO3AyP98IfgOStLs= 241 | 242 | hash2 243 | 244 | LWq4OdgIuM3854RYisDOh7XYZtEB4HOm46p6QJ7WOdg= 245 | 246 | 247 | Modules/module.modulemap 248 | 249 | hash 250 | 251 | wJV5dCKEGl+FAtDc8wJJh/fvKXs= 252 | 253 | hash2 254 | 255 | 0VjriRpZ7AZZaP/0mMAPMJPhi6LoMB4MhXzL5j24tGs= 256 | 257 | 258 | icudtl.dat 259 | 260 | hash 261 | 262 | cjDelfr3ugTDn3+r5icq6Ge1n4Q= 263 | 264 | hash2 265 | 266 | INkC1JLiLe7AB9SqeZRmj6oaRlkPwCvM96J3pilvsnc= 267 | 268 | 269 | 270 | rules 271 | 272 | ^.* 273 | 274 | ^.*\.lproj/ 275 | 276 | optional 277 | 278 | weight 279 | 1000 280 | 281 | ^.*\.lproj/locversion.plist$ 282 | 283 | omit 284 | 285 | weight 286 | 1100 287 | 288 | ^Base\.lproj/ 289 | 290 | weight 291 | 1010 292 | 293 | ^version.plist$ 294 | 295 | 296 | rules2 297 | 298 | .*\.dSYM($|/) 299 | 300 | weight 301 | 11 302 | 303 | ^(.*/)?\.DS_Store$ 304 | 305 | omit 306 | 307 | weight 308 | 2000 309 | 310 | ^.* 311 | 312 | ^.*\.lproj/ 313 | 314 | optional 315 | 316 | weight 317 | 1000 318 | 319 | ^.*\.lproj/locversion.plist$ 320 | 321 | omit 322 | 323 | weight 324 | 1100 325 | 326 | ^Base\.lproj/ 327 | 328 | weight 329 | 1010 330 | 331 | ^Info\.plist$ 332 | 333 | omit 334 | 335 | weight 336 | 20 337 | 338 | ^PkgInfo$ 339 | 340 | omit 341 | 342 | weight 343 | 20 344 | 345 | ^embedded\.provisionprofile$ 346 | 347 | weight 348 | 20 349 | 350 | ^version\.plist$ 351 | 352 | weight 353 | 20 354 | 355 | 356 | 357 | 358 | -------------------------------------------------------------------------------- /example/ios/Flutter/Flutter.framework/icudtl.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Flutter/Flutter.framework/icudtl.dat -------------------------------------------------------------------------------- /example/ios/Flutter/Generated.xcconfig: -------------------------------------------------------------------------------- 1 | // This is a generated file; do not edit or check into version control. 2 | FLUTTER_ROOT=/Users/jwb/Local/Workspaces/Unversioned/FlutterDevelopment 3 | FLUTTER_APPLICATION_PATH=/Users/jwb/Local/Workspaces/Repositories/Flutter-FFNavigationBar/example 4 | FLUTTER_TARGET=/Users/jwb/Local/Workspaces/Repositories/Flutter-FFNavigationBar/example/lib/main.dart 5 | FLUTTER_BUILD_DIR=build 6 | SYMROOT=${SOURCE_ROOT}/../build/ios 7 | FLUTTER_FRAMEWORK_DIR=/Users/jwb/Local/Workspaces/Unversioned/FlutterDevelopment/bin/cache/artifacts/engine/ios 8 | FLUTTER_BUILD_NAME=1.0.0 9 | FLUTTER_BUILD_NUMBER=1 10 | TRACK_WIDGET_CREATION=true 11 | -------------------------------------------------------------------------------- /example/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/ios/Flutter/flutter_export_environment.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # This is a generated file; do not edit or check into version control. 3 | export "FLUTTER_ROOT=/Users/jwb/Local/Workspaces/Unversioned/FlutterDevelopment" 4 | export "FLUTTER_APPLICATION_PATH=/Users/jwb/Local/Workspaces/Repositories/Flutter-FFNavigationBar/example" 5 | export "FLUTTER_TARGET=/Users/jwb/Local/Workspaces/Repositories/Flutter-FFNavigationBar/example/lib/main.dart" 6 | export "FLUTTER_BUILD_DIR=build" 7 | export "SYMROOT=${SOURCE_ROOT}/../build/ios" 8 | export "FLUTTER_FRAMEWORK_DIR=/Users/jwb/Local/Workspaces/Unversioned/FlutterDevelopment/bin/cache/artifacts/engine/ios" 9 | export "FLUTTER_BUILD_NAME=1.0.0" 10 | export "FLUTTER_BUILD_NUMBER=1" 11 | export "TRACK_WIDGET_CREATION=true" 12 | -------------------------------------------------------------------------------- /example/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 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; 13 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 14 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; 15 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 16 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 17 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 18 | 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 19 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 20 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 21 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXCopyFilesBuildPhase section */ 25 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 26 | isa = PBXCopyFilesBuildPhase; 27 | buildActionMask = 2147483647; 28 | dstPath = ""; 29 | dstSubfolderSpec = 10; 30 | files = ( 31 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, 32 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, 33 | ); 34 | name = "Embed Frameworks"; 35 | runOnlyForDeploymentPostprocessing = 0; 36 | }; 37 | /* End PBXCopyFilesBuildPhase section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 41 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 42 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 43 | 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 44 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 45 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 46 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 47 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 48 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 49 | 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 50 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 52 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 53 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 54 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 55 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | /* End PBXFileReference section */ 57 | 58 | /* Begin PBXFrameworksBuildPhase section */ 59 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 60 | isa = PBXFrameworksBuildPhase; 61 | buildActionMask = 2147483647; 62 | files = ( 63 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, 64 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, 65 | ); 66 | runOnlyForDeploymentPostprocessing = 0; 67 | }; 68 | /* End PBXFrameworksBuildPhase section */ 69 | 70 | /* Begin PBXGroup section */ 71 | 9740EEB11CF90186004384FC /* Flutter */ = { 72 | isa = PBXGroup; 73 | children = ( 74 | 3B80C3931E831B6300D905FE /* App.framework */, 75 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 76 | 9740EEBA1CF902C7004384FC /* Flutter.framework */, 77 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 78 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 79 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 80 | ); 81 | name = Flutter; 82 | sourceTree = ""; 83 | }; 84 | 97C146E51CF9000F007C117D = { 85 | isa = PBXGroup; 86 | children = ( 87 | 9740EEB11CF90186004384FC /* Flutter */, 88 | 97C146F01CF9000F007C117D /* Runner */, 89 | 97C146EF1CF9000F007C117D /* Products */, 90 | CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, 91 | ); 92 | sourceTree = ""; 93 | }; 94 | 97C146EF1CF9000F007C117D /* Products */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 97C146EE1CF9000F007C117D /* Runner.app */, 98 | ); 99 | name = Products; 100 | sourceTree = ""; 101 | }; 102 | 97C146F01CF9000F007C117D /* Runner */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, 106 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, 107 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 108 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 109 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 110 | 97C147021CF9000F007C117D /* Info.plist */, 111 | 97C146F11CF9000F007C117D /* Supporting Files */, 112 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 113 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 114 | ); 115 | path = Runner; 116 | sourceTree = ""; 117 | }; 118 | 97C146F11CF9000F007C117D /* Supporting Files */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | 97C146F21CF9000F007C117D /* main.m */, 122 | ); 123 | name = "Supporting Files"; 124 | sourceTree = ""; 125 | }; 126 | /* End PBXGroup section */ 127 | 128 | /* Begin PBXNativeTarget section */ 129 | 97C146ED1CF9000F007C117D /* Runner */ = { 130 | isa = PBXNativeTarget; 131 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 132 | buildPhases = ( 133 | 9740EEB61CF901F6004384FC /* Run Script */, 134 | 97C146EA1CF9000F007C117D /* Sources */, 135 | 97C146EB1CF9000F007C117D /* Frameworks */, 136 | 97C146EC1CF9000F007C117D /* Resources */, 137 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 138 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 139 | ); 140 | buildRules = ( 141 | ); 142 | dependencies = ( 143 | ); 144 | name = Runner; 145 | productName = Runner; 146 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 147 | productType = "com.apple.product-type.application"; 148 | }; 149 | /* End PBXNativeTarget section */ 150 | 151 | /* Begin PBXProject section */ 152 | 97C146E61CF9000F007C117D /* Project object */ = { 153 | isa = PBXProject; 154 | attributes = { 155 | LastUpgradeCheck = 1020; 156 | ORGANIZATIONNAME = "The Chromium Authors"; 157 | TargetAttributes = { 158 | 97C146ED1CF9000F007C117D = { 159 | CreatedOnToolsVersion = 7.3.1; 160 | }; 161 | }; 162 | }; 163 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 164 | compatibilityVersion = "Xcode 3.2"; 165 | developmentRegion = en; 166 | hasScannedForEncodings = 0; 167 | knownRegions = ( 168 | en, 169 | Base, 170 | ); 171 | mainGroup = 97C146E51CF9000F007C117D; 172 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 173 | projectDirPath = ""; 174 | projectRoot = ""; 175 | targets = ( 176 | 97C146ED1CF9000F007C117D /* Runner */, 177 | ); 178 | }; 179 | /* End PBXProject section */ 180 | 181 | /* Begin PBXResourcesBuildPhase section */ 182 | 97C146EC1CF9000F007C117D /* Resources */ = { 183 | isa = PBXResourcesBuildPhase; 184 | buildActionMask = 2147483647; 185 | files = ( 186 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 187 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 188 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 189 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 190 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 191 | ); 192 | runOnlyForDeploymentPostprocessing = 0; 193 | }; 194 | /* End PBXResourcesBuildPhase section */ 195 | 196 | /* Begin PBXShellScriptBuildPhase section */ 197 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 198 | isa = PBXShellScriptBuildPhase; 199 | buildActionMask = 2147483647; 200 | files = ( 201 | ); 202 | inputPaths = ( 203 | ); 204 | name = "Thin Binary"; 205 | outputPaths = ( 206 | ); 207 | runOnlyForDeploymentPostprocessing = 0; 208 | shellPath = /bin/sh; 209 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; 210 | }; 211 | 9740EEB61CF901F6004384FC /* Run Script */ = { 212 | isa = PBXShellScriptBuildPhase; 213 | buildActionMask = 2147483647; 214 | files = ( 215 | ); 216 | inputPaths = ( 217 | ); 218 | name = "Run Script"; 219 | outputPaths = ( 220 | ); 221 | runOnlyForDeploymentPostprocessing = 0; 222 | shellPath = /bin/sh; 223 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 224 | }; 225 | /* End PBXShellScriptBuildPhase section */ 226 | 227 | /* Begin PBXSourcesBuildPhase section */ 228 | 97C146EA1CF9000F007C117D /* Sources */ = { 229 | isa = PBXSourcesBuildPhase; 230 | buildActionMask = 2147483647; 231 | files = ( 232 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, 233 | 97C146F31CF9000F007C117D /* main.m in Sources */, 234 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 235 | ); 236 | runOnlyForDeploymentPostprocessing = 0; 237 | }; 238 | /* End PBXSourcesBuildPhase section */ 239 | 240 | /* Begin PBXVariantGroup section */ 241 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 242 | isa = PBXVariantGroup; 243 | children = ( 244 | 97C146FB1CF9000F007C117D /* Base */, 245 | ); 246 | name = Main.storyboard; 247 | sourceTree = ""; 248 | }; 249 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 250 | isa = PBXVariantGroup; 251 | children = ( 252 | 97C147001CF9000F007C117D /* Base */, 253 | ); 254 | name = LaunchScreen.storyboard; 255 | sourceTree = ""; 256 | }; 257 | /* End PBXVariantGroup section */ 258 | 259 | /* Begin XCBuildConfiguration section */ 260 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 261 | isa = XCBuildConfiguration; 262 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 263 | buildSettings = { 264 | ALWAYS_SEARCH_USER_PATHS = NO; 265 | CLANG_ANALYZER_NONNULL = YES; 266 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 267 | CLANG_CXX_LIBRARY = "libc++"; 268 | CLANG_ENABLE_MODULES = YES; 269 | CLANG_ENABLE_OBJC_ARC = YES; 270 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 271 | CLANG_WARN_BOOL_CONVERSION = YES; 272 | CLANG_WARN_COMMA = YES; 273 | CLANG_WARN_CONSTANT_CONVERSION = YES; 274 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 275 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 276 | CLANG_WARN_EMPTY_BODY = YES; 277 | CLANG_WARN_ENUM_CONVERSION = YES; 278 | CLANG_WARN_INFINITE_RECURSION = YES; 279 | CLANG_WARN_INT_CONVERSION = YES; 280 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 281 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 282 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 283 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 284 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 285 | CLANG_WARN_STRICT_PROTOTYPES = YES; 286 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 287 | CLANG_WARN_UNREACHABLE_CODE = YES; 288 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 289 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 290 | COPY_PHASE_STRIP = NO; 291 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 292 | ENABLE_NS_ASSERTIONS = NO; 293 | ENABLE_STRICT_OBJC_MSGSEND = YES; 294 | GCC_C_LANGUAGE_STANDARD = gnu99; 295 | GCC_NO_COMMON_BLOCKS = YES; 296 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 297 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 298 | GCC_WARN_UNDECLARED_SELECTOR = YES; 299 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 300 | GCC_WARN_UNUSED_FUNCTION = YES; 301 | GCC_WARN_UNUSED_VARIABLE = YES; 302 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 303 | MTL_ENABLE_DEBUG_INFO = NO; 304 | SDKROOT = iphoneos; 305 | TARGETED_DEVICE_FAMILY = "1,2"; 306 | VALIDATE_PRODUCT = YES; 307 | }; 308 | name = Profile; 309 | }; 310 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 311 | isa = XCBuildConfiguration; 312 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 313 | buildSettings = { 314 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 315 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 316 | ENABLE_BITCODE = NO; 317 | FRAMEWORK_SEARCH_PATHS = ( 318 | "$(inherited)", 319 | "$(PROJECT_DIR)/Flutter", 320 | ); 321 | INFOPLIST_FILE = Runner/Info.plist; 322 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 323 | LIBRARY_SEARCH_PATHS = ( 324 | "$(inherited)", 325 | "$(PROJECT_DIR)/Flutter", 326 | ); 327 | PRODUCT_BUNDLE_IDENTIFIER = com.fiftyfivebuilds.ffNagivationBarExample; 328 | PRODUCT_NAME = "$(TARGET_NAME)"; 329 | VERSIONING_SYSTEM = "apple-generic"; 330 | }; 331 | name = Profile; 332 | }; 333 | 97C147031CF9000F007C117D /* Debug */ = { 334 | isa = XCBuildConfiguration; 335 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 336 | buildSettings = { 337 | ALWAYS_SEARCH_USER_PATHS = NO; 338 | CLANG_ANALYZER_NONNULL = YES; 339 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 340 | CLANG_CXX_LIBRARY = "libc++"; 341 | CLANG_ENABLE_MODULES = YES; 342 | CLANG_ENABLE_OBJC_ARC = YES; 343 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 344 | CLANG_WARN_BOOL_CONVERSION = YES; 345 | CLANG_WARN_COMMA = YES; 346 | CLANG_WARN_CONSTANT_CONVERSION = YES; 347 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 348 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 349 | CLANG_WARN_EMPTY_BODY = YES; 350 | CLANG_WARN_ENUM_CONVERSION = YES; 351 | CLANG_WARN_INFINITE_RECURSION = YES; 352 | CLANG_WARN_INT_CONVERSION = YES; 353 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 354 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 355 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 356 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 357 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 358 | CLANG_WARN_STRICT_PROTOTYPES = YES; 359 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 360 | CLANG_WARN_UNREACHABLE_CODE = YES; 361 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 362 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 363 | COPY_PHASE_STRIP = NO; 364 | DEBUG_INFORMATION_FORMAT = dwarf; 365 | ENABLE_STRICT_OBJC_MSGSEND = YES; 366 | ENABLE_TESTABILITY = YES; 367 | GCC_C_LANGUAGE_STANDARD = gnu99; 368 | GCC_DYNAMIC_NO_PIC = NO; 369 | GCC_NO_COMMON_BLOCKS = YES; 370 | GCC_OPTIMIZATION_LEVEL = 0; 371 | GCC_PREPROCESSOR_DEFINITIONS = ( 372 | "DEBUG=1", 373 | "$(inherited)", 374 | ); 375 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 376 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 377 | GCC_WARN_UNDECLARED_SELECTOR = YES; 378 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 379 | GCC_WARN_UNUSED_FUNCTION = YES; 380 | GCC_WARN_UNUSED_VARIABLE = YES; 381 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 382 | MTL_ENABLE_DEBUG_INFO = YES; 383 | ONLY_ACTIVE_ARCH = YES; 384 | SDKROOT = iphoneos; 385 | TARGETED_DEVICE_FAMILY = "1,2"; 386 | }; 387 | name = Debug; 388 | }; 389 | 97C147041CF9000F007C117D /* Release */ = { 390 | isa = XCBuildConfiguration; 391 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 392 | buildSettings = { 393 | ALWAYS_SEARCH_USER_PATHS = NO; 394 | CLANG_ANALYZER_NONNULL = YES; 395 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 396 | CLANG_CXX_LIBRARY = "libc++"; 397 | CLANG_ENABLE_MODULES = YES; 398 | CLANG_ENABLE_OBJC_ARC = YES; 399 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 400 | CLANG_WARN_BOOL_CONVERSION = YES; 401 | CLANG_WARN_COMMA = YES; 402 | CLANG_WARN_CONSTANT_CONVERSION = YES; 403 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 404 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 405 | CLANG_WARN_EMPTY_BODY = YES; 406 | CLANG_WARN_ENUM_CONVERSION = YES; 407 | CLANG_WARN_INFINITE_RECURSION = YES; 408 | CLANG_WARN_INT_CONVERSION = YES; 409 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 410 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 411 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 412 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 413 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 414 | CLANG_WARN_STRICT_PROTOTYPES = YES; 415 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 416 | CLANG_WARN_UNREACHABLE_CODE = YES; 417 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 418 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 419 | COPY_PHASE_STRIP = NO; 420 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 421 | ENABLE_NS_ASSERTIONS = NO; 422 | ENABLE_STRICT_OBJC_MSGSEND = YES; 423 | GCC_C_LANGUAGE_STANDARD = gnu99; 424 | GCC_NO_COMMON_BLOCKS = YES; 425 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 426 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 427 | GCC_WARN_UNDECLARED_SELECTOR = YES; 428 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 429 | GCC_WARN_UNUSED_FUNCTION = YES; 430 | GCC_WARN_UNUSED_VARIABLE = YES; 431 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 432 | MTL_ENABLE_DEBUG_INFO = NO; 433 | SDKROOT = iphoneos; 434 | TARGETED_DEVICE_FAMILY = "1,2"; 435 | VALIDATE_PRODUCT = YES; 436 | }; 437 | name = Release; 438 | }; 439 | 97C147061CF9000F007C117D /* Debug */ = { 440 | isa = XCBuildConfiguration; 441 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 442 | buildSettings = { 443 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 444 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 445 | ENABLE_BITCODE = NO; 446 | FRAMEWORK_SEARCH_PATHS = ( 447 | "$(inherited)", 448 | "$(PROJECT_DIR)/Flutter", 449 | ); 450 | INFOPLIST_FILE = Runner/Info.plist; 451 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 452 | LIBRARY_SEARCH_PATHS = ( 453 | "$(inherited)", 454 | "$(PROJECT_DIR)/Flutter", 455 | ); 456 | PRODUCT_BUNDLE_IDENTIFIER = com.fiftyfivebuilds.ffNagivationBarExample; 457 | PRODUCT_NAME = "$(TARGET_NAME)"; 458 | VERSIONING_SYSTEM = "apple-generic"; 459 | }; 460 | name = Debug; 461 | }; 462 | 97C147071CF9000F007C117D /* Release */ = { 463 | isa = XCBuildConfiguration; 464 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 465 | buildSettings = { 466 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 467 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 468 | ENABLE_BITCODE = NO; 469 | FRAMEWORK_SEARCH_PATHS = ( 470 | "$(inherited)", 471 | "$(PROJECT_DIR)/Flutter", 472 | ); 473 | INFOPLIST_FILE = Runner/Info.plist; 474 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 475 | LIBRARY_SEARCH_PATHS = ( 476 | "$(inherited)", 477 | "$(PROJECT_DIR)/Flutter", 478 | ); 479 | PRODUCT_BUNDLE_IDENTIFIER = com.fiftyfivebuilds.ffNagivationBarExample; 480 | PRODUCT_NAME = "$(TARGET_NAME)"; 481 | VERSIONING_SYSTEM = "apple-generic"; 482 | }; 483 | name = Release; 484 | }; 485 | /* End XCBuildConfiguration section */ 486 | 487 | /* Begin XCConfigurationList section */ 488 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 489 | isa = XCConfigurationList; 490 | buildConfigurations = ( 491 | 97C147031CF9000F007C117D /* Debug */, 492 | 97C147041CF9000F007C117D /* Release */, 493 | 249021D3217E4FDB00AE95B9 /* Profile */, 494 | ); 495 | defaultConfigurationIsVisible = 0; 496 | defaultConfigurationName = Release; 497 | }; 498 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 499 | isa = XCConfigurationList; 500 | buildConfigurations = ( 501 | 97C147061CF9000F007C117D /* Debug */, 502 | 97C147071CF9000F007C117D /* Release */, 503 | 249021D4217E4FDB00AE95B9 /* Profile */, 504 | ); 505 | defaultConfigurationIsVisible = 0; 506 | defaultConfigurationName = Release; 507 | }; 508 | /* End XCConfigurationList section */ 509 | }; 510 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 511 | } 512 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /example/ios/Runner/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #include "AppDelegate.h" 2 | #include "GeneratedPluginRegistrant.h" 3 | 4 | @implementation AppDelegate 5 | 6 | - (BOOL)application:(UIApplication *)application 7 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 8 | [GeneratedPluginRegistrant registerWithRegistry:self]; 9 | // Override point for customization after application launch. 10 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 11 | } 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /example/ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /example/ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/ios/Runner/GeneratedPluginRegistrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | #ifndef GeneratedPluginRegistrant_h 6 | #define GeneratedPluginRegistrant_h 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface GeneratedPluginRegistrant : NSObject 13 | + (void)registerWithRegistry:(NSObject*)registry; 14 | @end 15 | 16 | NS_ASSUME_NONNULL_END 17 | #endif /* GeneratedPluginRegistrant_h */ 18 | -------------------------------------------------------------------------------- /example/ios/Runner/GeneratedPluginRegistrant.m: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | #import "GeneratedPluginRegistrant.h" 6 | 7 | @implementation GeneratedPluginRegistrant 8 | 9 | + (void)registerWithRegistry:(NSObject*)registry { 10 | } 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /example/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ff_nagivation_bar_example 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /example/ios/Runner/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char* argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /example/ios/ServiceDefinitions.json: -------------------------------------------------------------------------------- 1 | {"services":[]} -------------------------------------------------------------------------------- /example/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:ff_navigation_bar/ff_navigation_bar.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | void main() => runApp(MyApp()); 5 | 6 | class MyApp extends StatelessWidget { 7 | // This widget is the root of your application. 8 | @override 9 | Widget build(BuildContext context) { 10 | return MaterialApp( 11 | title: 'ff_navigation_bar Demo', 12 | theme: ThemeData( 13 | primarySwatch: Colors.blue, 14 | ), 15 | home: MyHomePage(title: 'ff_navigation_bar Demo Home Page'), 16 | ); 17 | } 18 | } 19 | 20 | class MyHomePage extends StatefulWidget { 21 | MyHomePage({Key key, this.title}) : super(key: key); 22 | final String title; 23 | 24 | @override 25 | _MyHomePageState createState() => _MyHomePageState(); 26 | } 27 | 28 | class _MyHomePageState extends State { 29 | int selectedIndex = 0; 30 | 31 | @override 32 | Widget build(BuildContext context) { 33 | return Scaffold( 34 | appBar: AppBar( 35 | title: Text(widget.title), 36 | ), 37 | body: Center( 38 | child: Column( 39 | mainAxisAlignment: MainAxisAlignment.center, 40 | children: [ 41 | Text( 42 | 'Demonstration', 43 | ), 44 | ], 45 | ), 46 | ), 47 | bottomNavigationBar: FFNavigationBar( 48 | theme: FFNavigationBarTheme( 49 | barBackgroundColor: Colors.white, 50 | selectedItemBorderColor: Colors.transparent, 51 | selectedItemBackgroundColor: Colors.green, 52 | selectedItemIconColor: Colors.white, 53 | selectedItemLabelColor: Colors.black, 54 | showSelectedItemShadow: false, 55 | barHeight: 70, 56 | ), 57 | selectedIndex: selectedIndex, 58 | onSelectTab: (index) { 59 | setState(() { 60 | selectedIndex = index; 61 | }); 62 | }, 63 | items: [ 64 | FFNavigationBarItem( 65 | iconData: Icons.calendar_today, 66 | label: 'Bar Theme', 67 | ), 68 | FFNavigationBarItem( 69 | iconData: Icons.people, 70 | label: 'Orange', 71 | selectedBackgroundColor: Colors.orange, 72 | ), 73 | FFNavigationBarItem( 74 | iconData: Icons.attach_money, 75 | label: 'Purple', 76 | selectedBackgroundColor: Colors.purple, 77 | ), 78 | FFNavigationBarItem( 79 | iconData: Icons.note, 80 | label: 'Blue', 81 | selectedBackgroundColor: Colors.blue, 82 | ), 83 | FFNavigationBarItem( 84 | iconData: Icons.settings, 85 | label: 'Red Item', 86 | selectedBackgroundColor: Colors.red, 87 | ), 88 | ], 89 | ), 90 | ); 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /example/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: ff_nagivation_bar_example 2 | description: Example flutter app for the ff_navigation_bar package 3 | 4 | version: 1.0.0+1 5 | 6 | environment: 7 | sdk: ">=2.1.0 <3.0.0" 8 | 9 | dependencies: 10 | flutter: 11 | sdk: flutter 12 | 13 | ff_navigation_bar: 14 | path: ../ 15 | 16 | dev_dependencies: 17 | flutter_test: 18 | sdk: flutter 19 | 20 | flutter: 21 | uses-material-design: true 22 | -------------------------------------------------------------------------------- /ff_navigation_bar.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /lib/ff_navigation_bar.dart: -------------------------------------------------------------------------------- 1 | library ff_navigation_bar; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:provider/provider.dart'; 5 | import 'ff_navigation_bar_theme.dart'; 6 | import 'ff_navigation_bar_item.dart'; 7 | 8 | export 'ff_navigation_bar_theme.dart'; 9 | export 'ff_navigation_bar_item.dart'; 10 | 11 | class FFNavigationBar extends StatefulWidget { 12 | final Function onSelectTab; 13 | final List items; 14 | final FFNavigationBarTheme theme; 15 | 16 | final int selectedIndex; 17 | 18 | FFNavigationBar({ 19 | Key key, 20 | this.selectedIndex = 0, 21 | @required this.onSelectTab, 22 | @required this.items, 23 | @required this.theme, 24 | }) { 25 | assert(items != null); 26 | assert(items.length >= 2 && items.length <= 5); 27 | assert(onSelectTab != null); 28 | } 29 | 30 | @override 31 | _FFNavigationBarState createState() => 32 | _FFNavigationBarState(selectedIndex: selectedIndex); 33 | } 34 | 35 | class _FFNavigationBarState extends State { 36 | int selectedIndex; 37 | _FFNavigationBarState({this.selectedIndex}); 38 | 39 | @override 40 | Widget build(BuildContext context) { 41 | final FFNavigationBarTheme theme = widget.theme; 42 | final bgColor = 43 | theme.barBackgroundColor ?? Theme.of(context).bottomAppBarColor; 44 | 45 | return MultiProvider( 46 | providers: [ 47 | Provider.value(value: theme), 48 | Provider.value(value: widget.selectedIndex), 49 | ], 50 | child: Container( 51 | decoration: BoxDecoration( 52 | color: bgColor, 53 | boxShadow: [ 54 | const BoxShadow( 55 | color: Colors.black12, 56 | blurRadius: 2, 57 | ), 58 | ], 59 | ), 60 | child: SafeArea( 61 | child: Container( 62 | width: double.infinity, 63 | height: theme.barHeight, 64 | padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 0), 65 | child: Row( 66 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 67 | children: widget.items.map((item) { 68 | var index = widget.items.indexOf(item); 69 | item.setIndex(index); 70 | 71 | return GestureDetector( 72 | onTap: () { 73 | setState(() { 74 | widget.onSelectTab(index); 75 | selectedIndex = index; 76 | }); 77 | }, 78 | child: Container( 79 | color: Colors.transparent, 80 | child: SizedBox( 81 | width: MediaQuery.of(context).size.width / 82 | widget.items.length, 83 | height: theme.barHeight, 84 | child: item, 85 | ), 86 | ), 87 | ); 88 | }).toList(), 89 | ), 90 | ), 91 | ), 92 | ), 93 | ); 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /lib/ff_navigation_bar_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:provider/provider.dart'; 3 | import 'ff_navigation_bar_theme.dart'; 4 | 5 | // This class has mutable instance properties as they are used to store 6 | // calculated values required by multiple build functions but not known 7 | // (or required to be specified) at creation of instance parameters. 8 | // For example, a color attribute will be modified depending on whether 9 | // the item is selected or not. 10 | // They are also used to store values retrieved from a Provider allowing 11 | // properties to be communicated from the navigation bar to the individual 12 | // items of the bar. 13 | 14 | // ignore: must_be_immutable 15 | class FFNavigationBarItem extends StatelessWidget { 16 | final String label; 17 | final IconData iconData; 18 | final Duration animationDuration; 19 | Color selectedBackgroundColor; 20 | Color selectedForegroundColor; 21 | Color selectedLabelColor; 22 | 23 | int index; 24 | int selectedIndex; 25 | FFNavigationBarTheme theme; 26 | bool showSelectedItemShadow; 27 | double itemWidth; 28 | 29 | void setIndex(int index) { 30 | this.index = index; 31 | } 32 | 33 | Color _getDerivedBorderColor() { 34 | return theme.selectedItemBorderColor ?? theme.barBackgroundColor; 35 | } 36 | 37 | Color _getBorderColor(bool isOn) { 38 | return isOn ? _getDerivedBorderColor() : Colors.transparent; 39 | } 40 | 41 | bool _isItemSelected() { 42 | return index == selectedIndex; 43 | } 44 | 45 | static const kDefaultAnimationDuration = Duration(milliseconds: 1500); 46 | 47 | FFNavigationBarItem({ 48 | Key key, 49 | this.label, 50 | this.itemWidth = 60, 51 | this.selectedBackgroundColor, 52 | this.selectedForegroundColor, 53 | this.selectedLabelColor, 54 | this.iconData, 55 | this.animationDuration = kDefaultAnimationDuration, 56 | }) : super(key: key); 57 | 58 | Center _makeLabel(String label) { 59 | bool isSelected = _isItemSelected(); 60 | return Center( 61 | child: Text( 62 | label, 63 | textAlign: TextAlign.center, 64 | style: TextStyle( 65 | fontSize: isSelected 66 | ? theme.selectedItemTextStyle.fontSize 67 | : theme.unselectedItemTextStyle.fontSize, 68 | fontWeight: isSelected 69 | ? theme.selectedItemTextStyle.fontWeight 70 | : theme.unselectedItemTextStyle.fontWeight, 71 | color: isSelected 72 | ? selectedLabelColor ?? theme.selectedItemLabelColor 73 | : theme.unselectedItemLabelColor, 74 | letterSpacing: isSelected ? 1.1 : 1.0, 75 | ), 76 | ), 77 | ); 78 | } 79 | 80 | Widget _makeIconArea(double itemWidth, IconData iconData) { 81 | bool isSelected = _isItemSelected(); 82 | double radius = itemWidth / 2; 83 | double innerBoxSize = itemWidth - 8; 84 | double innerRadius = (itemWidth - 8) / 2 - 4; 85 | 86 | return CircleAvatar( 87 | radius: isSelected ? radius : radius * 0.7, 88 | backgroundColor: _getBorderColor(isSelected), 89 | child: SizedBox( 90 | width: innerBoxSize, 91 | height: isSelected ? innerBoxSize : innerBoxSize / 2, 92 | child: CircleAvatar( 93 | radius: innerRadius, 94 | backgroundColor: isSelected 95 | ? selectedBackgroundColor ?? theme.selectedItemBackgroundColor 96 | : theme.unselectedItemBackgroundColor, 97 | child: _makeIcon(iconData), 98 | ), 99 | ), 100 | ); 101 | } 102 | 103 | Widget _makeIcon( 104 | IconData iconData, 105 | ) { 106 | bool isSelected = _isItemSelected(); 107 | return Icon( 108 | iconData, 109 | color: isSelected 110 | ? selectedForegroundColor ?? theme.selectedItemIconColor 111 | : theme.unselectedItemIconColor, 112 | ); 113 | } 114 | 115 | Widget _makeShadow() { 116 | bool isSelected = _isItemSelected(); 117 | double height = isSelected ? 4 : 0; 118 | double width = isSelected ? itemWidth + 6 : 0; 119 | 120 | return AnimatedContainer( 121 | duration: Duration(milliseconds: 100), 122 | height: height, 123 | width: width, 124 | decoration: BoxDecoration( 125 | borderRadius: BorderRadius.all(Radius.elliptical(itemWidth / 2, 2)), 126 | boxShadow: [ 127 | const BoxShadow( 128 | color: Colors.black12, 129 | blurRadius: 2, 130 | ), 131 | ], 132 | ), 133 | ); 134 | } 135 | 136 | @override 137 | Widget build(BuildContext context) { 138 | theme = Provider.of(context); 139 | showSelectedItemShadow = theme.showSelectedItemShadow; 140 | itemWidth = theme.itemWidth; 141 | selectedIndex = Provider.of(context); 142 | 143 | selectedBackgroundColor = 144 | selectedBackgroundColor ?? theme.selectedItemBackgroundColor; 145 | selectedForegroundColor = 146 | selectedForegroundColor ?? theme.selectedItemIconColor; 147 | selectedLabelColor = selectedLabelColor ?? theme.selectedItemLabelColor; 148 | 149 | bool isSelected = _isItemSelected(); 150 | double itemHeight = itemWidth - 20; 151 | double topOffset = isSelected ? -20 : -10; 152 | double iconTopSpacer = isSelected ? 0 : 2; 153 | double shadowTopSpacer = 4; 154 | 155 | Widget labelWidget = _makeLabel(label); 156 | Widget iconAreaWidget = _makeIconArea(itemWidth, iconData); 157 | Widget shadowWidget = showSelectedItemShadow ? _makeShadow() : Container(); 158 | 159 | return AnimatedContainer( 160 | width: itemWidth, 161 | height: double.maxFinite, 162 | duration: animationDuration, 163 | child: SizedBox( 164 | width: itemWidth, 165 | height: itemHeight, 166 | child: Stack( 167 | overflow: Overflow.visible, 168 | children: [ 169 | Positioned( 170 | top: topOffset, 171 | left: -itemWidth / 2, 172 | right: -itemWidth / 2, 173 | child: Column( 174 | crossAxisAlignment: CrossAxisAlignment.center, 175 | children: [ 176 | SizedBox(height: iconTopSpacer), 177 | iconAreaWidget, 178 | labelWidget, 179 | SizedBox(height: shadowTopSpacer), 180 | shadowWidget, 181 | ], 182 | ), 183 | ), 184 | ], 185 | ), 186 | ), 187 | ); 188 | } 189 | } 190 | -------------------------------------------------------------------------------- /lib/ff_navigation_bar_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class FFNavigationBarTheme { 4 | final Color barBackgroundColor; 5 | final Color selectedItemBackgroundColor; 6 | final Color selectedItemIconColor; 7 | final Color selectedItemLabelColor; 8 | final Color selectedItemBorderColor; 9 | final Color unselectedItemBackgroundColor; 10 | final Color unselectedItemIconColor; 11 | final Color unselectedItemLabelColor; 12 | 13 | final TextStyle selectedItemTextStyle; 14 | final TextStyle unselectedItemTextStyle; 15 | 16 | final double barHeight; 17 | final double itemWidth; 18 | 19 | final bool showSelectedItemShadow; 20 | 21 | static const kDefaultItemWidth = 48.0; 22 | 23 | static const kDefaultSelectedItemTextStyle = TextStyle( 24 | fontSize: 13.0, 25 | fontWeight: FontWeight.bold, 26 | color: Colors.black, 27 | ); 28 | 29 | static const kDefaultUnselectedTextStyle = TextStyle( 30 | fontSize: 12.0, 31 | fontWeight: FontWeight.normal, 32 | color: Colors.black, 33 | ); 34 | 35 | FFNavigationBarTheme({ 36 | this.barBackgroundColor = Colors.white, 37 | this.selectedItemBackgroundColor = Colors.blueAccent, 38 | this.selectedItemIconColor = Colors.white, 39 | this.selectedItemLabelColor = Colors.black, 40 | this.selectedItemBorderColor = Colors.white, 41 | this.unselectedItemBackgroundColor = Colors.transparent, 42 | this.unselectedItemIconColor = Colors.grey, 43 | this.unselectedItemLabelColor = Colors.grey, 44 | this.selectedItemTextStyle = kDefaultSelectedItemTextStyle, 45 | this.unselectedItemTextStyle = kDefaultUnselectedTextStyle, 46 | this.itemWidth = kDefaultItemWidth, 47 | this.barHeight = 56.0, 48 | this.showSelectedItemShadow = true, 49 | }); 50 | } 51 | -------------------------------------------------------------------------------- /navbar-demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/55Builds/Flutter-FFNavigationBar/526807c70d405bb06abcfb44b362ce92ee1647b7/navbar-demo.gif -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: ff_navigation_bar 2 | description: Configurable bottom navigation bar with raised highlight and shadow 3 | version: 0.1.5 4 | homepage: https://github.com/55Builds/Flutter-FFNavigationBar 5 | 6 | environment: 7 | sdk: ">=2.1.0 <3.0.0" 8 | 9 | dependencies: 10 | flutter: 11 | sdk: flutter 12 | 13 | provider: ^4.0.2 14 | 15 | dev_dependencies: 16 | flutter_test: 17 | sdk: flutter 18 | 19 | flutter: 20 | 21 | -------------------------------------------------------------------------------- /test/ff_navigation_bar_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_test/flutter_test.dart'; 2 | 3 | import 'package:ff_navigation_bar/ff_navigation_bar.dart'; 4 | 5 | void main() { 6 | // test('adds one to input values', () { 7 | // final calculator = Calculator(); 8 | // expect(calculator.addOne(2), 3); 9 | // expect(calculator.addOne(-7), -6); 10 | // expect(calculator.addOne(0), 1); 11 | // expect(() => calculator.addOne(null), throwsNoSuchMethodError); 12 | // }); 13 | } 14 | --------------------------------------------------------------------------------