Skip to content

Commit

Permalink
fix(#55) : fixes a bug 'makers on the map sometimes disappear when en…
Browse files Browse the repository at this point in the history
…tering the full screen' by handling the null and empty data of position as well as markers
  • Loading branch information
i-am-ijaz committed Jun 6, 2023
1 parent fdfe5e1 commit dae4a35
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 22 deletions.
14 changes: 10 additions & 4 deletions lib/app/config/geo_full.dart
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
import 'dart:async';

import 'package:flutter/material.dart';

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:provider/provider.dart';

import 'package:parental_control/services/api_path.dart';
import 'package:parental_control/services/auth.dart';
import 'package:parental_control/services/database.dart';
import 'package:parental_control/services/geo_locator_service.dart';
import 'package:provider/provider.dart';

class GeoFull extends StatefulWidget {
final Position initialPosition;
Expand Down Expand Up @@ -73,6 +75,8 @@ class _GeoFullState extends State<GeoFull> {

//TODO:Make function async
Future<List<Marker>> initMarker(Map<String, dynamic> data) async {
if (data['position'] == null) return [];

allMarkers.add(
Marker(
infoWindow: InfoWindow(
Expand All @@ -83,8 +87,9 @@ class _GeoFullState extends State<GeoFull> {
},
),
markerId: MarkerId(data['id']),
icon:
BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueMagenta),
icon: BitmapDescriptor.defaultMarkerWithHue(
BitmapDescriptor.hueMagenta,
),
draggable: false,
onTap: () {
debugPrint('Marker Tapped');
Expand Down Expand Up @@ -113,6 +118,7 @@ class _GeoFullState extends State<GeoFull> {
myLocationEnabled: true,
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
if (allMarkers.isEmpty) return;
setState(() {
markers[MarkerId(allMarkers.first.markerId.value)] =
allMarkers.first;
Expand Down
36 changes: 22 additions & 14 deletions lib/app/config/geo_location.dart
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
import 'dart:async';

import 'package:flutter/material.dart';

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:provider/provider.dart';

import 'package:parental_control/services/api_path.dart';
import 'package:parental_control/services/auth.dart';
import 'package:parental_control/services/database.dart';
import 'package:parental_control/services/geo_locator_service.dart';
import 'package:provider/provider.dart';

class Geo extends StatefulWidget {
final Position initialPosition;
Expand Down Expand Up @@ -39,20 +41,21 @@ class _GeoState extends State<Geo> {
geoService.getCurrentLocation.listen((position) {
centerScreen(position);
});
getAllChildLocations();
_getAllChildLocations();
super.initState();
}

Future<Uint8List> getChildMarkerImage(Map<String, dynamic> data) async {
var bytes =
(await NetworkAssetBundle(Uri.parse(data['image'])).load(data['image']))
.buffer
.asUint8List();
Future<Uint8List> _getChildMarkerImage(Map<String, dynamic> data) async {
final bytes = (await NetworkAssetBundle(Uri.parse(data['image'])).load(
data['image'],
))
.buffer
.asUint8List();

return bytes;
}

void getAllChildLocations() async {
void _getAllChildLocations() async {
childLocationsList = [];
await FirebaseFirestore.instance
.collection(APIPath.children(_currentUser.uid))
Expand All @@ -62,7 +65,7 @@ class _GeoState extends State<Geo> {
for (var i = 0; i < document.docs.length; i++) {
childLocationsList.add(document.docs[i].data);
initMarker(document.docs[i].data());
getChildMarkerImage(document.docs[i].data());
_getChildMarkerImage(document.docs[i].data());
debugPrint(
'This is the list of children ${childLocationsList.length}',
);
Expand All @@ -77,6 +80,8 @@ class _GeoState extends State<Geo> {
debugPrint(data['id']);
debugPrint(data['position']?.latitude);
debugPrint(data['position']?.longitude);
if (data['position'] == null) return [];

allMarkers.add(
Marker(
infoWindow: InfoWindow(
Expand All @@ -89,8 +94,9 @@ class _GeoState extends State<Geo> {
markerId: MarkerId(data['id']),
//TODO:Implement child image as marker
//icon: BitmapDescriptor.fromBytes(imageData),
icon:
BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueMagenta),
icon: BitmapDescriptor.defaultMarkerWithHue(
BitmapDescriptor.hueMagenta,
),
draggable: false,
onTap: () {
debugPrint('Marker Tapped');
Expand Down Expand Up @@ -121,9 +127,11 @@ class _GeoState extends State<Geo> {
),
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
if (allMarkers.isEmpty) return;
setState(() {
markers[MarkerId(allMarkers.first.markerId.value)] =
allMarkers.first;
markers[MarkerId(
allMarkers.first.markerId.value,
)] = allMarkers.first;
});
},
),
Expand Down
11 changes: 7 additions & 4 deletions lib/app/pages/parent_page.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import 'package:flutter/material.dart';

import 'package:geolocator/geolocator.dart';
import 'package:provider/provider.dart';
import 'package:showcaseview/showcaseview.dart';

import 'package:parental_control/app/config/geo_full.dart';
import 'package:parental_control/app/config/geo_location.dart';
import 'package:parental_control/app/pages/child_details_page.dart';
Expand All @@ -17,8 +21,6 @@ import 'package:parental_control/services/geo_locator_service.dart';
import 'package:parental_control/services/notification_service.dart';
import 'package:parental_control/services/shared_preferences.dart';
import 'package:parental_control/theme/theme.dart';
import 'package:provider/provider.dart';
import 'package:showcaseview/showcaseview.dart';

enum MapScreenState { Full, Small }

Expand Down Expand Up @@ -243,8 +245,9 @@ class _ParentPageState extends State<ParentPage>

Provider<NotificationService>(
create: (_) => NotificationService(),
builder: (context, __) =>
NotificationPage.create(context, widget.auth!),
builder: (context, __) {
return NotificationPage.create(context, widget.auth!);
},
),
],
),
Expand Down

0 comments on commit dae4a35

Please sign in to comment.