├── ios ├── Runner │ ├── Runner-Bridging-Header.h │ ├── Assets.xcassets │ │ ├── LaunchImage.imageset │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ ├── README.md │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ └── Contents.json │ ├── AppDelegate.swift │ ├── AppDelegate.m │ ├── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.storyboard │ └── Info.plist ├── Flutter │ ├── Debug.xcconfig │ ├── Release.xcconfig │ └── AppFrameworkInfo.plist ├── Runner.xcodeproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ └── project.pbxproj ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Podfile.lock └── Podfile ├── screenshot ├── ios1.png ├── ios2.png ├── ios3.png ├── ios4.png ├── android1.png ├── android2.png ├── android3.png └── android4.png ├── images └── loading_maps.jpg ├── android ├── gradle.properties ├── app │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── 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 │ │ │ │ └── drawable │ │ │ │ │ └── launch_background.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── rifafauzi │ │ │ │ │ └── flutter_maps_sample │ │ │ │ │ └── MainActivity.kt │ │ │ └── AndroidManifest.xml │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ └── profile │ │ │ └── AndroidManifest.xml │ └── build.gradle ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties ├── settings.gradle └── build.gradle ├── lib ├── common │ ├── string_image_assets.dart │ ├── colors.dart │ ├── navigation.dart │ ├── common.dart │ └── sizes.dart ├── main.dart ├── widget │ ├── card_type_food.dart │ ├── custom_button.dart │ ├── card_bottom_sheet.dart │ └── card_draggable_sheet.dart └── ui │ ├── splash_screen.dart │ └── maps_screen.dart ├── .metadata ├── README.md ├── test └── widget_test.dart ├── .gitignore ├── pubspec.yaml └── pubspec.lock /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" -------------------------------------------------------------------------------- /screenshot/ios1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/screenshot/ios1.png -------------------------------------------------------------------------------- /screenshot/ios2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/screenshot/ios2.png -------------------------------------------------------------------------------- /screenshot/ios3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/screenshot/ios3.png -------------------------------------------------------------------------------- /screenshot/ios4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/screenshot/ios4.png -------------------------------------------------------------------------------- /images/loading_maps.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/images/loading_maps.jpg -------------------------------------------------------------------------------- /screenshot/android1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/screenshot/android1.png -------------------------------------------------------------------------------- /screenshot/android2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/screenshot/android2.png -------------------------------------------------------------------------------- /screenshot/android3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/screenshot/android3.png -------------------------------------------------------------------------------- /screenshot/android4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/screenshot/android4.png -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | android.enableJetifier=true 2 | android.useAndroidX=true 3 | org.gradle.jvmargs=-Xmx1536M 4 | 5 | -------------------------------------------------------------------------------- /lib/common/string_image_assets.dart: -------------------------------------------------------------------------------- 1 | class StringImageAssets { 2 | 3 | static String loadingMaps = "images/loading_maps.jpg"; 4 | 5 | } -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rrifafauzikomara/flutter_maps_sample/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.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: cc949a8e8b9cf394b9290a8e80f87af3e207dce5 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /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. -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_maps_sample/ui/splash_screen.dart'; 3 | 4 | void main() => runApp(MyApp()); 5 | 6 | class MyApp extends StatelessWidget { 7 | @override 8 | Widget build(BuildContext context) { 9 | return MaterialApp( 10 | title: 'Flutter Maps Sample', 11 | theme: ThemeData( 12 | primarySwatch: Colors.blue, 13 | ), 14 | home: SplashScreen(), 15 | ); 16 | } 17 | } -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/rifafauzi/flutter_maps_sample/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.rifafauzi.flutter_maps_sample 2 | 3 | import android.os.Bundle 4 | 5 | import io.flutter.app.FlutterActivity 6 | import io.flutter.plugins.GeneratedPluginRegistrant 7 | 8 | class MainActivity: FlutterActivity() { 9 | override fun onCreate(savedInstanceState: Bundle?) { 10 | super.onCreate(savedInstanceState) 11 | GeneratedPluginRegistrant.registerWith(this) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/common/colors.dart: -------------------------------------------------------------------------------- 1 | library color; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | class ColorPalette { 6 | 7 | // This class is used for custom color 8 | static Color white = Color(0xFFFFFFFF); 9 | static Color blue = Color(0xFF2196F3); 10 | static Color grey = Color(0xFF9E9E9E); 11 | static Color black = Color(0xFF000000); 12 | static Color amber = Color(0xFFFFC107); 13 | static Color orangeAccent = Color(0xFFFFAB40); 14 | static Color red = Color(0xFFF44336); 15 | 16 | } -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /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/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | import GoogleMaps 4 | 5 | @UIApplicationMain 6 | @objc class AppDelegate: FlutterAppDelegate { 7 | override func application( 8 | _ application: UIApplication, 9 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 10 | ) -> Bool { 11 | GeneratedPluginRegistrant.register(with: self) 12 | GMSServices.provideAPIKey("YOUR_API_KEY") 13 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lib/common/navigation.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Navigation { 4 | 5 | // This method to used navigation with adding back button arrow and can back 6 | // to previous page 7 | static intent(BuildContext context, Widget child) { 8 | Navigator.push(context, MaterialPageRoute(builder: (context) => child)); 9 | } 10 | 11 | // This method to used navigation without adding back button arrow and can't back 12 | // to previous page 13 | static intentWithoutBack(BuildContext context, Widget child) { 14 | Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => child)); 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.0' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.3.2' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | jcenter() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #import "AppDelegate.h" 2 | #import "GeneratedPluginRegistrant.h" 3 | 4 | @import GoogleMaps; 5 | 6 | @implementation AppDelegate 7 | 8 | - (BOOL)application:(UIApplication*)application 9 | didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { 10 | // Provide the GoogleMaps API key. 11 | NSString* mapsApiKey = [[NSProcessInfo processInfo] environment][@"MAPS_API_KEY"]; 12 | if ([mapsApiKey length] == 0) { 13 | mapsApiKey = @"YOUR_API_KEY"; 14 | } 15 | [GMSServices provideAPIKey:mapsApiKey]; 16 | 17 | // Register Flutter plugins. 18 | [GeneratedPluginRegistrant registerWithRegistry:self]; 19 | 20 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lib/common/common.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:permission_handler/permission_handler.dart'; 4 | 5 | class Common { 6 | 7 | static showAlertDialogPermission(BuildContext context, String message) { 8 | 9 | // set up the button 10 | Widget okButton = FlatButton( 11 | child: Text("OK"), 12 | onPressed: () { 13 | PermissionHandler().openAppSettings().then((bool hasOpened) => 14 | debugPrint('App Settings opened: ' + hasOpened.toString())); 15 | }, 16 | ); 17 | 18 | // set up the AlertDialog 19 | AlertDialog alert = AlertDialog( 20 | content: Text(message), 21 | actions: [ 22 | okButton, 23 | ], 24 | ); 25 | 26 | // show the dialog 27 | showDialog( 28 | context: context, 29 | builder: (BuildContext context) { 30 | return alert; 31 | }, 32 | ); 33 | } 34 | 35 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Flutter Google Maps 2 | 3 | Flutter application using Google Maps, Get Current Location (Devices), Markers, Camera Position, Bottom Sheet, DraggableScrollableSheet, etc 🔥. 4 | 5 | Click this link to get your own API KEY 6 | 7 | ### Screenshot on Android 8 | 9 |
10 |                
11 | 
12 | 13 | 14 | ### Screenshot on iOS 15 | 16 |
17 |                
18 | 
19 | 20 | ## Author 21 | 22 | * **R Rifa Fauzi Komara** 23 | 24 | Don't forget to follow and give me a ★ 25 | -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:flutter_maps_sample/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /lib/widget/card_type_food.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_maps_sample/common/colors.dart'; 3 | import 'package:flutter_maps_sample/common/sizes.dart'; 4 | 5 | class CardFilter extends StatelessWidget { 6 | 7 | final String filterName; 8 | final GestureTapCallback onTap; 9 | 10 | const CardFilter({Key key, this.filterName, this.onTap}) : super(key: key); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return Container( 15 | padding: EdgeInsets.all(5), 16 | margin: EdgeInsets.all(5), 17 | decoration: BoxDecoration( 18 | border: Border.all(color: Colors.grey[200]), 19 | boxShadow: [ 20 | BoxShadow( 21 | color: ColorPalette.white, 22 | offset: Offset(0.0, 1.5), 23 | blurRadius: 1.5, 24 | ), 25 | ]), 26 | child: Material( 27 | color: Colors.transparent, 28 | child: InkWell( 29 | onTap: onTap, 30 | child: Center( 31 | child: Text( 32 | filterName, 33 | style: TextStyle( 34 | fontSize: Sizes.dp16(context), 35 | ), 36 | ), 37 | ), 38 | ), 39 | ), 40 | ); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/widget/custom_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CustomButton extends StatelessWidget { 4 | final GestureTapCallback onTap; 5 | final IconData iconData; 6 | final Color colorButton, colorIcon, colorBlur; 7 | final double sizeButton, sizeIcon; 8 | final BoxShape boxShape; 9 | final double blurRadius; 10 | final EdgeInsetsGeometry margin; 11 | 12 | CustomButton( 13 | {Key key, 14 | @required this.onTap, 15 | this.iconData, 16 | this.colorButton, 17 | this.colorIcon, 18 | @required this.colorBlur, 19 | this.sizeButton, 20 | this.sizeIcon, 21 | this.boxShape, 22 | @required this.blurRadius, 23 | this.margin}) 24 | : super(key: key); 25 | 26 | @override 27 | Widget build(BuildContext context) { 28 | return InkResponse( 29 | onTap: onTap, 30 | child: Container( 31 | margin: margin, 32 | width: sizeButton, 33 | height: sizeButton, 34 | decoration: BoxDecoration( 35 | color: colorButton, 36 | shape: boxShape, 37 | boxShadow: [ 38 | BoxShadow( 39 | color: colorBlur, 40 | blurRadius: blurRadius, 41 | ), 42 | ], 43 | ), 44 | child: Icon( 45 | iconData, 46 | color: colorIcon, 47 | size: sizeIcon, 48 | ), 49 | ), 50 | ); 51 | } 52 | } -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Flutter (1.0.0) 3 | - google_maps_flutter (0.0.1): 4 | - Flutter 5 | - GoogleMaps 6 | - GoogleMaps (2.7.0): 7 | - GoogleMaps/Maps (= 2.7.0) 8 | - GoogleMaps/Base (2.7.0) 9 | - GoogleMaps/Maps (2.7.0): 10 | - GoogleMaps/Base 11 | - location (0.0.1): 12 | - Flutter 13 | - permission_handler (4.0.0): 14 | - Flutter 15 | 16 | DEPENDENCIES: 17 | - Flutter (from `.symlinks/flutter/ios`) 18 | - google_maps_flutter (from `.symlinks/plugins/google_maps_flutter/ios`) 19 | - location (from `.symlinks/plugins/location/ios`) 20 | - permission_handler (from `.symlinks/plugins/permission_handler/ios`) 21 | 22 | SPEC REPOS: 23 | trunk: 24 | - GoogleMaps 25 | 26 | EXTERNAL SOURCES: 27 | Flutter: 28 | :path: ".symlinks/flutter/ios" 29 | google_maps_flutter: 30 | :path: ".symlinks/plugins/google_maps_flutter/ios" 31 | location: 32 | :path: ".symlinks/plugins/location/ios" 33 | permission_handler: 34 | :path: ".symlinks/plugins/permission_handler/ios" 35 | 36 | SPEC CHECKSUMS: 37 | Flutter: 0e3d915762c693b495b44d77113d4970485de6ec 38 | google_maps_flutter: d0dd62f5a7d39bae61057eb9f52dd778d99c7c6c 39 | GoogleMaps: f79af95cb24d869457b1f961c93d3ce8b2f3b848 40 | location: 3a2eed4dd2fab25e7b7baf2a9efefe82b512d740 41 | permission_handler: 0fb88b8a3c23e31e5de45b8f1bb8b7de28cf8941 42 | 43 | PODFILE CHECKSUM: 10ae9c18d12c9ffc2275c9a159a3b1e281990db0 44 | 45 | COCOAPODS: 1.8.4 46 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lib/ui/splash_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_maps_sample/common/common.dart'; 3 | import 'package:flutter_maps_sample/common/navigation.dart'; 4 | import 'package:flutter_maps_sample/common/sizes.dart'; 5 | import 'package:flutter_maps_sample/ui/maps_screen.dart'; 6 | import 'package:permission_handler/permission_handler.dart'; 7 | 8 | class SplashScreen extends StatefulWidget { 9 | @override 10 | _SplashScreenState createState() => _SplashScreenState(); 11 | } 12 | 13 | class _SplashScreenState extends State { 14 | 15 | @override 16 | void initState() { 17 | super.initState(); 18 | _getPermission(context); 19 | } 20 | 21 | // request permission for location 22 | void _getPermission(BuildContext context) async { 23 | final PermissionHandler _permissionHandler = PermissionHandler(); 24 | var result = await _permissionHandler.requestPermissions([PermissionGroup.location]); 25 | 26 | if (result[PermissionGroup.location] == PermissionStatus.granted) { 27 | _goToMaps(); 28 | } else if(result[PermissionGroup.location] == PermissionStatus.denied) { 29 | Common.showAlertDialogPermission(context, "You need accepted permission for access maps"); 30 | } 31 | } 32 | 33 | void _goToMaps() { 34 | Navigation.intentWithoutBack(context, MapScreen()); 35 | } 36 | 37 | @override 38 | Widget build(BuildContext context) { 39 | return Scaffold( 40 | body: Center( 41 | child: SizedBox( 42 | height: Sizes.width(context) / 2.5, 43 | width: Sizes.width(context) / 2.5, 44 | child: FlutterLogo( 45 | size: 20, 46 | ), 47 | ), 48 | ), 49 | ); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /.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 | .dart_tool/ 26 | .flutter-plugins 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Android related 33 | **/android/**/gradle-wrapper.jar 34 | **/android/.gradle 35 | **/android/captures/ 36 | **/android/gradlew 37 | **/android/gradlew.bat 38 | **/android/local.properties 39 | **/android/**/GeneratedPluginRegistrant.java 40 | 41 | # iOS/XCode related 42 | **/ios/**/*.mode1v3 43 | **/ios/**/*.mode2v3 44 | **/ios/**/*.moved-aside 45 | **/ios/**/*.pbxuser 46 | **/ios/**/*.perspectivev3 47 | **/ios/**/*sync/ 48 | **/ios/**/.sconsign.dblite 49 | **/ios/**/.tags* 50 | **/ios/**/.vagrant/ 51 | **/ios/**/DerivedData/ 52 | **/ios/**/Icon? 53 | **/ios/**/Pods/ 54 | **/ios/**/.symlinks/ 55 | **/ios/**/profile 56 | **/ios/**/xcuserdata 57 | **/ios/.generated/ 58 | **/ios/Flutter/App.framework 59 | **/ios/Flutter/Flutter.framework 60 | **/ios/Flutter/Generated.xcconfig 61 | **/ios/Flutter/app.flx 62 | **/ios/Flutter/app.zip 63 | **/ios/Flutter/flutter_assets/ 64 | **/ios/Flutter/flutter_export_environment.sh 65 | **/ios/ServiceDefinitions.json 66 | **/ios/Runner/GeneratedPluginRegistrant.* 67 | 68 | # Exceptions to above rules. 69 | !**/ios/**/default.mode1v3 70 | !**/ios/**/default.mode2v3 71 | !**/ios/**/default.pbxuser 72 | !**/ios/**/default.perspectivev3 73 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 74 | -------------------------------------------------------------------------------- /lib/common/sizes.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Sizes { 4 | 5 | // This class is used for adding size into a widget. 6 | // Don't use size like this: 7 | // Container(size: 10); => it's not make a screen or widget responsive 8 | // You must used like this: 9 | // Container(size: Sizes.dp4(context)); => it's make a screen or widget responsive 10 | 11 | static height(BuildContext context) { 12 | return MediaQuery.of(context).size.height; 13 | } 14 | 15 | static width(BuildContext context) { 16 | return MediaQuery.of(context).size.width; 17 | } 18 | 19 | static dp4(BuildContext context) { 20 | return MediaQuery.of(context).size.width / 100; 21 | } 22 | 23 | static dp6(BuildContext context) { 24 | return MediaQuery.of(context).size.width / 70; 25 | } 26 | 27 | static dp8(BuildContext context) { 28 | return MediaQuery.of(context).size.width / 54; 29 | } 30 | 31 | static dp10(BuildContext context) { 32 | return MediaQuery.of(context).size.width / 41; 33 | } 34 | 35 | static dp12(BuildContext context) { 36 | return MediaQuery.of(context).size.width / 34; 37 | } 38 | 39 | static dp14(BuildContext context) { 40 | return MediaQuery.of(context).size.width / 29; 41 | } 42 | 43 | static dp16(BuildContext context) { 44 | return MediaQuery.of(context).size.width / 26; 45 | } 46 | 47 | static dp18(BuildContext context) { 48 | return MediaQuery.of(context).size.width / 23; 49 | } 50 | 51 | static dp20(BuildContext context) { 52 | return MediaQuery.of(context).size.width / 20; 53 | } 54 | 55 | static dp22(BuildContext context) { 56 | return MediaQuery.of(context).size.width / 17; 57 | } 58 | 59 | static dp24(BuildContext context) { 60 | return MediaQuery.of(context).size.width / 16; 61 | } 62 | 63 | static dp25(BuildContext context) { 64 | return MediaQuery.of(context).size.width / 15; 65 | } 66 | 67 | } -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 17 | 24 | 28 | 31 | 32 | 33 | 34 | 35 | 36 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /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_maps_sample 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 | io.flutter.embedded_views_preview 46 | 47 | 48 | 49 | NSLocationWhenInUseUsageDescription 50 | Need location when in use 51 | NSLocationAlwaysAndWhenInUseUsageDescription 52 | Always and when in use! 53 | NSLocationUsageDescription 54 | Older devices need location. 55 | NSLocationAlwaysUsageDescription 56 | Can I haz location always? 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /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 28 30 | 31 | sourceSets { 32 | main.java.srcDirs += 'src/main/kotlin' 33 | } 34 | 35 | lintOptions { 36 | disable 'InvalidPackage' 37 | } 38 | 39 | defaultConfig { 40 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 41 | applicationId "com.rifafauzi.flutter_maps_sample" 42 | minSdkVersion 16 43 | targetSdkVersion 28 44 | versionCode flutterVersionCode.toInteger() 45 | versionName flutterVersionName 46 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 47 | } 48 | 49 | buildTypes { 50 | release { 51 | // TODO: Add your own signing config for the release build. 52 | // Signing with the debug keys for now, so `flutter run --release` works. 53 | signingConfig signingConfigs.debug 54 | } 55 | } 56 | } 57 | 58 | flutter { 59 | source '../..' 60 | } 61 | 62 | dependencies { 63 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 64 | testImplementation 'junit:junit:4.12' 65 | androidTestImplementation 'androidx.test.ext:junit:1.1.1' 66 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' 67 | } 68 | -------------------------------------------------------------------------------- /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/Podfile: -------------------------------------------------------------------------------- 1 | # Using a CDN with CocoaPods 1.7.2 or later can save a lot of time on pod installation, but it's experimental rather than the default. 2 | # source 'https://cdn.cocoapods.org/' 3 | 4 | # Uncomment this line to define a global platform for your project 5 | # platform :ios, '9.0' 6 | 7 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 8 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 9 | 10 | project 'Runner', { 11 | 'Debug' => :debug, 12 | 'Profile' => :release, 13 | 'Release' => :release, 14 | } 15 | 16 | def parse_KV_file(file, separator='=') 17 | file_abs_path = File.expand_path(file) 18 | if !File.exists? file_abs_path 19 | return []; 20 | end 21 | pods_ary = [] 22 | skip_line_start_symbols = ["#", "/"] 23 | File.foreach(file_abs_path) { |line| 24 | next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } 25 | plugin = line.split(pattern=separator) 26 | if plugin.length == 2 27 | podname = plugin[0].strip() 28 | path = plugin[1].strip() 29 | podpath = File.expand_path("#{path}", file_abs_path) 30 | pods_ary.push({:name => podname, :path => podpath}); 31 | else 32 | puts "Invalid plugin specification: #{line}" 33 | end 34 | } 35 | return pods_ary 36 | end 37 | 38 | target 'Runner' do 39 | use_frameworks! 40 | 41 | # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock 42 | # referring to absolute paths on developers' machines. 43 | system('rm -rf .symlinks') 44 | system('mkdir -p .symlinks/plugins') 45 | 46 | # Flutter Pods 47 | generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig') 48 | if generated_xcode_build_settings.empty? 49 | puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first." 50 | end 51 | generated_xcode_build_settings.map { |p| 52 | if p[:name] == 'FLUTTER_FRAMEWORK_DIR' 53 | symlink = File.join('.symlinks', 'flutter') 54 | File.symlink(File.dirname(p[:path]), symlink) 55 | pod 'Flutter', :path => File.join(symlink, File.basename(p[:path])) 56 | end 57 | } 58 | 59 | # Plugin Pods 60 | plugin_pods = parse_KV_file('../.flutter-plugins') 61 | plugin_pods.map { |p| 62 | symlink = File.join('.symlinks', 'plugins', p[:name]) 63 | File.symlink(p[:path], symlink) 64 | pod p[:name], :path => File.join(symlink, 'ios') 65 | } 66 | end 67 | 68 | # Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. 69 | install! 'cocoapods', :disable_input_output_paths => true 70 | 71 | post_install do |installer| 72 | installer.pods_project.targets.each do |target| 73 | target.build_configurations.each do |config| 74 | config.build_settings['ENABLE_BITCODE'] = 'NO' 75 | end 76 | end 77 | end 78 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_maps_sample 2 | description: A new Flutter application. 3 | 4 | # The following defines the version and build number for your application. 5 | # A version number is three numbers separated by dots, like 1.2.43 6 | # followed by an optional build number separated by a +. 7 | # Both the version and the builder number may be overridden in flutter 8 | # build by specifying --build-name and --build-number, respectively. 9 | # In Android, build-name is used as versionName while build-number used as versionCode. 10 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 11 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 12 | # Read more about iOS versioning at 13 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 14 | version: 1.0.0+1 15 | 16 | environment: 17 | sdk: ">=2.1.0 <3.0.0" 18 | 19 | dependencies: 20 | flutter: 21 | sdk: flutter 22 | 23 | # The following adds the Cupertino Icons font to your application. 24 | # Use with the CupertinoIcons class for iOS style icons. 25 | cupertino_icons: ^0.1.2 26 | permission_handler: ^4.0.0 27 | location: ^2.3.5 28 | google_maps_flutter: ^0.5.21+10 29 | 30 | dev_dependencies: 31 | flutter_test: 32 | sdk: flutter 33 | 34 | 35 | # For information on the generic Dart part of this file, see the 36 | # following page: https://dart.dev/tools/pub/pubspec 37 | 38 | # The following section is specific to Flutter. 39 | flutter: 40 | 41 | # The following line ensures that the Material Icons font is 42 | # included with your application, so that you can use the icons in 43 | # the material Icons class. 44 | uses-material-design: true 45 | assets: 46 | - images/ 47 | 48 | # To add assets to your application, add an assets section, like this: 49 | # assets: 50 | # - images/a_dot_burr.jpeg 51 | # - images/a_dot_ham.jpeg 52 | 53 | # An image asset can refer to one or more resolution-specific "variants", see 54 | # https://flutter.dev/assets-and-images/#resolution-aware. 55 | 56 | # For details regarding adding assets from package dependencies, see 57 | # https://flutter.dev/assets-and-images/#from-packages 58 | 59 | # To add custom fonts to your application, add a fonts section here, 60 | # in this "flutter" section. Each entry in this list should have a 61 | # "family" key with the font family name, and a "fonts" key with a 62 | # list giving the asset and other descriptors for the font. For 63 | # example: 64 | # fonts: 65 | # - family: Schyler 66 | # fonts: 67 | # - asset: fonts/Schyler-Regular.ttf 68 | # - asset: fonts/Schyler-Italic.ttf 69 | # style: italic 70 | # - family: Trajan Pro 71 | # fonts: 72 | # - asset: fonts/TrajanPro.ttf 73 | # - asset: fonts/TrajanPro_Bold.ttf 74 | # weight: 700 75 | # 76 | # For details regarding fonts from package dependencies, 77 | # see https://flutter.dev/custom-fonts/#from-packages 78 | -------------------------------------------------------------------------------- /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.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | async: 5 | dependency: transitive 6 | description: 7 | name: async 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "2.3.0" 11 | boolean_selector: 12 | dependency: transitive 13 | description: 14 | name: boolean_selector 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "1.0.5" 18 | charcode: 19 | dependency: transitive 20 | description: 21 | name: charcode 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "1.1.2" 25 | collection: 26 | dependency: transitive 27 | description: 28 | name: collection 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "1.14.11" 32 | cupertino_icons: 33 | dependency: "direct main" 34 | description: 35 | name: cupertino_icons 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "0.1.3" 39 | flutter: 40 | dependency: "direct main" 41 | description: flutter 42 | source: sdk 43 | version: "0.0.0" 44 | flutter_test: 45 | dependency: "direct dev" 46 | description: flutter 47 | source: sdk 48 | version: "0.0.0" 49 | google_maps_flutter: 50 | dependency: "direct main" 51 | description: 52 | name: google_maps_flutter 53 | url: "https://pub.dartlang.org" 54 | source: hosted 55 | version: "0.5.21+14" 56 | location: 57 | dependency: "direct main" 58 | description: 59 | name: location 60 | url: "https://pub.dartlang.org" 61 | source: hosted 62 | version: "2.3.5" 63 | matcher: 64 | dependency: transitive 65 | description: 66 | name: matcher 67 | url: "https://pub.dartlang.org" 68 | source: hosted 69 | version: "0.12.5" 70 | meta: 71 | dependency: transitive 72 | description: 73 | name: meta 74 | url: "https://pub.dartlang.org" 75 | source: hosted 76 | version: "1.1.7" 77 | path: 78 | dependency: transitive 79 | description: 80 | name: path 81 | url: "https://pub.dartlang.org" 82 | source: hosted 83 | version: "1.6.4" 84 | pedantic: 85 | dependency: transitive 86 | description: 87 | name: pedantic 88 | url: "https://pub.dartlang.org" 89 | source: hosted 90 | version: "1.8.0+1" 91 | permission_handler: 92 | dependency: "direct main" 93 | description: 94 | name: permission_handler 95 | url: "https://pub.dartlang.org" 96 | source: hosted 97 | version: "4.0.0" 98 | quiver: 99 | dependency: transitive 100 | description: 101 | name: quiver 102 | url: "https://pub.dartlang.org" 103 | source: hosted 104 | version: "2.0.5" 105 | sky_engine: 106 | dependency: transitive 107 | description: flutter 108 | source: sdk 109 | version: "0.0.99" 110 | source_span: 111 | dependency: transitive 112 | description: 113 | name: source_span 114 | url: "https://pub.dartlang.org" 115 | source: hosted 116 | version: "1.5.5" 117 | stack_trace: 118 | dependency: transitive 119 | description: 120 | name: stack_trace 121 | url: "https://pub.dartlang.org" 122 | source: hosted 123 | version: "1.9.3" 124 | stream_channel: 125 | dependency: transitive 126 | description: 127 | name: stream_channel 128 | url: "https://pub.dartlang.org" 129 | source: hosted 130 | version: "2.0.0" 131 | string_scanner: 132 | dependency: transitive 133 | description: 134 | name: string_scanner 135 | url: "https://pub.dartlang.org" 136 | source: hosted 137 | version: "1.0.5" 138 | term_glyph: 139 | dependency: transitive 140 | description: 141 | name: term_glyph 142 | url: "https://pub.dartlang.org" 143 | source: hosted 144 | version: "1.1.0" 145 | test_api: 146 | dependency: transitive 147 | description: 148 | name: test_api 149 | url: "https://pub.dartlang.org" 150 | source: hosted 151 | version: "0.2.5" 152 | typed_data: 153 | dependency: transitive 154 | description: 155 | name: typed_data 156 | url: "https://pub.dartlang.org" 157 | source: hosted 158 | version: "1.1.6" 159 | vector_math: 160 | dependency: transitive 161 | description: 162 | name: vector_math 163 | url: "https://pub.dartlang.org" 164 | source: hosted 165 | version: "2.0.8" 166 | sdks: 167 | dart: ">=2.2.2 <3.0.0" 168 | flutter: ">=1.5.0 <2.0.0" 169 | -------------------------------------------------------------------------------- /lib/widget/card_bottom_sheet.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_maps_sample/common/colors.dart'; 3 | import 'package:flutter_maps_sample/common/sizes.dart'; 4 | 5 | class CardBottomSheet extends StatelessWidget { 6 | final String image, 7 | restaurantName, 8 | review, 9 | currentHasTag, 10 | totalHasTag, 11 | location; 12 | 13 | const CardBottomSheet( 14 | {Key key, 15 | this.image, 16 | this.restaurantName, 17 | this.review, 18 | this.currentHasTag, 19 | this.totalHasTag, 20 | this.location}) 21 | : super(key: key); 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | return Column( 26 | crossAxisAlignment: CrossAxisAlignment.start, 27 | mainAxisSize: MainAxisSize.min, 28 | children: [ 29 | Image.network( 30 | image, 31 | height: Sizes.width(context) / 3, 32 | width: Sizes.width(context), 33 | fit: BoxFit.cover, 34 | ), 35 | SizedBox( 36 | height: Sizes.dp12(context), 37 | ), 38 | Padding( 39 | padding: EdgeInsets.only( 40 | left: Sizes.dp8(context), 41 | right: Sizes.dp8(context), 42 | bottom: Sizes.dp8(context), 43 | ), 44 | child: Text( 45 | restaurantName, 46 | overflow: TextOverflow.ellipsis, 47 | maxLines: 1, 48 | style: TextStyle( 49 | color: ColorPalette.black, 50 | fontSize: Sizes.dp22(context), 51 | fontWeight: FontWeight.bold, 52 | ), 53 | ), 54 | ), 55 | Padding( 56 | padding: EdgeInsets.only( 57 | left: Sizes.dp8(context), 58 | right: Sizes.dp8(context), 59 | bottom: Sizes.dp8(context), 60 | ), 61 | child: Container( 62 | child: Row( 63 | children: [ 64 | Container( 65 | child: Icon( 66 | Icons.star, 67 | color: ColorPalette.amber, 68 | size: Sizes.dp20(context), 69 | ), 70 | ), 71 | Container( 72 | child: Icon( 73 | Icons.star, 74 | color: ColorPalette.amber, 75 | size: Sizes.dp20(context), 76 | ), 77 | ), 78 | Container( 79 | child: Icon( 80 | Icons.star, 81 | color: ColorPalette.amber, 82 | size: Sizes.dp20(context), 83 | ), 84 | ), 85 | Container( 86 | child: Icon( 87 | Icons.star, 88 | color: ColorPalette.amber, 89 | size: Sizes.dp20(context), 90 | ), 91 | ), 92 | Container( 93 | child: Icon( 94 | Icons.star, 95 | color: ColorPalette.amber, 96 | size: Sizes.dp20(context), 97 | ), 98 | ), 99 | Container( 100 | child: Text( 101 | review, 102 | style: TextStyle( 103 | color: Colors.black54, 104 | fontSize: Sizes.dp16(context), 105 | ), 106 | ), 107 | ), 108 | ], 109 | ), 110 | ), 111 | ), 112 | Padding( 113 | padding: EdgeInsets.only( 114 | left: Sizes.dp8(context), 115 | right: Sizes.dp8(context), 116 | bottom: Sizes.dp8(context), 117 | ), 118 | child: Text( 119 | "#$currentHasTag of $totalHasTag Restaurant in $location", 120 | style: TextStyle( 121 | color: Colors.black54, 122 | fontSize: Sizes.dp16(context), 123 | ), 124 | ), 125 | ), 126 | SizedBox( 127 | height: Sizes.dp16(context), 128 | ), 129 | Padding( 130 | padding: EdgeInsets.only( 131 | left: Sizes.dp8(context), 132 | right: Sizes.dp8(context), 133 | ), 134 | child: Container( 135 | width: Sizes.width(context), 136 | child: RaisedButton( 137 | child: Text( 138 | "More Info", 139 | style: TextStyle(fontWeight: FontWeight.bold), 140 | ), 141 | color: ColorPalette.orangeAccent, 142 | onPressed: () {}, 143 | ), 144 | ), 145 | ), 146 | SizedBox( 147 | height: Sizes.dp16(context), 148 | ), 149 | ], 150 | ); 151 | } 152 | } 153 | -------------------------------------------------------------------------------- /lib/widget/card_draggable_sheet.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_maps_sample/common/colors.dart'; 3 | import 'package:flutter_maps_sample/common/sizes.dart'; 4 | 5 | class CardDraggableSheet extends StatelessWidget { 6 | final String image, restaurantName, review, status, type, distance; 7 | 8 | const CardDraggableSheet( 9 | {Key key, 10 | this.image, 11 | this.restaurantName, 12 | this.review, 13 | this.status, 14 | this.type, 15 | this.distance}) 16 | : super(key: key); 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return Container( 21 | height: Sizes.width(context) / 4, 22 | child: Row( 23 | mainAxisSize: MainAxisSize.max, 24 | children: [ 25 | Image.network( 26 | image, 27 | height: Sizes.width(context) / 3, 28 | width: Sizes.width(context) / 3, 29 | ), 30 | Expanded( 31 | child: Container( 32 | margin: EdgeInsets.only( 33 | left: Sizes.dp10(context), 34 | ), 35 | child: Column( 36 | crossAxisAlignment: CrossAxisAlignment.start, 37 | children: [ 38 | Text( 39 | restaurantName, 40 | overflow: TextOverflow.ellipsis, 41 | maxLines: 1, 42 | style: TextStyle( 43 | color: ColorPalette.black, 44 | fontSize: Sizes.dp16(context), 45 | fontWeight: FontWeight.bold, 46 | ), 47 | ), 48 | Row( 49 | children: [ 50 | Icon( 51 | Icons.star, 52 | color: ColorPalette.amber, 53 | size: Sizes.dp14(context), 54 | ), 55 | Icon( 56 | Icons.star, 57 | color: ColorPalette.amber, 58 | size: Sizes.dp14(context), 59 | ), 60 | Icon( 61 | Icons.star, 62 | color: ColorPalette.amber, 63 | size: Sizes.dp14(context), 64 | ), 65 | Icon( 66 | Icons.star, 67 | color: ColorPalette.amber, 68 | size: Sizes.dp14(context), 69 | ), 70 | Icon( 71 | Icons.star, 72 | color: ColorPalette.amber, 73 | size: Sizes.dp14(context), 74 | ), 75 | Padding( 76 | padding: EdgeInsets.only( 77 | left: Sizes.dp4(context), 78 | right: Sizes.dp4(context), 79 | ), 80 | child: Text( 81 | review, 82 | style: TextStyle( 83 | color: Colors.black54, 84 | fontSize: Sizes.dp12(context), 85 | ), 86 | ), 87 | ), 88 | Text( 89 | "\u00B7", 90 | style: TextStyle( 91 | color: ColorPalette.red, 92 | fontSize: Sizes.dp25(context), 93 | ), 94 | ), 95 | Padding( 96 | padding: EdgeInsets.only( 97 | left: Sizes.dp4(context), 98 | right: Sizes.dp4(context), 99 | ), 100 | child: Text( 101 | status, 102 | style: TextStyle( 103 | color: ColorPalette.red, 104 | fontSize: Sizes.dp12(context), 105 | ), 106 | ), 107 | ), 108 | ], 109 | ), 110 | Text( 111 | type, 112 | style: TextStyle( 113 | color: Colors.black54, 114 | fontSize: Sizes.dp12(context), 115 | ), 116 | ), 117 | Spacer(), 118 | Row( 119 | children: [ 120 | Icon( 121 | Icons.location_on, 122 | color: ColorPalette.grey, 123 | size: Sizes.dp14(context), 124 | ), 125 | Text( 126 | distance, 127 | style: TextStyle( 128 | color: Colors.black54, 129 | fontSize: Sizes.dp14(context), 130 | ), 131 | ), 132 | ], 133 | ), 134 | ], 135 | ), 136 | ), 137 | ), 138 | ], 139 | ), 140 | ); 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /lib/ui/maps_screen.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_maps_sample/common/colors.dart'; 5 | import 'package:flutter_maps_sample/common/sizes.dart'; 6 | import 'package:flutter_maps_sample/common/string_image_assets.dart'; 7 | import 'package:flutter_maps_sample/widget/card_bottom_sheet.dart'; 8 | import 'package:flutter_maps_sample/widget/card_draggable_sheet.dart'; 9 | import 'package:flutter_maps_sample/widget/card_type_food.dart'; 10 | import 'package:flutter_maps_sample/widget/custom_button.dart'; 11 | import 'package:google_maps_flutter/google_maps_flutter.dart'; 12 | import 'package:location/location.dart'; 13 | 14 | class MapScreen extends StatefulWidget { 15 | @override 16 | _MapScreenState createState() => _MapScreenState(); 17 | } 18 | 19 | class _MapScreenState extends State with SingleTickerProviderStateMixin { 20 | 21 | Completer _controller = Completer(); 22 | LocationData _currentLocation; 23 | var _location = new Location(); 24 | static LatLng _initialPosition; 25 | final Set _markers = Set(); 26 | 27 | void _onMapCreated(GoogleMapController controller) { 28 | _controller.complete(controller); 29 | } 30 | 31 | void _getCurrentLocation() async { 32 | final GoogleMapController controller = await _controller.future; 33 | 34 | try { 35 | _currentLocation = await _location.getLocation(); 36 | } on Exception { 37 | _currentLocation = null; 38 | } 39 | 40 | controller.animateCamera(CameraUpdate.newCameraPosition( 41 | CameraPosition( 42 | bearing: 0, 43 | target: LatLng(_currentLocation.latitude, _currentLocation.longitude), 44 | zoom: 17.0, 45 | ), 46 | )); 47 | } 48 | 49 | Future _getStartingLocation() async { 50 | _currentLocation = await _location.getLocation(); 51 | return LatLng(_currentLocation.latitude, _currentLocation.longitude); 52 | } 53 | 54 | @override 55 | void initState() { 56 | super.initState(); 57 | _getStartingLocation().then((value) { 58 | setState(() { 59 | _initialPosition = value; 60 | }); 61 | }); 62 | _markers.add( 63 | Marker( 64 | markerId: MarkerId("37.787314, -122.406072"), 65 | position: LatLng(37.787314, -122.406072), 66 | icon: BitmapDescriptor.defaultMarker, 67 | onTap: () => _showModalBottomSheet(), 68 | ), 69 | ); 70 | _markers.add( 71 | Marker( 72 | markerId: MarkerId("37.786576, -122.406126"), 73 | position: LatLng(37.786576, -122.406126), 74 | icon: BitmapDescriptor.defaultMarker, 75 | onTap: () => _showModalBottomSheet(), 76 | ), 77 | ); 78 | _markers.add( 79 | Marker( 80 | markerId: MarkerId("37.787475, -122.408100"), 81 | position: LatLng(37.787475, -122.408100), 82 | icon: BitmapDescriptor.defaultMarker, 83 | onTap: () => _showModalBottomSheet(), 84 | ), 85 | ); 86 | } 87 | 88 | @override 89 | void dispose() { 90 | super.dispose(); 91 | } 92 | 93 | @override 94 | Widget build(BuildContext context) { 95 | return Scaffold( 96 | body: SizedBox.expand( 97 | child: _initialPosition == null 98 | ? Container( 99 | child: Column( 100 | mainAxisAlignment: MainAxisAlignment.center, 101 | children: [ 102 | Image.asset( 103 | StringImageAssets.loadingMaps, 104 | ), 105 | Text("Loading Maps..."), 106 | ], 107 | ), 108 | ) 109 | : Stack( 110 | children: [ 111 | _googleMaps(), 112 | _toolbar(), 113 | _bottomSheet(), 114 | ], 115 | ), 116 | ), 117 | ); 118 | } 119 | 120 | Widget _googleMaps() { 121 | return GoogleMap( 122 | myLocationEnabled: true, 123 | mapType: MapType.normal, 124 | onMapCreated: _onMapCreated, 125 | zoomGesturesEnabled: true, 126 | initialCameraPosition: CameraPosition( 127 | target: _initialPosition, 128 | zoom: 17.0, 129 | ), 130 | myLocationButtonEnabled: false, 131 | markers: _markers, 132 | ); 133 | } 134 | 135 | Widget _toolbar() { 136 | return Row( 137 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 138 | children: [ 139 | CustomButton( 140 | blurRadius: 10.0, 141 | colorBlur: ColorPalette.grey, 142 | iconData: Icons.arrow_back, 143 | colorButton: ColorPalette.white, 144 | sizeButton: Sizes.width(context) / 9, 145 | sizeIcon: Sizes.width(context) / 18, 146 | colorIcon: ColorPalette.blue, 147 | boxShape: BoxShape.circle, 148 | margin: EdgeInsets.only( 149 | top: Sizes.dp25(context), left: Sizes.dp12(context)), 150 | onTap: () { 151 | //Do something 152 | }, 153 | ), 154 | CustomButton( 155 | blurRadius: 10.0, 156 | colorBlur: ColorPalette.grey, 157 | iconData: Icons.my_location, 158 | colorButton: ColorPalette.white, 159 | sizeButton: Sizes.width(context) / 9, 160 | sizeIcon: Sizes.width(context) / 18, 161 | colorIcon: ColorPalette.blue, 162 | boxShape: BoxShape.circle, 163 | margin: EdgeInsets.only( 164 | top: Sizes.dp25(context), right: Sizes.dp12(context)), 165 | onTap: _getCurrentLocation, 166 | ), 167 | ], 168 | ); 169 | } 170 | 171 | void _showModalBottomSheet() { 172 | showModalBottomSheet( 173 | context: context, 174 | builder: (builder){ 175 | return Container( 176 | width: Sizes.width(context), 177 | child: Stack( 178 | children: [ 179 | CardBottomSheet( 180 | image: "https://lh5.googleusercontent.com/p/AF1QipO3VPL9m-b355xWeg4MXmOQTauFAEkavSluTtJU=w225-h160-k-no", 181 | restaurantName: "Gramercy Tavern", 182 | review: "(672)", 183 | currentHasTag: "3,665", 184 | totalHasTag: "8,605", 185 | location: "Jakarta", 186 | ), 187 | Column( 188 | mainAxisSize: MainAxisSize.min, 189 | children: [ 190 | Center( 191 | child: Container( 192 | margin: EdgeInsets.only( 193 | top: Sizes.dp12(context), 194 | ), 195 | height: 6, 196 | width: 50, 197 | decoration: BoxDecoration( 198 | color: ColorPalette.white, 199 | borderRadius: BorderRadius.circular(5), 200 | ), 201 | ), 202 | ), 203 | Row( 204 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 205 | children: [ 206 | CustomButton( 207 | blurRadius: 10.0, 208 | colorBlur: ColorPalette.grey, 209 | iconData: Icons.close, 210 | colorButton: ColorPalette.white, 211 | sizeButton: Sizes.width(context) / 12, 212 | sizeIcon: Sizes.dp18(context), 213 | colorIcon: ColorPalette.blue, 214 | boxShape: BoxShape.circle, 215 | margin: EdgeInsets.only( 216 | left: Sizes.dp12(context)), 217 | onTap: () { 218 | Navigator.pop(context); 219 | }, 220 | ), 221 | Container( 222 | margin: EdgeInsets.only( 223 | left: Sizes.dp12(context)), 224 | child: IconButton( 225 | iconSize: Sizes.width(context) / 12, 226 | icon: Icon(Icons.favorite_border, color: ColorPalette.white, size: Sizes.width(context) / 12,), 227 | onPressed: () { 228 | 229 | }, 230 | ), 231 | ), 232 | ], 233 | ), 234 | ], 235 | ), 236 | ], 237 | ), 238 | ); 239 | } 240 | ); 241 | } 242 | 243 | Widget _bottomSheet() { 244 | return DraggableScrollableSheet( 245 | initialChildSize: 0.1, 246 | minChildSize: 0.1, 247 | maxChildSize: 0.9, 248 | builder: (BuildContext context, scrollController) { 249 | return Container( 250 | padding: EdgeInsets.symmetric( 251 | horizontal: 15, 252 | vertical: 10, 253 | ), 254 | decoration: BoxDecoration( 255 | color: ColorPalette.white, 256 | borderRadius: BorderRadius.only( 257 | topLeft: Radius.circular(20.0), 258 | topRight: Radius.circular(20.0), 259 | ), 260 | boxShadow: [ 261 | BoxShadow( 262 | color: ColorPalette.grey, 263 | blurRadius: 10.0, 264 | ), 265 | ], 266 | ), 267 | child: ListView( 268 | controller: scrollController, 269 | children: [ 270 | Center( 271 | child: Container( 272 | height: 8, 273 | width: 50, 274 | decoration: BoxDecoration( 275 | color: ColorPalette.grey, 276 | borderRadius: BorderRadius.circular(5), 277 | ), 278 | ), 279 | ), 280 | SizedBox( 281 | height: 20, 282 | ), 283 | Text( 284 | "Restaurants Nearby", 285 | textAlign: TextAlign.center, 286 | style: TextStyle( 287 | fontWeight: FontWeight.bold, 288 | fontSize: Sizes.dp20(context), 289 | ), 290 | ), 291 | SizedBox( 292 | height: 20, 293 | ), 294 | SingleChildScrollView( 295 | scrollDirection: Axis.horizontal, 296 | child: Row( 297 | mainAxisSize: MainAxisSize.max, 298 | children: [ 299 | Container( 300 | padding: EdgeInsets.all(5), 301 | margin: EdgeInsets.all(5), 302 | decoration: BoxDecoration( 303 | border: Border.all(color: Colors.grey[200]), 304 | boxShadow: [ 305 | BoxShadow( 306 | color: ColorPalette.white, 307 | offset: Offset(0.0, 1.5), 308 | blurRadius: 1.5, 309 | ), 310 | ]), 311 | child: Material( 312 | color: Colors.transparent, 313 | child: InkWell( 314 | onTap: () {}, 315 | child: Center( 316 | child: Icon( 317 | Icons.filter_list, 318 | size: Sizes.dp20(context), 319 | ), 320 | ), 321 | ), 322 | ), 323 | ), 324 | CardFilter( 325 | filterName: "Price", 326 | onTap: () {}, 327 | ), 328 | CardFilter( 329 | filterName: "Breakfast", 330 | onTap: () {}, 331 | ), 332 | CardFilter( 333 | filterName: "Lunch", 334 | onTap: () {}, 335 | ), 336 | CardFilter( 337 | filterName: "Dinner", 338 | onTap: () {}, 339 | ), 340 | CardFilter( 341 | filterName: "Recomended", 342 | onTap: () {}, 343 | ), 344 | ], 345 | ), 346 | ), 347 | Container( 348 | child: Divider( 349 | color: Colors.black45, 350 | ), 351 | ), 352 | CardDraggableSheet( 353 | image: "https://lh5.googleusercontent.com/p/AF1QipO3VPL9m-b355xWeg4MXmOQTauFAEkavSluTtJU=w225-h160-k-no", 354 | restaurantName: "Gramercy Tavern", 355 | review: "(672)", 356 | status: "Closed", 357 | type: "Pizza", 358 | distance: "1.5 km", 359 | ), 360 | Container( 361 | child: Divider( 362 | color: Colors.black45, 363 | ), 364 | ), 365 | CardDraggableSheet( 366 | image: "https://lh5.googleusercontent.com/p/AF1QipO3VPL9m-b355xWeg4MXmOQTauFAEkavSluTtJU=w225-h160-k-no", 367 | restaurantName: "Gramercy Tavern", 368 | review: "(672)", 369 | status: "Closed", 370 | type: "Pizza", 371 | distance: "1.5 km", 372 | ), 373 | Container( 374 | child: Divider( 375 | color: Colors.black45, 376 | ), 377 | ), 378 | CardDraggableSheet( 379 | image: "https://lh5.googleusercontent.com/p/AF1QipO3VPL9m-b355xWeg4MXmOQTauFAEkavSluTtJU=w225-h160-k-no", 380 | restaurantName: "Gramercy Tavern", 381 | review: "(672)", 382 | status: "Closed", 383 | type: "Pizza", 384 | distance: "1.5 km", 385 | ), 386 | Container( 387 | child: Divider( 388 | color: Colors.black45, 389 | ), 390 | ), 391 | CardDraggableSheet( 392 | image: "https://lh5.googleusercontent.com/p/AF1QipO3VPL9m-b355xWeg4MXmOQTauFAEkavSluTtJU=w225-h160-k-no", 393 | restaurantName: "Gramercy Tavern", 394 | review: "(672)", 395 | status: "Closed", 396 | type: "Pizza", 397 | distance: "1.5 km", 398 | ), 399 | Container( 400 | child: Divider( 401 | color: Colors.black45, 402 | ), 403 | ), 404 | CardDraggableSheet( 405 | image: "https://lh5.googleusercontent.com/p/AF1QipO3VPL9m-b355xWeg4MXmOQTauFAEkavSluTtJU=w225-h160-k-no", 406 | restaurantName: "Gramercy Tavern", 407 | review: "(672)", 408 | status: "Closed", 409 | type: "Pizza", 410 | distance: "1.5 km", 411 | ), 412 | ], 413 | ), 414 | ); 415 | }, 416 | ); 417 | } 418 | 419 | } -------------------------------------------------------------------------------- /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 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 15 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; 16 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 17 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 18 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 19 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 20 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 21 | AA4CE4FD062159B5D4AE50A8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28641919DD22AB904DAA536E /* Pods_Runner.framework */; }; 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 | 28641919DD22AB904DAA536E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 43 | 343A589F2C8F8715654B7567 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 44 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 45 | 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 46 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 47 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 48 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 49 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 50 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 51 | 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 52 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 53 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 54 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 55 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 56 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 57 | A3C42F39065531DEC18DAA65 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 58 | FD004EAB5B8CC38C82607E01 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 59 | /* End PBXFileReference section */ 60 | 61 | /* Begin PBXFrameworksBuildPhase section */ 62 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 63 | isa = PBXFrameworksBuildPhase; 64 | buildActionMask = 2147483647; 65 | files = ( 66 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, 67 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, 68 | AA4CE4FD062159B5D4AE50A8 /* Pods_Runner.framework in Frameworks */, 69 | ); 70 | runOnlyForDeploymentPostprocessing = 0; 71 | }; 72 | /* End PBXFrameworksBuildPhase section */ 73 | 74 | /* Begin PBXGroup section */ 75 | 1B22D8E8838C4E4C36BEB876 /* Frameworks */ = { 76 | isa = PBXGroup; 77 | children = ( 78 | 28641919DD22AB904DAA536E /* Pods_Runner.framework */, 79 | ); 80 | name = Frameworks; 81 | sourceTree = ""; 82 | }; 83 | 9740EEB11CF90186004384FC /* Flutter */ = { 84 | isa = PBXGroup; 85 | children = ( 86 | 3B80C3931E831B6300D905FE /* App.framework */, 87 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 88 | 9740EEBA1CF902C7004384FC /* Flutter.framework */, 89 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 90 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 91 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 92 | ); 93 | name = Flutter; 94 | sourceTree = ""; 95 | }; 96 | 97C146E51CF9000F007C117D = { 97 | isa = PBXGroup; 98 | children = ( 99 | 9740EEB11CF90186004384FC /* Flutter */, 100 | 97C146F01CF9000F007C117D /* Runner */, 101 | 97C146EF1CF9000F007C117D /* Products */, 102 | C31012005E12DF236EDAC0F1 /* Pods */, 103 | 1B22D8E8838C4E4C36BEB876 /* Frameworks */, 104 | ); 105 | sourceTree = ""; 106 | }; 107 | 97C146EF1CF9000F007C117D /* Products */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 97C146EE1CF9000F007C117D /* Runner.app */, 111 | ); 112 | name = Products; 113 | sourceTree = ""; 114 | }; 115 | 97C146F01CF9000F007C117D /* Runner */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 119 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 120 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 121 | 97C147021CF9000F007C117D /* Info.plist */, 122 | 97C146F11CF9000F007C117D /* Supporting Files */, 123 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 124 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 125 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 126 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 127 | ); 128 | path = Runner; 129 | sourceTree = ""; 130 | }; 131 | 97C146F11CF9000F007C117D /* Supporting Files */ = { 132 | isa = PBXGroup; 133 | children = ( 134 | ); 135 | name = "Supporting Files"; 136 | sourceTree = ""; 137 | }; 138 | C31012005E12DF236EDAC0F1 /* Pods */ = { 139 | isa = PBXGroup; 140 | children = ( 141 | 343A589F2C8F8715654B7567 /* Pods-Runner.debug.xcconfig */, 142 | A3C42F39065531DEC18DAA65 /* Pods-Runner.release.xcconfig */, 143 | FD004EAB5B8CC38C82607E01 /* Pods-Runner.profile.xcconfig */, 144 | ); 145 | name = Pods; 146 | path = Pods; 147 | sourceTree = ""; 148 | }; 149 | /* End PBXGroup section */ 150 | 151 | /* Begin PBXNativeTarget section */ 152 | 97C146ED1CF9000F007C117D /* Runner */ = { 153 | isa = PBXNativeTarget; 154 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 155 | buildPhases = ( 156 | 97C0E6DDD6028D74C1D159A4 /* [CP] Check Pods Manifest.lock */, 157 | 9740EEB61CF901F6004384FC /* Run Script */, 158 | 97C146EA1CF9000F007C117D /* Sources */, 159 | 97C146EB1CF9000F007C117D /* Frameworks */, 160 | 97C146EC1CF9000F007C117D /* Resources */, 161 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 162 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 163 | 350BECC648F49CB7B659680F /* [CP] Embed Pods Frameworks */, 164 | 1694872876D2B8A0100DAAB6 /* [CP] Copy Pods Resources */, 165 | ); 166 | buildRules = ( 167 | ); 168 | dependencies = ( 169 | ); 170 | name = Runner; 171 | productName = Runner; 172 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 173 | productType = "com.apple.product-type.application"; 174 | }; 175 | /* End PBXNativeTarget section */ 176 | 177 | /* Begin PBXProject section */ 178 | 97C146E61CF9000F007C117D /* Project object */ = { 179 | isa = PBXProject; 180 | attributes = { 181 | LastUpgradeCheck = 1020; 182 | ORGANIZATIONNAME = "The Chromium Authors"; 183 | TargetAttributes = { 184 | 97C146ED1CF9000F007C117D = { 185 | CreatedOnToolsVersion = 7.3.1; 186 | LastSwiftMigration = 0910; 187 | }; 188 | }; 189 | }; 190 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 191 | compatibilityVersion = "Xcode 3.2"; 192 | developmentRegion = en; 193 | hasScannedForEncodings = 0; 194 | knownRegions = ( 195 | en, 196 | Base, 197 | ); 198 | mainGroup = 97C146E51CF9000F007C117D; 199 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 200 | projectDirPath = ""; 201 | projectRoot = ""; 202 | targets = ( 203 | 97C146ED1CF9000F007C117D /* Runner */, 204 | ); 205 | }; 206 | /* End PBXProject section */ 207 | 208 | /* Begin PBXResourcesBuildPhase section */ 209 | 97C146EC1CF9000F007C117D /* Resources */ = { 210 | isa = PBXResourcesBuildPhase; 211 | buildActionMask = 2147483647; 212 | files = ( 213 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 214 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 215 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 216 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 217 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 218 | ); 219 | runOnlyForDeploymentPostprocessing = 0; 220 | }; 221 | /* End PBXResourcesBuildPhase section */ 222 | 223 | /* Begin PBXShellScriptBuildPhase section */ 224 | 1694872876D2B8A0100DAAB6 /* [CP] Copy Pods Resources */ = { 225 | isa = PBXShellScriptBuildPhase; 226 | buildActionMask = 2147483647; 227 | files = ( 228 | ); 229 | inputPaths = ( 230 | ); 231 | name = "[CP] Copy Pods Resources"; 232 | outputPaths = ( 233 | ); 234 | runOnlyForDeploymentPostprocessing = 0; 235 | shellPath = /bin/sh; 236 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; 237 | showEnvVarsInLog = 0; 238 | }; 239 | 350BECC648F49CB7B659680F /* [CP] Embed Pods Frameworks */ = { 240 | isa = PBXShellScriptBuildPhase; 241 | buildActionMask = 2147483647; 242 | files = ( 243 | ); 244 | inputPaths = ( 245 | ); 246 | name = "[CP] Embed Pods Frameworks"; 247 | outputPaths = ( 248 | ); 249 | runOnlyForDeploymentPostprocessing = 0; 250 | shellPath = /bin/sh; 251 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; 252 | showEnvVarsInLog = 0; 253 | }; 254 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 255 | isa = PBXShellScriptBuildPhase; 256 | buildActionMask = 2147483647; 257 | files = ( 258 | ); 259 | inputPaths = ( 260 | ); 261 | name = "Thin Binary"; 262 | outputPaths = ( 263 | ); 264 | runOnlyForDeploymentPostprocessing = 0; 265 | shellPath = /bin/sh; 266 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; 267 | }; 268 | 9740EEB61CF901F6004384FC /* Run Script */ = { 269 | isa = PBXShellScriptBuildPhase; 270 | buildActionMask = 2147483647; 271 | files = ( 272 | ); 273 | inputPaths = ( 274 | ); 275 | name = "Run Script"; 276 | outputPaths = ( 277 | ); 278 | runOnlyForDeploymentPostprocessing = 0; 279 | shellPath = /bin/sh; 280 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 281 | }; 282 | 97C0E6DDD6028D74C1D159A4 /* [CP] Check Pods Manifest.lock */ = { 283 | isa = PBXShellScriptBuildPhase; 284 | buildActionMask = 2147483647; 285 | files = ( 286 | ); 287 | inputFileListPaths = ( 288 | ); 289 | inputPaths = ( 290 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 291 | "${PODS_ROOT}/Manifest.lock", 292 | ); 293 | name = "[CP] Check Pods Manifest.lock"; 294 | outputFileListPaths = ( 295 | ); 296 | outputPaths = ( 297 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", 298 | ); 299 | runOnlyForDeploymentPostprocessing = 0; 300 | shellPath = /bin/sh; 301 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 302 | showEnvVarsInLog = 0; 303 | }; 304 | /* End PBXShellScriptBuildPhase section */ 305 | 306 | /* Begin PBXSourcesBuildPhase section */ 307 | 97C146EA1CF9000F007C117D /* Sources */ = { 308 | isa = PBXSourcesBuildPhase; 309 | buildActionMask = 2147483647; 310 | files = ( 311 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 312 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 313 | ); 314 | runOnlyForDeploymentPostprocessing = 0; 315 | }; 316 | /* End PBXSourcesBuildPhase section */ 317 | 318 | /* Begin PBXVariantGroup section */ 319 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 320 | isa = PBXVariantGroup; 321 | children = ( 322 | 97C146FB1CF9000F007C117D /* Base */, 323 | ); 324 | name = Main.storyboard; 325 | sourceTree = ""; 326 | }; 327 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 328 | isa = PBXVariantGroup; 329 | children = ( 330 | 97C147001CF9000F007C117D /* Base */, 331 | ); 332 | name = LaunchScreen.storyboard; 333 | sourceTree = ""; 334 | }; 335 | /* End PBXVariantGroup section */ 336 | 337 | /* Begin XCBuildConfiguration section */ 338 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 339 | isa = XCBuildConfiguration; 340 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 341 | buildSettings = { 342 | ALWAYS_SEARCH_USER_PATHS = NO; 343 | CLANG_ANALYZER_NONNULL = YES; 344 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 345 | CLANG_CXX_LIBRARY = "libc++"; 346 | CLANG_ENABLE_MODULES = YES; 347 | CLANG_ENABLE_OBJC_ARC = YES; 348 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 349 | CLANG_WARN_BOOL_CONVERSION = YES; 350 | CLANG_WARN_COMMA = YES; 351 | CLANG_WARN_CONSTANT_CONVERSION = YES; 352 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 353 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 354 | CLANG_WARN_EMPTY_BODY = YES; 355 | CLANG_WARN_ENUM_CONVERSION = YES; 356 | CLANG_WARN_INFINITE_RECURSION = YES; 357 | CLANG_WARN_INT_CONVERSION = YES; 358 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 359 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 360 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 361 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 362 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 363 | CLANG_WARN_STRICT_PROTOTYPES = YES; 364 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 365 | CLANG_WARN_UNREACHABLE_CODE = YES; 366 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 367 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 368 | COPY_PHASE_STRIP = NO; 369 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 370 | ENABLE_NS_ASSERTIONS = NO; 371 | ENABLE_STRICT_OBJC_MSGSEND = YES; 372 | GCC_C_LANGUAGE_STANDARD = gnu99; 373 | GCC_NO_COMMON_BLOCKS = YES; 374 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 375 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 376 | GCC_WARN_UNDECLARED_SELECTOR = YES; 377 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 378 | GCC_WARN_UNUSED_FUNCTION = YES; 379 | GCC_WARN_UNUSED_VARIABLE = YES; 380 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 381 | MTL_ENABLE_DEBUG_INFO = NO; 382 | SDKROOT = iphoneos; 383 | TARGETED_DEVICE_FAMILY = "1,2"; 384 | VALIDATE_PRODUCT = YES; 385 | }; 386 | name = Profile; 387 | }; 388 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 389 | isa = XCBuildConfiguration; 390 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 391 | buildSettings = { 392 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 393 | CLANG_ENABLE_MODULES = YES; 394 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 395 | ENABLE_BITCODE = NO; 396 | FRAMEWORK_SEARCH_PATHS = ( 397 | "$(inherited)", 398 | "$(PROJECT_DIR)/Flutter", 399 | ); 400 | INFOPLIST_FILE = Runner/Info.plist; 401 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 402 | LIBRARY_SEARCH_PATHS = ( 403 | "$(inherited)", 404 | "$(PROJECT_DIR)/Flutter", 405 | ); 406 | PRODUCT_BUNDLE_IDENTIFIER = com.rifafauzi.flutterMapsSample; 407 | PRODUCT_NAME = "$(TARGET_NAME)"; 408 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 409 | SWIFT_VERSION = 4.0; 410 | VERSIONING_SYSTEM = "apple-generic"; 411 | }; 412 | name = Profile; 413 | }; 414 | 97C147031CF9000F007C117D /* Debug */ = { 415 | isa = XCBuildConfiguration; 416 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 417 | buildSettings = { 418 | ALWAYS_SEARCH_USER_PATHS = NO; 419 | CLANG_ANALYZER_NONNULL = YES; 420 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 421 | CLANG_CXX_LIBRARY = "libc++"; 422 | CLANG_ENABLE_MODULES = YES; 423 | CLANG_ENABLE_OBJC_ARC = YES; 424 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 425 | CLANG_WARN_BOOL_CONVERSION = YES; 426 | CLANG_WARN_COMMA = YES; 427 | CLANG_WARN_CONSTANT_CONVERSION = YES; 428 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 429 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 430 | CLANG_WARN_EMPTY_BODY = YES; 431 | CLANG_WARN_ENUM_CONVERSION = YES; 432 | CLANG_WARN_INFINITE_RECURSION = YES; 433 | CLANG_WARN_INT_CONVERSION = YES; 434 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 435 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 436 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 437 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 438 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 439 | CLANG_WARN_STRICT_PROTOTYPES = YES; 440 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 441 | CLANG_WARN_UNREACHABLE_CODE = YES; 442 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 443 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 444 | COPY_PHASE_STRIP = NO; 445 | DEBUG_INFORMATION_FORMAT = dwarf; 446 | ENABLE_STRICT_OBJC_MSGSEND = YES; 447 | ENABLE_TESTABILITY = YES; 448 | GCC_C_LANGUAGE_STANDARD = gnu99; 449 | GCC_DYNAMIC_NO_PIC = NO; 450 | GCC_NO_COMMON_BLOCKS = YES; 451 | GCC_OPTIMIZATION_LEVEL = 0; 452 | GCC_PREPROCESSOR_DEFINITIONS = ( 453 | "DEBUG=1", 454 | "$(inherited)", 455 | ); 456 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 457 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 458 | GCC_WARN_UNDECLARED_SELECTOR = YES; 459 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 460 | GCC_WARN_UNUSED_FUNCTION = YES; 461 | GCC_WARN_UNUSED_VARIABLE = YES; 462 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 463 | MTL_ENABLE_DEBUG_INFO = YES; 464 | ONLY_ACTIVE_ARCH = YES; 465 | SDKROOT = iphoneos; 466 | TARGETED_DEVICE_FAMILY = "1,2"; 467 | }; 468 | name = Debug; 469 | }; 470 | 97C147041CF9000F007C117D /* Release */ = { 471 | isa = XCBuildConfiguration; 472 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 473 | buildSettings = { 474 | ALWAYS_SEARCH_USER_PATHS = NO; 475 | CLANG_ANALYZER_NONNULL = YES; 476 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 477 | CLANG_CXX_LIBRARY = "libc++"; 478 | CLANG_ENABLE_MODULES = YES; 479 | CLANG_ENABLE_OBJC_ARC = YES; 480 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 481 | CLANG_WARN_BOOL_CONVERSION = YES; 482 | CLANG_WARN_COMMA = YES; 483 | CLANG_WARN_CONSTANT_CONVERSION = YES; 484 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 485 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 486 | CLANG_WARN_EMPTY_BODY = YES; 487 | CLANG_WARN_ENUM_CONVERSION = YES; 488 | CLANG_WARN_INFINITE_RECURSION = YES; 489 | CLANG_WARN_INT_CONVERSION = YES; 490 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 491 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 492 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 493 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 494 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 495 | CLANG_WARN_STRICT_PROTOTYPES = YES; 496 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 497 | CLANG_WARN_UNREACHABLE_CODE = YES; 498 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 499 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 500 | COPY_PHASE_STRIP = NO; 501 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 502 | ENABLE_NS_ASSERTIONS = NO; 503 | ENABLE_STRICT_OBJC_MSGSEND = YES; 504 | GCC_C_LANGUAGE_STANDARD = gnu99; 505 | GCC_NO_COMMON_BLOCKS = YES; 506 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 507 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 508 | GCC_WARN_UNDECLARED_SELECTOR = YES; 509 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 510 | GCC_WARN_UNUSED_FUNCTION = YES; 511 | GCC_WARN_UNUSED_VARIABLE = YES; 512 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 513 | MTL_ENABLE_DEBUG_INFO = NO; 514 | SDKROOT = iphoneos; 515 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 516 | TARGETED_DEVICE_FAMILY = "1,2"; 517 | VALIDATE_PRODUCT = YES; 518 | }; 519 | name = Release; 520 | }; 521 | 97C147061CF9000F007C117D /* Debug */ = { 522 | isa = XCBuildConfiguration; 523 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 524 | buildSettings = { 525 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 526 | CLANG_ENABLE_MODULES = YES; 527 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 528 | ENABLE_BITCODE = NO; 529 | FRAMEWORK_SEARCH_PATHS = ( 530 | "$(inherited)", 531 | "$(PROJECT_DIR)/Flutter", 532 | ); 533 | INFOPLIST_FILE = Runner/Info.plist; 534 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 535 | LIBRARY_SEARCH_PATHS = ( 536 | "$(inherited)", 537 | "$(PROJECT_DIR)/Flutter", 538 | ); 539 | PRODUCT_BUNDLE_IDENTIFIER = com.rifafauzi.flutterMapsSample; 540 | PRODUCT_NAME = "$(TARGET_NAME)"; 541 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 542 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 543 | SWIFT_VERSION = 4.0; 544 | VERSIONING_SYSTEM = "apple-generic"; 545 | }; 546 | name = Debug; 547 | }; 548 | 97C147071CF9000F007C117D /* Release */ = { 549 | isa = XCBuildConfiguration; 550 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 551 | buildSettings = { 552 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 553 | CLANG_ENABLE_MODULES = YES; 554 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 555 | ENABLE_BITCODE = NO; 556 | FRAMEWORK_SEARCH_PATHS = ( 557 | "$(inherited)", 558 | "$(PROJECT_DIR)/Flutter", 559 | ); 560 | INFOPLIST_FILE = Runner/Info.plist; 561 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 562 | LIBRARY_SEARCH_PATHS = ( 563 | "$(inherited)", 564 | "$(PROJECT_DIR)/Flutter", 565 | ); 566 | PRODUCT_BUNDLE_IDENTIFIER = com.rifafauzi.flutterMapsSample; 567 | PRODUCT_NAME = "$(TARGET_NAME)"; 568 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 569 | SWIFT_VERSION = 4.0; 570 | VERSIONING_SYSTEM = "apple-generic"; 571 | }; 572 | name = Release; 573 | }; 574 | /* End XCBuildConfiguration section */ 575 | 576 | /* Begin XCConfigurationList section */ 577 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 578 | isa = XCConfigurationList; 579 | buildConfigurations = ( 580 | 97C147031CF9000F007C117D /* Debug */, 581 | 97C147041CF9000F007C117D /* Release */, 582 | 249021D3217E4FDB00AE95B9 /* Profile */, 583 | ); 584 | defaultConfigurationIsVisible = 0; 585 | defaultConfigurationName = Release; 586 | }; 587 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 588 | isa = XCConfigurationList; 589 | buildConfigurations = ( 590 | 97C147061CF9000F007C117D /* Debug */, 591 | 97C147071CF9000F007C117D /* Release */, 592 | 249021D4217E4FDB00AE95B9 /* Profile */, 593 | ); 594 | defaultConfigurationIsVisible = 0; 595 | defaultConfigurationName = Release; 596 | }; 597 | /* End XCConfigurationList section */ 598 | }; 599 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 600 | } 601 | --------------------------------------------------------------------------------