diff --git a/android/.gitignore b/android/.gitignore
new file mode 100644
index 0000000..bc2100d
--- /dev/null
+++ b/android/.gitignore
@@ -0,0 +1,7 @@
+gradle-wrapper.jar
+/.gradle
+/captures/
+/gradlew
+/gradlew.bat
+/local.properties
+GeneratedPluginRegistrant.java
diff --git a/android/app/src/main/kotlin/com/example/geosmart/MainActivity.kt b/android/app/src/main/kotlin/com/example/geosmart/MainActivity.kt
new file mode 100644
index 0000000..e9664ed
--- /dev/null
+++ b/android/app/src/main/kotlin/com/example/geosmart/MainActivity.kt
@@ -0,0 +1,6 @@
+package com.example.geosmart
+
+import io.flutter.embedding.android.FlutterActivity
+
+class MainActivity: FlutterActivity() {
+}
diff --git a/ios/.gitignore b/ios/.gitignore
new file mode 100644
index 0000000..e96ef60
--- /dev/null
+++ b/ios/.gitignore
@@ -0,0 +1,32 @@
+*.mode1v3
+*.mode2v3
+*.moved-aside
+*.pbxuser
+*.perspectivev3
+**/*sync/
+.sconsign.dblite
+.tags*
+**/.vagrant/
+**/DerivedData/
+Icon?
+**/Pods/
+**/.symlinks/
+profile
+xcuserdata
+**/.generated/
+Flutter/App.framework
+Flutter/Flutter.framework
+Flutter/Flutter.podspec
+Flutter/Generated.xcconfig
+Flutter/app.flx
+Flutter/app.zip
+Flutter/flutter_assets/
+Flutter/flutter_export_environment.sh
+ServiceDefinitions.json
+Runner/GeneratedPluginRegistrant.*
+
+# Exceptions to above rules.
+!default.mode1v3
+!default.mode2v3
+!default.pbxuser
+!default.perspectivev3
diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..f9b0d7c
--- /dev/null
+++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..f9b0d7c
--- /dev/null
+++ b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/lib/bloc/authentication/authentication.dart b/lib/bloc/authentication/authentication.dart
new file mode 100644
index 0000000..69b9858
--- /dev/null
+++ b/lib/bloc/authentication/authentication.dart
@@ -0,0 +1,3 @@
+export 'authentication_bloc.dart';
+export 'authentication_event.dart';
+export 'authentication_state.dart';
diff --git a/lib/bloc/authentication/authentication_bloc.dart b/lib/bloc/authentication/authentication_bloc.dart
new file mode 100644
index 0000000..ea0cc31
--- /dev/null
+++ b/lib/bloc/authentication/authentication_bloc.dart
@@ -0,0 +1,38 @@
+import 'package:alice/alice.dart';
+import 'package:dio/dio.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:geosmart/bloc/authentication/authentication_event.dart';
+import 'package:geosmart/bloc/authentication/authentication_state.dart';
+import 'package:geosmart/service/setting_service.dart';
+import 'package:meta/meta.dart';
+
+class AuthenticationBloc
+ extends Bloc {
+ final Alice alice;
+ final Dio dio;
+
+ AuthenticationBloc({
+ @required this.alice,
+ @required this.dio,
+ }) : super(AuthenticationInitial());
+
+ @override
+ Stream mapEventToState(
+ AuthenticationEvent event,
+ ) async* {
+ if (event is AuthenticationStarted) {
+ yield AuthenticationProgress();
+ final s = await SettingService().getSetting();
+ if (s.isValid()) {
+ yield AuthenticationSuccess();
+ } else {
+ yield AuthenticationFailed();
+ }
+ }
+
+ if (event is AuthenticationClear) {
+ await SettingService().clearSetting();
+ yield AuthenticationFailed();
+ }
+ }
+}
diff --git a/lib/bloc/authentication/authentication_event.dart b/lib/bloc/authentication/authentication_event.dart
new file mode 100644
index 0000000..bef0b4f
--- /dev/null
+++ b/lib/bloc/authentication/authentication_event.dart
@@ -0,0 +1,12 @@
+import 'package:equatable/equatable.dart';
+
+class AuthenticationEvent extends Equatable {
+ const AuthenticationEvent();
+
+ @override
+ List