├── .gitignore
├── .metadata
├── .vscode
└── settings.json
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── example
│ │ │ │ └── flutter_bottom_navigation_with_nested_routing_tutorial
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon-App-1024x1024@1x.png
│ │ ├── Icon-App-20x20@1x.png
│ │ ├── Icon-App-20x20@2x.png
│ │ ├── Icon-App-20x20@3x.png
│ │ ├── Icon-App-29x29@1x.png
│ │ ├── Icon-App-29x29@2x.png
│ │ ├── Icon-App-29x29@3x.png
│ │ ├── Icon-App-40x40@1x.png
│ │ ├── Icon-App-40x40@2x.png
│ │ ├── Icon-App-40x40@3x.png
│ │ ├── Icon-App-60x60@2x.png
│ │ ├── Icon-App-60x60@3x.png
│ │ ├── Icon-App-76x76@1x.png
│ │ ├── Icon-App-76x76@2x.png
│ │ └── Icon-App-83.5x83.5@2x.png
│ └── LaunchImage.imageset
│ │ ├── Contents.json
│ │ ├── LaunchImage.png
│ │ ├── LaunchImage@2x.png
│ │ ├── LaunchImage@3x.png
│ │ └── README.md
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ └── Runner-Bridging-Header.h
├── lib
├── data
│ └── app_data.dart
├── home_page.dart
├── main.dart
├── posts
│ ├── posts_page.dart
│ └── single_post_page.dart
├── routes
│ ├── router.dart
│ └── router.gr.dart
├── settings
│ └── settings_page.dart
├── users
│ ├── user_profile_page.dart
│ └── users_page.dart
└── widgets.dart
├── pubspec.lock
├── pubspec.yaml
└── web
├── favicon.png
├── icons
├── Icon-192.png
├── Icon-512.png
├── Icon-maskable-192.png
└── Icon-maskable-512.png
├── index.html
└── manifest.json
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 |
12 | # IntelliJ related
13 | *.iml
14 | *.ipr
15 | *.iws
16 | .idea/
17 |
18 | # The .vscode folder contains launch configuration and tasks you configure in
19 | # VS Code which you may wish to be included in version control, so this line
20 | # is commented out by default.
21 | #.vscode/
22 |
23 | # Flutter/Dart/Pub related
24 | **/doc/api/
25 | **/ios/Flutter/.last_build_id
26 | .dart_tool/
27 | .flutter-plugins
28 | .flutter-plugins-dependencies
29 | .packages
30 | .pub-cache/
31 | .pub/
32 | /build/
33 |
34 | # Web related
35 | lib/generated_plugin_registrant.dart
36 |
37 | # Symbolication related
38 | app.*.symbols
39 |
40 | # Obfuscation related
41 | app.*.map.json
42 |
43 | # Android Studio will place build artifacts here
44 | /android/app/debug
45 | /android/app/profile
46 | /android/app/release
47 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 4cc385b4b84ac2f816d939a49ea1f328c4e0b48e
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.fontSize": 18,
3 | "window.zoomLevel": 3.5,
4 | "debug.console.fontSize": 18,
5 | "terminal.integrated.fontSize": 18
6 | }
7 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Flutter Bottom Navigation with Nested Routing Tutorial
2 |
3 | ### Learn from :point_right: [this post](https://resocoder.com/flutter-bottom-nav-routing) :point_left:.
4 |
5 | #### _Find more tutorials on [resocoder.com](https://resocoder.com)_
6 |
7 |
8 |
9 |
10 | [](https://resocoder.com)
11 |
12 | _Be prepared for **real** app development_
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at
17 | # https://dart-lang.github.io/linter/lints/index.html.
18 | #
19 | # Instead of disabling a lint rule for the entire project in the
20 | # section below, it can also be suppressed for a single line of code
21 | # or a specific dart file by using the `// ignore: name_of_lint` and
22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
23 | # producing the lint.
24 | rules:
25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
27 |
28 | # Additional information about this file can be found at
29 | # https://dart.dev/guides/language/analysis-options
30 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | def localProperties = new Properties()
2 | def localPropertiesFile = rootProject.file('local.properties')
3 | if (localPropertiesFile.exists()) {
4 | localPropertiesFile.withReader('UTF-8') { reader ->
5 | localProperties.load(reader)
6 | }
7 | }
8 |
9 | def flutterRoot = localProperties.getProperty('flutter.sdk')
10 | if (flutterRoot == null) {
11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 | }
13 |
14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
15 | if (flutterVersionCode == null) {
16 | flutterVersionCode = '1'
17 | }
18 |
19 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
20 | if (flutterVersionName == null) {
21 | flutterVersionName = '1.0'
22 | }
23 |
24 | apply plugin: 'com.android.application'
25 | apply plugin: 'kotlin-android'
26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
27 |
28 | android {
29 | compileSdkVersion 30
30 |
31 | compileOptions {
32 | sourceCompatibility JavaVersion.VERSION_1_8
33 | targetCompatibility JavaVersion.VERSION_1_8
34 | }
35 |
36 | kotlinOptions {
37 | jvmTarget = '1.8'
38 | }
39 |
40 | sourceSets {
41 | main.java.srcDirs += 'src/main/kotlin'
42 | }
43 |
44 | defaultConfig {
45 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
46 | applicationId "com.example.flutter_bottom_navigation_with_nested_routing_tutorial"
47 | minSdkVersion 16
48 | targetSdkVersion 30
49 | versionCode flutterVersionCode.toInteger()
50 | versionName flutterVersionName
51 | }
52 |
53 | buildTypes {
54 | release {
55 | // TODO: Add your own signing config for the release build.
56 | // Signing with the debug keys for now, so `flutter run --release` works.
57 | signingConfig signingConfigs.debug
58 | }
59 | }
60 | }
61 |
62 | flutter {
63 | source '../..'
64 | }
65 |
66 | dependencies {
67 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
68 | }
69 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
13 |
17 |
21 |
26 |
30 |
31 |
32 |
33 |
34 |
35 |
37 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/example/flutter_bottom_navigation_with_nested_routing_tutorial/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.flutter_bottom_navigation_with_nested_routing_tutorial
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.3.50'
3 | repositories {
4 | google()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:4.1.0'
10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 | }
12 | }
13 |
14 | allprojects {
15 | repositories {
16 | google()
17 | mavenCentral()
18 | }
19 | }
20 |
21 | rootProject.buildDir = '../build'
22 | subprojects {
23 | project.buildDir = "${rootProject.buildDir}/${project.name}"
24 | project.evaluationDependsOn(':app')
25 | }
26 |
27 | task clean(type: Delete) {
28 | delete rootProject.buildDir
29 | }
30 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
7 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
4 | def properties = new Properties()
5 |
6 | assert localPropertiesFile.exists()
7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
8 |
9 | def flutterSdkPath = properties.getProperty("flutter.sdk")
10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
12 |
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | *.mode1v3
2 | *.mode2v3
3 | *.moved-aside
4 | *.pbxuser
5 | *.perspectivev3
6 | **/*sync/
7 | .sconsign.dblite
8 | .tags*
9 | **/.vagrant/
10 | **/DerivedData/
11 | Icon?
12 | **/Pods/
13 | **/.symlinks/
14 | profile
15 | xcuserdata
16 | **/.generated/
17 | Flutter/App.framework
18 | Flutter/Flutter.framework
19 | Flutter/Flutter.podspec
20 | Flutter/Generated.xcconfig
21 | Flutter/ephemeral/
22 | Flutter/app.flx
23 | Flutter/app.zip
24 | Flutter/flutter_assets/
25 | Flutter/flutter_export_environment.sh
26 | ServiceDefinitions.json
27 | Runner/GeneratedPluginRegistrant.*
28 |
29 | # Exceptions to above rules.
30 | !default.mode1v3
31 | !default.mode2v3
32 | !default.pbxuser
33 | !default.perspectivev3
34 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 9.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
16 | /* End PBXBuildFile section */
17 |
18 | /* Begin PBXCopyFilesBuildPhase section */
19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
20 | isa = PBXCopyFilesBuildPhase;
21 | buildActionMask = 2147483647;
22 | dstPath = "";
23 | dstSubfolderSpec = 10;
24 | files = (
25 | );
26 | name = "Embed Frameworks";
27 | runOnlyForDeploymentPostprocessing = 0;
28 | };
29 | /* End PBXCopyFilesBuildPhase section */
30 |
31 | /* Begin PBXFileReference section */
32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
45 | /* End PBXFileReference section */
46 |
47 | /* Begin PBXFrameworksBuildPhase section */
48 | 97C146EB1CF9000F007C117D /* Frameworks */ = {
49 | isa = PBXFrameworksBuildPhase;
50 | buildActionMask = 2147483647;
51 | files = (
52 | );
53 | runOnlyForDeploymentPostprocessing = 0;
54 | };
55 | /* End PBXFrameworksBuildPhase section */
56 |
57 | /* Begin PBXGroup section */
58 | 9740EEB11CF90186004384FC /* Flutter */ = {
59 | isa = PBXGroup;
60 | children = (
61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */,
65 | );
66 | name = Flutter;
67 | sourceTree = "";
68 | };
69 | 97C146E51CF9000F007C117D = {
70 | isa = PBXGroup;
71 | children = (
72 | 9740EEB11CF90186004384FC /* Flutter */,
73 | 97C146F01CF9000F007C117D /* Runner */,
74 | 97C146EF1CF9000F007C117D /* Products */,
75 | );
76 | sourceTree = "";
77 | };
78 | 97C146EF1CF9000F007C117D /* Products */ = {
79 | isa = PBXGroup;
80 | children = (
81 | 97C146EE1CF9000F007C117D /* Runner.app */,
82 | );
83 | name = Products;
84 | sourceTree = "";
85 | };
86 | 97C146F01CF9000F007C117D /* Runner */ = {
87 | isa = PBXGroup;
88 | children = (
89 | 97C146FA1CF9000F007C117D /* Main.storyboard */,
90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */,
91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
92 | 97C147021CF9000F007C117D /* Info.plist */,
93 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
94 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
95 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
96 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
97 | );
98 | path = Runner;
99 | sourceTree = "";
100 | };
101 | /* End PBXGroup section */
102 |
103 | /* Begin PBXNativeTarget section */
104 | 97C146ED1CF9000F007C117D /* Runner */ = {
105 | isa = PBXNativeTarget;
106 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
107 | buildPhases = (
108 | 9740EEB61CF901F6004384FC /* Run Script */,
109 | 97C146EA1CF9000F007C117D /* Sources */,
110 | 97C146EB1CF9000F007C117D /* Frameworks */,
111 | 97C146EC1CF9000F007C117D /* Resources */,
112 | 9705A1C41CF9048500538489 /* Embed Frameworks */,
113 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
114 | );
115 | buildRules = (
116 | );
117 | dependencies = (
118 | );
119 | name = Runner;
120 | productName = Runner;
121 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
122 | productType = "com.apple.product-type.application";
123 | };
124 | /* End PBXNativeTarget section */
125 |
126 | /* Begin PBXProject section */
127 | 97C146E61CF9000F007C117D /* Project object */ = {
128 | isa = PBXProject;
129 | attributes = {
130 | LastUpgradeCheck = 1020;
131 | ORGANIZATIONNAME = "";
132 | TargetAttributes = {
133 | 97C146ED1CF9000F007C117D = {
134 | CreatedOnToolsVersion = 7.3.1;
135 | LastSwiftMigration = 1100;
136 | };
137 | };
138 | };
139 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
140 | compatibilityVersion = "Xcode 9.3";
141 | developmentRegion = en;
142 | hasScannedForEncodings = 0;
143 | knownRegions = (
144 | en,
145 | Base,
146 | );
147 | mainGroup = 97C146E51CF9000F007C117D;
148 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
149 | projectDirPath = "";
150 | projectRoot = "";
151 | targets = (
152 | 97C146ED1CF9000F007C117D /* Runner */,
153 | );
154 | };
155 | /* End PBXProject section */
156 |
157 | /* Begin PBXResourcesBuildPhase section */
158 | 97C146EC1CF9000F007C117D /* Resources */ = {
159 | isa = PBXResourcesBuildPhase;
160 | buildActionMask = 2147483647;
161 | files = (
162 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
163 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
164 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
165 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
166 | );
167 | runOnlyForDeploymentPostprocessing = 0;
168 | };
169 | /* End PBXResourcesBuildPhase section */
170 |
171 | /* Begin PBXShellScriptBuildPhase section */
172 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
173 | isa = PBXShellScriptBuildPhase;
174 | buildActionMask = 2147483647;
175 | files = (
176 | );
177 | inputPaths = (
178 | );
179 | name = "Thin Binary";
180 | outputPaths = (
181 | );
182 | runOnlyForDeploymentPostprocessing = 0;
183 | shellPath = /bin/sh;
184 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
185 | };
186 | 9740EEB61CF901F6004384FC /* Run Script */ = {
187 | isa = PBXShellScriptBuildPhase;
188 | buildActionMask = 2147483647;
189 | files = (
190 | );
191 | inputPaths = (
192 | );
193 | name = "Run Script";
194 | outputPaths = (
195 | );
196 | runOnlyForDeploymentPostprocessing = 0;
197 | shellPath = /bin/sh;
198 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
199 | };
200 | /* End PBXShellScriptBuildPhase section */
201 |
202 | /* Begin PBXSourcesBuildPhase section */
203 | 97C146EA1CF9000F007C117D /* Sources */ = {
204 | isa = PBXSourcesBuildPhase;
205 | buildActionMask = 2147483647;
206 | files = (
207 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
208 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
209 | );
210 | runOnlyForDeploymentPostprocessing = 0;
211 | };
212 | /* End PBXSourcesBuildPhase section */
213 |
214 | /* Begin PBXVariantGroup section */
215 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
216 | isa = PBXVariantGroup;
217 | children = (
218 | 97C146FB1CF9000F007C117D /* Base */,
219 | );
220 | name = Main.storyboard;
221 | sourceTree = "";
222 | };
223 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
224 | isa = PBXVariantGroup;
225 | children = (
226 | 97C147001CF9000F007C117D /* Base */,
227 | );
228 | name = LaunchScreen.storyboard;
229 | sourceTree = "";
230 | };
231 | /* End PBXVariantGroup section */
232 |
233 | /* Begin XCBuildConfiguration section */
234 | 249021D3217E4FDB00AE95B9 /* Profile */ = {
235 | isa = XCBuildConfiguration;
236 | buildSettings = {
237 | ALWAYS_SEARCH_USER_PATHS = NO;
238 | CLANG_ANALYZER_NONNULL = YES;
239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
240 | CLANG_CXX_LIBRARY = "libc++";
241 | CLANG_ENABLE_MODULES = YES;
242 | CLANG_ENABLE_OBJC_ARC = YES;
243 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
244 | CLANG_WARN_BOOL_CONVERSION = YES;
245 | CLANG_WARN_COMMA = YES;
246 | CLANG_WARN_CONSTANT_CONVERSION = YES;
247 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
248 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
249 | CLANG_WARN_EMPTY_BODY = YES;
250 | CLANG_WARN_ENUM_CONVERSION = YES;
251 | CLANG_WARN_INFINITE_RECURSION = YES;
252 | CLANG_WARN_INT_CONVERSION = YES;
253 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
254 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
255 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
256 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
257 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
258 | CLANG_WARN_STRICT_PROTOTYPES = YES;
259 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
260 | CLANG_WARN_UNREACHABLE_CODE = YES;
261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
262 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
263 | COPY_PHASE_STRIP = NO;
264 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
265 | ENABLE_NS_ASSERTIONS = NO;
266 | ENABLE_STRICT_OBJC_MSGSEND = YES;
267 | GCC_C_LANGUAGE_STANDARD = gnu99;
268 | GCC_NO_COMMON_BLOCKS = YES;
269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
271 | GCC_WARN_UNDECLARED_SELECTOR = YES;
272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
273 | GCC_WARN_UNUSED_FUNCTION = YES;
274 | GCC_WARN_UNUSED_VARIABLE = YES;
275 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
276 | MTL_ENABLE_DEBUG_INFO = NO;
277 | SDKROOT = iphoneos;
278 | SUPPORTED_PLATFORMS = iphoneos;
279 | TARGETED_DEVICE_FAMILY = "1,2";
280 | VALIDATE_PRODUCT = YES;
281 | };
282 | name = Profile;
283 | };
284 | 249021D4217E4FDB00AE95B9 /* Profile */ = {
285 | isa = XCBuildConfiguration;
286 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
287 | buildSettings = {
288 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
289 | CLANG_ENABLE_MODULES = YES;
290 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
291 | ENABLE_BITCODE = NO;
292 | INFOPLIST_FILE = Runner/Info.plist;
293 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
294 | PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterBottomNavigationWithNestedRoutingTutorial;
295 | PRODUCT_NAME = "$(TARGET_NAME)";
296 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
297 | SWIFT_VERSION = 5.0;
298 | VERSIONING_SYSTEM = "apple-generic";
299 | };
300 | name = Profile;
301 | };
302 | 97C147031CF9000F007C117D /* Debug */ = {
303 | isa = XCBuildConfiguration;
304 | buildSettings = {
305 | ALWAYS_SEARCH_USER_PATHS = NO;
306 | CLANG_ANALYZER_NONNULL = YES;
307 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
308 | CLANG_CXX_LIBRARY = "libc++";
309 | CLANG_ENABLE_MODULES = YES;
310 | CLANG_ENABLE_OBJC_ARC = YES;
311 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
312 | CLANG_WARN_BOOL_CONVERSION = YES;
313 | CLANG_WARN_COMMA = YES;
314 | CLANG_WARN_CONSTANT_CONVERSION = YES;
315 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
316 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
317 | CLANG_WARN_EMPTY_BODY = YES;
318 | CLANG_WARN_ENUM_CONVERSION = YES;
319 | CLANG_WARN_INFINITE_RECURSION = YES;
320 | CLANG_WARN_INT_CONVERSION = YES;
321 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
322 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
323 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
324 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
325 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
326 | CLANG_WARN_STRICT_PROTOTYPES = YES;
327 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
328 | CLANG_WARN_UNREACHABLE_CODE = YES;
329 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
330 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
331 | COPY_PHASE_STRIP = NO;
332 | DEBUG_INFORMATION_FORMAT = dwarf;
333 | ENABLE_STRICT_OBJC_MSGSEND = YES;
334 | ENABLE_TESTABILITY = YES;
335 | GCC_C_LANGUAGE_STANDARD = gnu99;
336 | GCC_DYNAMIC_NO_PIC = NO;
337 | GCC_NO_COMMON_BLOCKS = YES;
338 | GCC_OPTIMIZATION_LEVEL = 0;
339 | GCC_PREPROCESSOR_DEFINITIONS = (
340 | "DEBUG=1",
341 | "$(inherited)",
342 | );
343 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
344 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
345 | GCC_WARN_UNDECLARED_SELECTOR = YES;
346 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
347 | GCC_WARN_UNUSED_FUNCTION = YES;
348 | GCC_WARN_UNUSED_VARIABLE = YES;
349 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
350 | MTL_ENABLE_DEBUG_INFO = YES;
351 | ONLY_ACTIVE_ARCH = YES;
352 | SDKROOT = iphoneos;
353 | TARGETED_DEVICE_FAMILY = "1,2";
354 | };
355 | name = Debug;
356 | };
357 | 97C147041CF9000F007C117D /* Release */ = {
358 | isa = XCBuildConfiguration;
359 | buildSettings = {
360 | ALWAYS_SEARCH_USER_PATHS = NO;
361 | CLANG_ANALYZER_NONNULL = YES;
362 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
363 | CLANG_CXX_LIBRARY = "libc++";
364 | CLANG_ENABLE_MODULES = YES;
365 | CLANG_ENABLE_OBJC_ARC = YES;
366 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
367 | CLANG_WARN_BOOL_CONVERSION = YES;
368 | CLANG_WARN_COMMA = YES;
369 | CLANG_WARN_CONSTANT_CONVERSION = YES;
370 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
371 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
372 | CLANG_WARN_EMPTY_BODY = YES;
373 | CLANG_WARN_ENUM_CONVERSION = YES;
374 | CLANG_WARN_INFINITE_RECURSION = YES;
375 | CLANG_WARN_INT_CONVERSION = YES;
376 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
377 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
378 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
379 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
380 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
381 | CLANG_WARN_STRICT_PROTOTYPES = YES;
382 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
383 | CLANG_WARN_UNREACHABLE_CODE = YES;
384 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
385 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
386 | COPY_PHASE_STRIP = NO;
387 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
388 | ENABLE_NS_ASSERTIONS = NO;
389 | ENABLE_STRICT_OBJC_MSGSEND = YES;
390 | GCC_C_LANGUAGE_STANDARD = gnu99;
391 | GCC_NO_COMMON_BLOCKS = YES;
392 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
393 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
394 | GCC_WARN_UNDECLARED_SELECTOR = YES;
395 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
396 | GCC_WARN_UNUSED_FUNCTION = YES;
397 | GCC_WARN_UNUSED_VARIABLE = YES;
398 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
399 | MTL_ENABLE_DEBUG_INFO = NO;
400 | SDKROOT = iphoneos;
401 | SUPPORTED_PLATFORMS = iphoneos;
402 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
403 | TARGETED_DEVICE_FAMILY = "1,2";
404 | VALIDATE_PRODUCT = YES;
405 | };
406 | name = Release;
407 | };
408 | 97C147061CF9000F007C117D /* Debug */ = {
409 | isa = XCBuildConfiguration;
410 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
411 | buildSettings = {
412 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
413 | CLANG_ENABLE_MODULES = YES;
414 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
415 | ENABLE_BITCODE = NO;
416 | INFOPLIST_FILE = Runner/Info.plist;
417 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
418 | PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterBottomNavigationWithNestedRoutingTutorial;
419 | PRODUCT_NAME = "$(TARGET_NAME)";
420 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
421 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
422 | SWIFT_VERSION = 5.0;
423 | VERSIONING_SYSTEM = "apple-generic";
424 | };
425 | name = Debug;
426 | };
427 | 97C147071CF9000F007C117D /* Release */ = {
428 | isa = XCBuildConfiguration;
429 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
430 | buildSettings = {
431 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
432 | CLANG_ENABLE_MODULES = YES;
433 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
434 | ENABLE_BITCODE = NO;
435 | INFOPLIST_FILE = Runner/Info.plist;
436 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
437 | PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterBottomNavigationWithNestedRoutingTutorial;
438 | PRODUCT_NAME = "$(TARGET_NAME)";
439 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
440 | SWIFT_VERSION = 5.0;
441 | VERSIONING_SYSTEM = "apple-generic";
442 | };
443 | name = Release;
444 | };
445 | /* End XCBuildConfiguration section */
446 |
447 | /* Begin XCConfigurationList section */
448 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
449 | isa = XCConfigurationList;
450 | buildConfigurations = (
451 | 97C147031CF9000F007C117D /* Debug */,
452 | 97C147041CF9000F007C117D /* Release */,
453 | 249021D3217E4FDB00AE95B9 /* Profile */,
454 | );
455 | defaultConfigurationIsVisible = 0;
456 | defaultConfigurationName = Release;
457 | };
458 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
459 | isa = XCConfigurationList;
460 | buildConfigurations = (
461 | 97C147061CF9000F007C117D /* Debug */,
462 | 97C147071CF9000F007C117D /* Release */,
463 | 249021D4217E4FDB00AE95B9 /* Profile */,
464 | );
465 | defaultConfigurationIsVisible = 0;
466 | defaultConfigurationName = Release;
467 | };
468 | /* End XCConfigurationList section */
469 | };
470 | rootObject = 97C146E61CF9000F007C117D /* Project object */;
471 | }
472 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
54 |
56 |
62 |
63 |
64 |
65 |
66 |
67 |
73 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | flutter_bottom_navigation_with_nested_routing_tutorial
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | $(FLUTTER_BUILD_NAME)
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(FLUTTER_BUILD_NUMBER)
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UISupportedInterfaceOrientations
30 |
31 | UIInterfaceOrientationPortrait
32 | UIInterfaceOrientationLandscapeLeft
33 | UIInterfaceOrientationLandscapeRight
34 |
35 | UISupportedInterfaceOrientations~ipad
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationPortraitUpsideDown
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 | UIViewControllerBasedStatusBarAppearance
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/lib/data/app_data.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class Post {
4 | static final posts = [
5 | Post(Colors.amberAccent, 'Post 1', 1),
6 | Post(Colors.blue, 'Post 2', 2),
7 | Post(Colors.pinkAccent, 'Post 3', 3),
8 | ];
9 | final Color color;
10 | final String title;
11 | final int id;
12 |
13 | Post(this.color, this.title, this.id);
14 | }
15 |
16 | class User {
17 | static final users = [
18 | User(Colors.amberAccent, 1),
19 | User(Colors.blue, 2),
20 | User(Colors.pinkAccent, 3),
21 | ];
22 | final Color color;
23 | final int id;
24 |
25 | User(this.color, this.id);
26 | }
27 |
--------------------------------------------------------------------------------
/lib/home_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:auto_route/auto_route.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/routes/router.gr.dart';
4 | import 'package:salomon_bottom_bar/salomon_bottom_bar.dart';
5 |
6 | class HomePage extends StatelessWidget {
7 | const HomePage({Key? key}) : super(key: key);
8 |
9 | @override
10 | Widget build(BuildContext context) {
11 | return AutoTabsScaffold(
12 | appBarBuilder: (_, tabsRouter) => AppBar(
13 | backgroundColor: Colors.indigo,
14 | title: const Text('FlutterBottomNav'),
15 | centerTitle: true,
16 | leading: const AutoBackButton(),
17 | ),
18 | backgroundColor: Colors.indigo,
19 | routes: const [
20 | PostsRouter(),
21 | UsersRouter(),
22 | SettingsRouter(),
23 | ],
24 | bottomNavigationBuilder: (_, tabsRouter) {
25 | return SalomonBottomBar(
26 | margin: const EdgeInsets.symmetric(
27 | horizontal: 20,
28 | vertical: 40,
29 | ),
30 | currentIndex: tabsRouter.activeIndex,
31 | onTap: tabsRouter.setActiveIndex,
32 | items: [
33 | SalomonBottomBarItem(
34 | selectedColor: Colors.amberAccent,
35 | icon: const Icon(
36 | Icons.post_add,
37 | size: 30,
38 | ),
39 | title: const Text('Posts'),
40 | ),
41 | SalomonBottomBarItem(
42 | selectedColor: Colors.blue[200],
43 | icon: const Icon(
44 | Icons.person,
45 | size: 30,
46 | ),
47 | title: const Text('Users'),
48 | ),
49 | SalomonBottomBarItem(
50 | selectedColor: Colors.pinkAccent[100],
51 | icon: const Icon(
52 | Icons.settings,
53 | size: 30,
54 | ),
55 | title: const Text('Settings'),
56 | )
57 | ],
58 | );
59 | },
60 | );
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/routes/router.gr.dart';
3 |
4 | void main() => runApp(AppWidget());
5 |
6 | class AppWidget extends StatelessWidget {
7 | AppWidget({Key? key}) : super(key: key);
8 | final _appRouter = AppRouter();
9 | @override
10 | Widget build(BuildContext context) {
11 | return MaterialApp.router(
12 | debugShowCheckedModeBanner: false,
13 | title: 'Bottom Nav Bar with Nested Routing',
14 | routerDelegate: _appRouter.delegate(),
15 | routeInformationParser: _appRouter.defaultRouteParser(),
16 | );
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/lib/posts/posts_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:auto_route/auto_route.dart';
3 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/data/app_data.dart';
4 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/routes/router.gr.dart';
5 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/widgets.dart';
6 |
7 | class PostsPage extends StatelessWidget {
8 | PostsPage({Key? key}) : super(key: key);
9 | final posts = Post.posts;
10 | @override
11 | Widget build(BuildContext context) {
12 | return Center(
13 | child: Padding(
14 | padding: const EdgeInsets.symmetric(
15 | horizontal: 20,
16 | ),
17 | child: Column(
18 | mainAxisAlignment: MainAxisAlignment.center,
19 | children: [
20 | for (int i = 0; i < posts.length; i++)
21 | PostTile(
22 | tileColor: posts[i].color,
23 | postTitle: posts[i].title,
24 | onTileTap: () => context.router.push(
25 | SinglePostRoute(
26 | postId: posts[i].id,
27 | ),
28 | ),
29 | ),
30 | ],
31 | ),
32 | ),
33 | );
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/lib/posts/single_post_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:auto_route/annotations.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/data/app_data.dart';
4 |
5 | class SinglePostPage extends StatelessWidget {
6 | final int postId;
7 | const SinglePostPage({
8 | Key? key,
9 | @PathParam() required this.postId,
10 | }) : super(key: key);
11 |
12 | @override
13 | Widget build(BuildContext context) {
14 | final post = Post.posts[postId - 1];
15 | return Scaffold(
16 | backgroundColor: post.color,
17 | body: Center(
18 | child: Padding(
19 | padding: const EdgeInsets.all(8.0),
20 | child: Column(
21 | mainAxisAlignment: MainAxisAlignment.center,
22 | children: [
23 | Text(
24 | post.title,
25 | style: Theme.of(context).textTheme.headline3,
26 | ),
27 | const SizedBox(
28 | height: 10,
29 | ),
30 | const Text(
31 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
32 | textAlign: TextAlign.center,
33 | ),
34 | ],
35 | ),
36 | ),
37 | ),
38 | );
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/lib/routes/router.dart:
--------------------------------------------------------------------------------
1 | import 'package:auto_route/auto_route.dart';
2 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/home_page.dart';
3 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/posts/posts_page.dart';
4 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/posts/single_post_page.dart';
5 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/settings/settings_page.dart';
6 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/users/user_profile_page.dart';
7 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/users/users_page.dart';
8 |
9 | @MaterialAutoRouter(
10 | replaceInRouteName: 'Page,Route',
11 | routes: [
12 | AutoRoute(path: '/', page: HomePage, children: [
13 | AutoRoute(
14 | path: 'posts',
15 | name: 'PostsRouter',
16 | page: EmptyRouterPage,
17 | children: [
18 | AutoRoute(
19 | path: '',
20 | page: PostsPage,
21 | ),
22 | AutoRoute(
23 | path: ':postId',
24 | page: SinglePostPage,
25 | )
26 | ],
27 | ),
28 | AutoRoute(
29 | path: 'users',
30 | name: 'UsersRouter',
31 | page: EmptyRouterPage,
32 | children: [
33 | AutoRoute(
34 | path: '',
35 | page: UsersPage,
36 | ),
37 | AutoRoute(
38 | path: ':userId',
39 | page: UserProfilePage,
40 | ),
41 | ],
42 | ),
43 | AutoRoute(
44 | path: 'settings',
45 | name: 'SettingsRouter',
46 | page: SettingsPage,
47 | )
48 | ]),
49 | ],
50 | )
51 | class $AppRouter {}
52 |
--------------------------------------------------------------------------------
/lib/routes/router.gr.dart:
--------------------------------------------------------------------------------
1 | // GENERATED CODE - DO NOT MODIFY BY HAND
2 |
3 | // **************************************************************************
4 | // AutoRouteGenerator
5 | // **************************************************************************
6 |
7 | import 'package:auto_route/auto_route.dart' as _i1;
8 | import 'package:flutter/material.dart' as _i2;
9 |
10 | import '../home_page.dart' as _i3;
11 | import '../posts/posts_page.dart' as _i5;
12 | import '../posts/single_post_page.dart' as _i6;
13 | import '../settings/settings_page.dart' as _i4;
14 | import '../users/user_profile_page.dart' as _i8;
15 | import '../users/users_page.dart' as _i7;
16 |
17 | class AppRouter extends _i1.RootStackRouter {
18 | AppRouter([_i2.GlobalKey<_i2.NavigatorState>? navigatorKey])
19 | : super(navigatorKey);
20 |
21 | @override
22 | final Map pagesMap = {
23 | HomeRoute.name: (routeData) => _i1.MaterialPageX(
24 | routeData: routeData,
25 | builder: (_) {
26 | return const _i3.HomePage();
27 | }),
28 | PostsRouter.name: (routeData) => _i1.MaterialPageX(
29 | routeData: routeData,
30 | builder: (_) {
31 | return const _i1.EmptyRouterPage();
32 | }),
33 | UsersRouter.name: (routeData) => _i1.MaterialPageX(
34 | routeData: routeData,
35 | builder: (_) {
36 | return const _i1.EmptyRouterPage();
37 | }),
38 | SettingsRouter.name: (routeData) => _i1.MaterialPageX(
39 | routeData: routeData,
40 | builder: (_) {
41 | return const _i4.SettingsPage();
42 | }),
43 | PostsRoute.name: (routeData) => _i1.MaterialPageX(
44 | routeData: routeData,
45 | builder: (data) {
46 | final args =
47 | data.argsAs(orElse: () => const PostsRouteArgs());
48 | return _i5.PostsPage(key: args.key);
49 | }),
50 | SinglePostRoute.name: (routeData) => _i1.MaterialPageX(
51 | routeData: routeData,
52 | builder: (data) {
53 | final pathParams = data.pathParams;
54 | final args = data.argsAs(
55 | orElse: () =>
56 | SinglePostRouteArgs(postId: pathParams.getInt('postId')));
57 | return _i6.SinglePostPage(key: args.key, postId: args.postId);
58 | }),
59 | UsersRoute.name: (routeData) => _i1.MaterialPageX(
60 | routeData: routeData,
61 | builder: (_) {
62 | return const _i7.UsersPage();
63 | }),
64 | UserProfileRoute.name: (routeData) => _i1.MaterialPageX(
65 | routeData: routeData,
66 | builder: (data) {
67 | final pathParams = data.pathParams;
68 | final args = data.argsAs(
69 | orElse: () =>
70 | UserProfileRouteArgs(userId: pathParams.getInt('userId')));
71 | return _i8.UserProfilePage(key: args.key, userId: args.userId);
72 | })
73 | };
74 |
75 | @override
76 | List<_i1.RouteConfig> get routes => [
77 | _i1.RouteConfig(HomeRoute.name, path: '/', children: [
78 | _i1.RouteConfig(PostsRouter.name, path: 'posts', children: [
79 | _i1.RouteConfig(PostsRoute.name, path: ''),
80 | _i1.RouteConfig(SinglePostRoute.name, path: ':postId')
81 | ]),
82 | _i1.RouteConfig(UsersRouter.name, path: 'users', children: [
83 | _i1.RouteConfig(UsersRoute.name, path: ''),
84 | _i1.RouteConfig(UserProfileRoute.name, path: ':userId')
85 | ]),
86 | _i1.RouteConfig(SettingsRouter.name, path: 'settings')
87 | ])
88 | ];
89 | }
90 |
91 | class HomeRoute extends _i1.PageRouteInfo {
92 | const HomeRoute({List<_i1.PageRouteInfo>? children})
93 | : super(name, path: '/', initialChildren: children);
94 |
95 | static const String name = 'HomeRoute';
96 | }
97 |
98 | class PostsRouter extends _i1.PageRouteInfo {
99 | const PostsRouter({List<_i1.PageRouteInfo>? children})
100 | : super(name, path: 'posts', initialChildren: children);
101 |
102 | static const String name = 'PostsRouter';
103 | }
104 |
105 | class UsersRouter extends _i1.PageRouteInfo {
106 | const UsersRouter({List<_i1.PageRouteInfo>? children})
107 | : super(name, path: 'users', initialChildren: children);
108 |
109 | static const String name = 'UsersRouter';
110 | }
111 |
112 | class SettingsRouter extends _i1.PageRouteInfo {
113 | const SettingsRouter() : super(name, path: 'settings');
114 |
115 | static const String name = 'SettingsRouter';
116 | }
117 |
118 | class PostsRoute extends _i1.PageRouteInfo {
119 | PostsRoute({_i2.Key? key})
120 | : super(name, path: '', args: PostsRouteArgs(key: key));
121 |
122 | static const String name = 'PostsRoute';
123 | }
124 |
125 | class PostsRouteArgs {
126 | const PostsRouteArgs({this.key});
127 |
128 | final _i2.Key? key;
129 | }
130 |
131 | class SinglePostRoute extends _i1.PageRouteInfo {
132 | SinglePostRoute({_i2.Key? key, required int postId})
133 | : super(name,
134 | path: ':postId',
135 | args: SinglePostRouteArgs(key: key, postId: postId),
136 | rawPathParams: {'postId': postId});
137 |
138 | static const String name = 'SinglePostRoute';
139 | }
140 |
141 | class SinglePostRouteArgs {
142 | const SinglePostRouteArgs({this.key, required this.postId});
143 |
144 | final _i2.Key? key;
145 |
146 | final int postId;
147 | }
148 |
149 | class UsersRoute extends _i1.PageRouteInfo {
150 | const UsersRoute() : super(name, path: '');
151 |
152 | static const String name = 'UsersRoute';
153 | }
154 |
155 | class UserProfileRoute extends _i1.PageRouteInfo {
156 | UserProfileRoute({_i2.Key? key, required int userId})
157 | : super(name,
158 | path: ':userId',
159 | args: UserProfileRouteArgs(key: key, userId: userId),
160 | rawPathParams: {'userId': userId});
161 |
162 | static const String name = 'UserProfileRoute';
163 | }
164 |
165 | class UserProfileRouteArgs {
166 | const UserProfileRouteArgs({this.key, required this.userId});
167 |
168 | final _i2.Key? key;
169 |
170 | final int userId;
171 | }
172 |
--------------------------------------------------------------------------------
/lib/settings/settings_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class SettingsPage extends StatelessWidget {
4 | const SettingsPage({Key? key}) : super(key: key);
5 |
6 | @override
7 | Widget build(BuildContext context) {
8 | return Center(
9 | child: Column(
10 | mainAxisAlignment: MainAxisAlignment.center,
11 | children: const [
12 | Text(
13 | 'Account Settings',
14 | style: TextStyle(
15 | fontSize: 24,
16 | color: Colors.white,
17 | ),
18 | ),
19 | Card(
20 | margin: EdgeInsets.only(
21 | top: 30,
22 | ),
23 | color: Colors.white,
24 | child: Padding(
25 | padding: EdgeInsets.symmetric(
26 | horizontal: 80.0,
27 | vertical: 30,
28 | ),
29 | child: Text(
30 | '''user234
31 |
32 | user234@email.com''',
33 | style: TextStyle(fontSize: 15),
34 | textAlign: TextAlign.center,
35 | ),
36 | ),
37 | )
38 | ],
39 | ),
40 | );
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/lib/users/user_profile_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:auto_route/annotations.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/data/app_data.dart';
4 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/widgets.dart';
5 |
6 | class UserProfilePage extends StatelessWidget {
7 | final int userId;
8 | const UserProfilePage({
9 | Key? key,
10 | @PathParam() required this.userId,
11 | }) : super(key: key);
12 |
13 | @override
14 | Widget build(BuildContext context) {
15 | final user = User.users[userId - 1];
16 | return Scaffold(
17 | backgroundColor: user.color,
18 | body: Center(
19 | child: Column(
20 | mainAxisAlignment: MainAxisAlignment.center,
21 | children: [
22 | UserAvatar(
23 | avatarColor: Colors.white,
24 | username: 'user${user.id}',
25 | )
26 | ],
27 | ),
28 | ),
29 | );
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/lib/users/users_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:auto_route/auto_route.dart';
3 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/data/app_data.dart';
4 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/routes/router.gr.dart';
5 | import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/widgets.dart';
6 |
7 | class UsersPage extends StatelessWidget {
8 | const UsersPage({Key? key}) : super(key: key);
9 |
10 | @override
11 | Widget build(BuildContext context) {
12 | final users = User.users;
13 | return Center(
14 | child: Column(
15 | mainAxisAlignment: MainAxisAlignment.center,
16 | children: [
17 | for (int i = 0; i < users.length; i++)
18 | UserAvatar(
19 | avatarColor: users[i].color,
20 | username: 'user${users[i].id}',
21 | onAvatarTap: () => context.router.push(
22 | UserProfileRoute(
23 | userId: users[i].id,
24 | ),
25 | ),
26 | ),
27 | ],
28 | ),
29 | );
30 | }
31 | }
32 |
33 |
--------------------------------------------------------------------------------
/lib/widgets.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class PostTile extends StatelessWidget {
4 | final Color tileColor;
5 | final String postTitle;
6 | final void Function() onTileTap;
7 |
8 | const PostTile({
9 | Key? key,
10 | required this.tileColor,
11 | required this.postTitle,
12 | required this.onTileTap,
13 | }) : super(key: key);
14 |
15 | @override
16 | Widget build(BuildContext context) {
17 | return GestureDetector(
18 | onTap: onTileTap,
19 | child: Card(
20 | margin: const EdgeInsets.only(bottom: 20),
21 | color: tileColor,
22 | child: Padding(
23 | padding: const EdgeInsets.symmetric(
24 | horizontal: 100,
25 | vertical: 40,
26 | ),
27 | child: Column(
28 | children: [
29 | Text(
30 | postTitle,
31 | style: const TextStyle(
32 | fontSize: 20,
33 | fontWeight: FontWeight.bold,
34 | ),
35 | ),
36 | const Text(
37 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor...',
38 | textAlign: TextAlign.center,
39 | ),
40 | ],
41 | ),
42 | ),
43 | ),
44 | );
45 | }
46 | }
47 |
48 | class UserAvatar extends StatelessWidget {
49 | final Color avatarColor;
50 | final String username;
51 | final void Function()? onAvatarTap;
52 | const UserAvatar({
53 | Key? key,
54 | required this.avatarColor,
55 | required this.username,
56 | this.onAvatarTap,
57 | }) : super(key: key);
58 |
59 | @override
60 | Widget build(BuildContext context) {
61 | return Padding(
62 | padding: const EdgeInsets.only(bottom: 20.0),
63 | child: GestureDetector(
64 | onTap: onAvatarTap,
65 | child: Column(
66 | children: [
67 | CircleAvatar(
68 | backgroundColor: avatarColor,
69 | radius: 65,
70 | child: const Icon(
71 | Icons.person,
72 | size: 65,
73 | color: Colors.black,
74 | ),
75 | ),
76 | const SizedBox(height: 10),
77 | Text(
78 | username,
79 | style: const TextStyle(
80 | fontSize: 14,
81 | fontWeight: FontWeight.bold,
82 | ),
83 | textAlign: TextAlign.center,
84 | ),
85 | ],
86 | ),
87 | ),
88 | );
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | _fe_analyzer_shared:
5 | dependency: transitive
6 | description:
7 | name: _fe_analyzer_shared
8 | url: "https://pub.dartlang.org"
9 | source: hosted
10 | version: "25.0.0"
11 | analyzer:
12 | dependency: transitive
13 | description:
14 | name: analyzer
15 | url: "https://pub.dartlang.org"
16 | source: hosted
17 | version: "2.2.0"
18 | args:
19 | dependency: transitive
20 | description:
21 | name: args
22 | url: "https://pub.dartlang.org"
23 | source: hosted
24 | version: "2.3.0"
25 | async:
26 | dependency: transitive
27 | description:
28 | name: async
29 | url: "https://pub.dartlang.org"
30 | source: hosted
31 | version: "2.8.1"
32 | auto_route:
33 | dependency: "direct main"
34 | description:
35 | name: auto_route
36 | url: "https://pub.dartlang.org"
37 | source: hosted
38 | version: "2.3.2"
39 | auto_route_generator:
40 | dependency: "direct dev"
41 | description:
42 | name: auto_route_generator
43 | url: "https://pub.dartlang.org"
44 | source: hosted
45 | version: "2.3.2"
46 | boolean_selector:
47 | dependency: transitive
48 | description:
49 | name: boolean_selector
50 | url: "https://pub.dartlang.org"
51 | source: hosted
52 | version: "2.1.0"
53 | build:
54 | dependency: transitive
55 | description:
56 | name: build
57 | url: "https://pub.dartlang.org"
58 | source: hosted
59 | version: "2.1.0"
60 | build_config:
61 | dependency: transitive
62 | description:
63 | name: build_config
64 | url: "https://pub.dartlang.org"
65 | source: hosted
66 | version: "1.0.0"
67 | build_daemon:
68 | dependency: transitive
69 | description:
70 | name: build_daemon
71 | url: "https://pub.dartlang.org"
72 | source: hosted
73 | version: "3.0.0"
74 | build_resolvers:
75 | dependency: transitive
76 | description:
77 | name: build_resolvers
78 | url: "https://pub.dartlang.org"
79 | source: hosted
80 | version: "2.0.4"
81 | build_runner:
82 | dependency: "direct dev"
83 | description:
84 | name: build_runner
85 | url: "https://pub.dartlang.org"
86 | source: hosted
87 | version: "2.1.2"
88 | build_runner_core:
89 | dependency: transitive
90 | description:
91 | name: build_runner_core
92 | url: "https://pub.dartlang.org"
93 | source: hosted
94 | version: "7.1.0"
95 | built_collection:
96 | dependency: transitive
97 | description:
98 | name: built_collection
99 | url: "https://pub.dartlang.org"
100 | source: hosted
101 | version: "5.1.1"
102 | built_value:
103 | dependency: transitive
104 | description:
105 | name: built_value
106 | url: "https://pub.dartlang.org"
107 | source: hosted
108 | version: "8.1.2"
109 | characters:
110 | dependency: transitive
111 | description:
112 | name: characters
113 | url: "https://pub.dartlang.org"
114 | source: hosted
115 | version: "1.1.0"
116 | charcode:
117 | dependency: transitive
118 | description:
119 | name: charcode
120 | url: "https://pub.dartlang.org"
121 | source: hosted
122 | version: "1.3.1"
123 | checked_yaml:
124 | dependency: transitive
125 | description:
126 | name: checked_yaml
127 | url: "https://pub.dartlang.org"
128 | source: hosted
129 | version: "2.0.1"
130 | cli_util:
131 | dependency: transitive
132 | description:
133 | name: cli_util
134 | url: "https://pub.dartlang.org"
135 | source: hosted
136 | version: "0.3.3"
137 | clock:
138 | dependency: transitive
139 | description:
140 | name: clock
141 | url: "https://pub.dartlang.org"
142 | source: hosted
143 | version: "1.1.0"
144 | code_builder:
145 | dependency: transitive
146 | description:
147 | name: code_builder
148 | url: "https://pub.dartlang.org"
149 | source: hosted
150 | version: "4.1.0"
151 | collection:
152 | dependency: transitive
153 | description:
154 | name: collection
155 | url: "https://pub.dartlang.org"
156 | source: hosted
157 | version: "1.15.0"
158 | convert:
159 | dependency: transitive
160 | description:
161 | name: convert
162 | url: "https://pub.dartlang.org"
163 | source: hosted
164 | version: "3.0.1"
165 | crypto:
166 | dependency: transitive
167 | description:
168 | name: crypto
169 | url: "https://pub.dartlang.org"
170 | source: hosted
171 | version: "3.0.1"
172 | cupertino_icons:
173 | dependency: "direct main"
174 | description:
175 | name: cupertino_icons
176 | url: "https://pub.dartlang.org"
177 | source: hosted
178 | version: "1.0.3"
179 | dart_style:
180 | dependency: transitive
181 | description:
182 | name: dart_style
183 | url: "https://pub.dartlang.org"
184 | source: hosted
185 | version: "2.1.0"
186 | fake_async:
187 | dependency: transitive
188 | description:
189 | name: fake_async
190 | url: "https://pub.dartlang.org"
191 | source: hosted
192 | version: "1.2.0"
193 | file:
194 | dependency: transitive
195 | description:
196 | name: file
197 | url: "https://pub.dartlang.org"
198 | source: hosted
199 | version: "6.1.2"
200 | fixnum:
201 | dependency: transitive
202 | description:
203 | name: fixnum
204 | url: "https://pub.dartlang.org"
205 | source: hosted
206 | version: "1.0.0"
207 | flutter:
208 | dependency: "direct main"
209 | description: flutter
210 | source: sdk
211 | version: "0.0.0"
212 | flutter_lints:
213 | dependency: "direct dev"
214 | description:
215 | name: flutter_lints
216 | url: "https://pub.dartlang.org"
217 | source: hosted
218 | version: "1.0.4"
219 | flutter_test:
220 | dependency: "direct dev"
221 | description: flutter
222 | source: sdk
223 | version: "0.0.0"
224 | frontend_server_client:
225 | dependency: transitive
226 | description:
227 | name: frontend_server_client
228 | url: "https://pub.dartlang.org"
229 | source: hosted
230 | version: "2.1.2"
231 | glob:
232 | dependency: transitive
233 | description:
234 | name: glob
235 | url: "https://pub.dartlang.org"
236 | source: hosted
237 | version: "2.0.1"
238 | graphs:
239 | dependency: transitive
240 | description:
241 | name: graphs
242 | url: "https://pub.dartlang.org"
243 | source: hosted
244 | version: "2.1.0"
245 | http_multi_server:
246 | dependency: transitive
247 | description:
248 | name: http_multi_server
249 | url: "https://pub.dartlang.org"
250 | source: hosted
251 | version: "3.0.1"
252 | http_parser:
253 | dependency: transitive
254 | description:
255 | name: http_parser
256 | url: "https://pub.dartlang.org"
257 | source: hosted
258 | version: "4.0.0"
259 | io:
260 | dependency: transitive
261 | description:
262 | name: io
263 | url: "https://pub.dartlang.org"
264 | source: hosted
265 | version: "1.0.3"
266 | js:
267 | dependency: transitive
268 | description:
269 | name: js
270 | url: "https://pub.dartlang.org"
271 | source: hosted
272 | version: "0.6.3"
273 | json_annotation:
274 | dependency: transitive
275 | description:
276 | name: json_annotation
277 | url: "https://pub.dartlang.org"
278 | source: hosted
279 | version: "4.1.0"
280 | lints:
281 | dependency: transitive
282 | description:
283 | name: lints
284 | url: "https://pub.dartlang.org"
285 | source: hosted
286 | version: "1.0.1"
287 | logging:
288 | dependency: transitive
289 | description:
290 | name: logging
291 | url: "https://pub.dartlang.org"
292 | source: hosted
293 | version: "1.0.1"
294 | matcher:
295 | dependency: transitive
296 | description:
297 | name: matcher
298 | url: "https://pub.dartlang.org"
299 | source: hosted
300 | version: "0.12.10"
301 | meta:
302 | dependency: transitive
303 | description:
304 | name: meta
305 | url: "https://pub.dartlang.org"
306 | source: hosted
307 | version: "1.7.0"
308 | mime:
309 | dependency: transitive
310 | description:
311 | name: mime
312 | url: "https://pub.dartlang.org"
313 | source: hosted
314 | version: "1.0.0"
315 | package_config:
316 | dependency: transitive
317 | description:
318 | name: package_config
319 | url: "https://pub.dartlang.org"
320 | source: hosted
321 | version: "2.0.2"
322 | path:
323 | dependency: transitive
324 | description:
325 | name: path
326 | url: "https://pub.dartlang.org"
327 | source: hosted
328 | version: "1.8.0"
329 | pedantic:
330 | dependency: transitive
331 | description:
332 | name: pedantic
333 | url: "https://pub.dartlang.org"
334 | source: hosted
335 | version: "1.11.1"
336 | pool:
337 | dependency: transitive
338 | description:
339 | name: pool
340 | url: "https://pub.dartlang.org"
341 | source: hosted
342 | version: "1.5.0"
343 | pub_semver:
344 | dependency: transitive
345 | description:
346 | name: pub_semver
347 | url: "https://pub.dartlang.org"
348 | source: hosted
349 | version: "2.0.0"
350 | pubspec_parse:
351 | dependency: transitive
352 | description:
353 | name: pubspec_parse
354 | url: "https://pub.dartlang.org"
355 | source: hosted
356 | version: "1.0.0"
357 | salomon_bottom_bar:
358 | dependency: "direct main"
359 | description:
360 | name: salomon_bottom_bar
361 | url: "https://pub.dartlang.org"
362 | source: hosted
363 | version: "3.1.0"
364 | shelf:
365 | dependency: transitive
366 | description:
367 | name: shelf
368 | url: "https://pub.dartlang.org"
369 | source: hosted
370 | version: "1.2.0"
371 | shelf_web_socket:
372 | dependency: transitive
373 | description:
374 | name: shelf_web_socket
375 | url: "https://pub.dartlang.org"
376 | source: hosted
377 | version: "1.0.1"
378 | sky_engine:
379 | dependency: transitive
380 | description: flutter
381 | source: sdk
382 | version: "0.0.99"
383 | source_gen:
384 | dependency: transitive
385 | description:
386 | name: source_gen
387 | url: "https://pub.dartlang.org"
388 | source: hosted
389 | version: "1.1.0"
390 | source_span:
391 | dependency: transitive
392 | description:
393 | name: source_span
394 | url: "https://pub.dartlang.org"
395 | source: hosted
396 | version: "1.8.1"
397 | stack_trace:
398 | dependency: transitive
399 | description:
400 | name: stack_trace
401 | url: "https://pub.dartlang.org"
402 | source: hosted
403 | version: "1.10.0"
404 | stream_channel:
405 | dependency: transitive
406 | description:
407 | name: stream_channel
408 | url: "https://pub.dartlang.org"
409 | source: hosted
410 | version: "2.1.0"
411 | stream_transform:
412 | dependency: transitive
413 | description:
414 | name: stream_transform
415 | url: "https://pub.dartlang.org"
416 | source: hosted
417 | version: "2.0.0"
418 | string_scanner:
419 | dependency: transitive
420 | description:
421 | name: string_scanner
422 | url: "https://pub.dartlang.org"
423 | source: hosted
424 | version: "1.1.0"
425 | term_glyph:
426 | dependency: transitive
427 | description:
428 | name: term_glyph
429 | url: "https://pub.dartlang.org"
430 | source: hosted
431 | version: "1.2.0"
432 | test_api:
433 | dependency: transitive
434 | description:
435 | name: test_api
436 | url: "https://pub.dartlang.org"
437 | source: hosted
438 | version: "0.4.2"
439 | timing:
440 | dependency: transitive
441 | description:
442 | name: timing
443 | url: "https://pub.dartlang.org"
444 | source: hosted
445 | version: "1.0.0"
446 | typed_data:
447 | dependency: transitive
448 | description:
449 | name: typed_data
450 | url: "https://pub.dartlang.org"
451 | source: hosted
452 | version: "1.3.0"
453 | vector_math:
454 | dependency: transitive
455 | description:
456 | name: vector_math
457 | url: "https://pub.dartlang.org"
458 | source: hosted
459 | version: "2.1.0"
460 | watcher:
461 | dependency: transitive
462 | description:
463 | name: watcher
464 | url: "https://pub.dartlang.org"
465 | source: hosted
466 | version: "1.0.0"
467 | web_socket_channel:
468 | dependency: transitive
469 | description:
470 | name: web_socket_channel
471 | url: "https://pub.dartlang.org"
472 | source: hosted
473 | version: "2.1.0"
474 | yaml:
475 | dependency: transitive
476 | description:
477 | name: yaml
478 | url: "https://pub.dartlang.org"
479 | source: hosted
480 | version: "3.1.0"
481 | sdks:
482 | dart: ">=2.12.0 <3.0.0"
483 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: flutter_bottom_navigation_with_nested_routing_tutorial
2 | description: Flutter Bottom Navigation with Nested Routing Tutorial.
3 | publish_to: 'none'
4 | version: 1.0.0+1
5 | environment:
6 | sdk: ">=2.12.0 <3.0.0"
7 |
8 | dependencies:
9 | flutter:
10 | sdk: flutter
11 | cupertino_icons: ^1.0.2
12 | auto_route: ^2.3.2
13 | salomon_bottom_bar: ^3.1.0
14 |
15 | dev_dependencies:
16 | flutter_test:
17 | sdk: flutter
18 |
19 | flutter_lints: ^1.0.4
20 | auto_route_generator: ^2.3.2
21 | build_runner: ^2.1.2
22 | flutter:
23 | uses-material-design: true
--------------------------------------------------------------------------------
/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/web/favicon.png
--------------------------------------------------------------------------------
/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/web/icons/Icon-maskable-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-bottom-navigation-with-nested-routing-tutorial/9d19976667b50452f7abc6bab1b38a0757b07cc7/web/icons/Icon-maskable-512.png
--------------------------------------------------------------------------------
/web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | flutter_bottom_navigation_with_nested_routing_tutorial
30 |
31 |
32 |
33 |
36 |
100 |
101 |
102 |
--------------------------------------------------------------------------------
/web/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "flutter_bottom_navigation_with_nested_routing_tutorial",
3 | "short_name": "flutter_bottom_navigation_with_nested_routing_tutorial",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "background_color": "#0175C2",
7 | "theme_color": "#0175C2",
8 | "description": "A new Flutter project.",
9 | "orientation": "portrait-primary",
10 | "prefer_related_applications": false,
11 | "icons": [
12 | {
13 | "src": "icons/Icon-192.png",
14 | "sizes": "192x192",
15 | "type": "image/png"
16 | },
17 | {
18 | "src": "icons/Icon-512.png",
19 | "sizes": "512x512",
20 | "type": "image/png"
21 | },
22 | {
23 | "src": "icons/Icon-maskable-192.png",
24 | "sizes": "192x192",
25 | "type": "image/png",
26 | "purpose": "maskable"
27 | },
28 | {
29 | "src": "icons/Icon-maskable-512.png",
30 | "sizes": "512x512",
31 | "type": "image/png",
32 | "purpose": "maskable"
33 | }
34 | ]
35 | }
36 |
--------------------------------------------------------------------------------