mirror of
https://github.com/supanadit/geo-smart-app.git
synced 2024-11-24 19:26:24 +00:00
Connecting with Geo Smart System
This commit is contained in:
parent
093c5b870d
commit
8bec726206
@ -5,7 +5,8 @@ This is the Mobile Application for [Geo Smart System](https://github.com/supanad
|
|||||||
- Flutter
|
- Flutter
|
||||||
|
|
||||||
## Todo
|
## Todo
|
||||||
- Integration With Geo Smart System
|
- Integration With Geo Smart System ( OK )
|
||||||
|
- Documentation
|
||||||
|
|
||||||
## License
|
## License
|
||||||
Copyright 2019 Supan Adit Pratama
|
Copyright 2019 Supan Adit Pratama
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
<application
|
<application
|
||||||
android:name="io.flutter.app.FlutterApplication"
|
android:name="io.flutter.app.FlutterApplication"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="geo_app">
|
android:label="Geo Smart App"
|
||||||
|
android:usesCleartextTraffic="true">
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="com.google.android.geo.API_KEY"
|
android:name="com.google.android.geo.API_KEY"
|
||||||
android:value="AIzaSyCjhBV5aq1gsTCYsr6QCCxYusFlBa3DEMs" />
|
android:value="AIzaSyCjhBV5aq1gsTCYsr6QCCxYusFlBa3DEMs" />
|
||||||
|
3
lib/config.dart
Normal file
3
lib/config.dart
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
class Config {
|
||||||
|
static const String api = "http://192.168.1.6:8080";
|
||||||
|
}
|
@ -2,6 +2,7 @@ import 'dart:async';
|
|||||||
|
|
||||||
import 'package:background_location/background_location.dart';
|
import 'package:background_location/background_location.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:geo_app/model/position.dart';
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||||
|
|
||||||
void main() => runApp(MyApp());
|
void main() => runApp(MyApp());
|
||||||
@ -55,12 +56,23 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
double accuracy = 0.0;
|
double accuracy = 0.0;
|
||||||
double bearing = 0.0;
|
double bearing = 0.0;
|
||||||
double speed = 0.0;
|
double speed = 0.0;
|
||||||
|
String message = "Connecting to Server";
|
||||||
|
bool _finish = false;
|
||||||
|
Position _position;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
BackgroundLocation.startLocationService();
|
BackgroundLocation.startLocationService();
|
||||||
|
message = "Connecting to Server";
|
||||||
|
Position.getPosition().then((position) {
|
||||||
|
setState(() {
|
||||||
|
_position = position;
|
||||||
|
_finish = this._position.isValid();
|
||||||
|
});
|
||||||
|
}, onError: (error) {
|
||||||
|
message = "Something wrong";
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static final CameraPosition _kGooglePlex = CameraPosition(
|
static final CameraPosition _kGooglePlex = CameraPosition(
|
||||||
@ -71,33 +83,60 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return new Scaffold(
|
return new Scaffold(
|
||||||
body: GoogleMap(
|
body: Stack(
|
||||||
mapType: MapType.normal,
|
children: <Widget>[
|
||||||
initialCameraPosition: _kGooglePlex,
|
GoogleMap(
|
||||||
myLocationEnabled: true,
|
mapType: MapType.normal,
|
||||||
myLocationButtonEnabled: true,
|
initialCameraPosition: _kGooglePlex,
|
||||||
onMapCreated: (GoogleMapController controller) {
|
myLocationEnabled: true,
|
||||||
_controller.complete(controller);
|
myLocationButtonEnabled: true,
|
||||||
BackgroundLocation.getLocationUpdates((location) async {
|
onMapCreated: (GoogleMapController controller) {
|
||||||
setState(() {
|
_controller.complete(controller);
|
||||||
this.latitude = location.latitude;
|
BackgroundLocation.getLocationUpdates((location) async {
|
||||||
this.longitude = location.longitude;
|
setState(() {
|
||||||
this.accuracy = location.accuracy;
|
this.latitude = location.latitude;
|
||||||
this.altitude = location.altitude;
|
this.longitude = location.longitude;
|
||||||
this.bearing = location.bearing;
|
this.accuracy = location.accuracy;
|
||||||
this.speed = location.speed;
|
this.altitude = location.altitude;
|
||||||
});
|
this.bearing = location.bearing;
|
||||||
final GoogleMapController controller = await _controller.future;
|
this.speed = location.speed;
|
||||||
controller.animateCamera(
|
|
||||||
CameraUpdate.newCameraPosition(
|
if (this._position != null) {
|
||||||
new CameraPosition(
|
if (this._position.isValid()) {
|
||||||
target: LatLng(this.latitude, this.longitude),
|
this._position.lat = this.latitude.toString();
|
||||||
zoom: 19.151926040649414,
|
this._position.lng = this.longitude.toString();
|
||||||
|
this._position.sendPosition();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// Make Camera Follow the Marker
|
||||||
|
// final GoogleMapController controller = await _controller.future;
|
||||||
|
// controller.animateCamera(
|
||||||
|
// CameraUpdate.newCameraPosition(
|
||||||
|
// new CameraPosition(
|
||||||
|
// target: LatLng(this.latitude, this.longitude),
|
||||||
|
// zoom: 19.151926040649414,
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// );
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
Visibility(
|
||||||
|
visible: !_finish,
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.black26.withOpacity(0.8),
|
||||||
|
),
|
||||||
|
child: Center(
|
||||||
|
child: Text(
|
||||||
|
message,
|
||||||
|
style: TextStyle(color: Colors.white),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
),
|
||||||
});
|
)
|
||||||
},
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
72
lib/model/position.dart
Normal file
72
lib/model/position.dart
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:geo_app/config.dart';
|
||||||
|
import 'package:geo_app/model/response.dart';
|
||||||
|
import 'package:geo_app/model/unique_id.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
|
class Position {
|
||||||
|
String id;
|
||||||
|
String type;
|
||||||
|
String lat;
|
||||||
|
String lng;
|
||||||
|
|
||||||
|
Position({this.id, this.type, this.lat, this.lng});
|
||||||
|
|
||||||
|
Position.fromJson(Map<String, dynamic> json) {
|
||||||
|
id = json['id'];
|
||||||
|
type = json['type'];
|
||||||
|
lat = json['lat'];
|
||||||
|
lng = json['lng'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['id'] = this.id;
|
||||||
|
data['type'] = this.type;
|
||||||
|
data['lat'] = this.lat;
|
||||||
|
data['lng'] = this.lng;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Future<Position> getPosition() async {
|
||||||
|
SharedPreferences sp = await SharedPreferences.getInstance();
|
||||||
|
String keyName = "unique_id";
|
||||||
|
String spId = (sp.getString(keyName) ?? null);
|
||||||
|
Position position = new Position(
|
||||||
|
id: spId,
|
||||||
|
type: "user",
|
||||||
|
lat: "0.0",
|
||||||
|
lng: "0.0",
|
||||||
|
);
|
||||||
|
if (spId == null) {
|
||||||
|
final response = await http.get(Config.api + "/unique/id");
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
position.id = UniqueId.fromJson(json.decode(response.body)).id;
|
||||||
|
} else {
|
||||||
|
throw Exception("Something Error");
|
||||||
|
}
|
||||||
|
sp.setString(keyName, position.id);
|
||||||
|
}
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isValid() {
|
||||||
|
return id != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Response> sendPosition() async {
|
||||||
|
Response result;
|
||||||
|
final response = await http.post(
|
||||||
|
Config.api + "/set/point",
|
||||||
|
body: json.encode(this.toJson()),
|
||||||
|
);
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
result = Response.fromJson(json.decode(response.body));
|
||||||
|
} else {
|
||||||
|
throw Exception("Something Error");
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
15
lib/model/response.dart
Normal file
15
lib/model/response.dart
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
class Response {
|
||||||
|
String status;
|
||||||
|
|
||||||
|
Response({this.status});
|
||||||
|
|
||||||
|
Response.fromJson(Map<String, dynamic> json) {
|
||||||
|
status = json['status'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['status'] = this.status;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
15
lib/model/unique_id.dart
Normal file
15
lib/model/unique_id.dart
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
class UniqueId {
|
||||||
|
String id;
|
||||||
|
|
||||||
|
UniqueId({this.id});
|
||||||
|
|
||||||
|
UniqueId.fromJson(Map<String, dynamic> json) {
|
||||||
|
id = json['id'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['id'] = this.id;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
207
pubspec.lock
207
pubspec.lock
@ -1,6 +1,27 @@
|
|||||||
# Generated by pub
|
# Generated by pub
|
||||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||||
packages:
|
packages:
|
||||||
|
adhara_socket_io:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: adhara_socket_io
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.4.1"
|
||||||
|
analyzer:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: analyzer
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.38.5"
|
||||||
|
args:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: args
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.5.2"
|
||||||
async:
|
async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -22,6 +43,20 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.5"
|
version: "1.0.5"
|
||||||
|
build:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: build
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.2.1"
|
||||||
|
build_config:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: build_config
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.4.1+1"
|
||||||
charcode:
|
charcode:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -29,6 +64,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.2"
|
version: "1.1.2"
|
||||||
|
checked_yaml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: checked_yaml
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.2"
|
||||||
collection:
|
collection:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -36,6 +78,27 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.14.11"
|
version: "1.14.11"
|
||||||
|
convert:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: convert
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.1"
|
||||||
|
crypto:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: crypto
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.3"
|
||||||
|
csslib:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: csslib
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.16.1"
|
||||||
cupertino_icons:
|
cupertino_icons:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -43,6 +106,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.2"
|
version: "0.1.2"
|
||||||
|
dart_style:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: dart_style
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.3.3"
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -53,6 +123,20 @@ packages:
|
|||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
front_end:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: front_end
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.27"
|
||||||
|
glob:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: glob
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.2.0"
|
||||||
google_maps_flutter:
|
google_maps_flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -60,6 +144,62 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.21+8"
|
version: "0.5.21+8"
|
||||||
|
html:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: html
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.14.0+3"
|
||||||
|
http:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: http
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.12.0+2"
|
||||||
|
http_parser:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: http_parser
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.3"
|
||||||
|
js:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: js
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.6.1+1"
|
||||||
|
json_annotation:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: json_annotation
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.0"
|
||||||
|
json_serializable:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: json_serializable
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.2.3"
|
||||||
|
kernel:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: kernel
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.3.27"
|
||||||
|
logging:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: logging
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.11.3+2"
|
||||||
matcher:
|
matcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -74,6 +214,27 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.7"
|
version: "1.1.7"
|
||||||
|
node_interop:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: node_interop
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.3"
|
||||||
|
node_io:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: node_io
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1+2"
|
||||||
|
package_config:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_config
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -95,6 +256,20 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.3.0"
|
version: "3.3.0"
|
||||||
|
pub_semver:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pub_semver
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.4.2"
|
||||||
|
pubspec_parse:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pubspec_parse
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.5"
|
||||||
quiver:
|
quiver:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -102,11 +277,25 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.5"
|
version: "2.0.5"
|
||||||
|
shared_preferences:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: shared_preferences
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.5.4+3"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.99"
|
version: "0.0.99"
|
||||||
|
source_gen:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: source_gen
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.9.4+6"
|
||||||
source_span:
|
source_span:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -163,6 +352,20 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.8"
|
version: "2.0.8"
|
||||||
|
watcher:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: watcher
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.9.7+12"
|
||||||
|
yaml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: yaml
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.0"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=2.2.2 <3.0.0"
|
dart: ">=2.3.0 <3.0.0"
|
||||||
flutter: ">=1.5.0 <2.0.0"
|
flutter: ">=1.6.7 <2.0.0"
|
||||||
|
@ -25,6 +25,10 @@ dependencies:
|
|||||||
cupertino_icons: ^0.1.2
|
cupertino_icons: ^0.1.2
|
||||||
google_maps_flutter: ^0.5.21+8
|
google_maps_flutter: ^0.5.21+8
|
||||||
background_location: ^0.0.7
|
background_location: ^0.0.7
|
||||||
|
adhara_socket_io: ^0.4.1
|
||||||
|
http: ^0.12.0+2
|
||||||
|
json_serializable: ^3.2.3
|
||||||
|
shared_preferences: ^0.5.4+3
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
Loading…
Reference in New Issue
Block a user