dev cont.

main_production_asset_tracking
Sikander Saleem 3 weeks ago
parent 2a560abcb3
commit 4b932099f5

@ -632,5 +632,8 @@ class URLs {
// Asset Tracking APIs
static get getAssetsFromPenguin => "$_baseUrl/PenguinIN/GetAssetsFromPenguin";
static get getFloorMap => "$_baseUrl/PenguinIN/floors/";
static get getPenguinFloors => "$_baseUrl/PenguinIN/floors/";
static get getPenguinSites => "$_baseUrl/PenguinIN/sites/";
static get getPenguinBuildings => "$_baseUrl/PenguinIN/buildings/";
static get getPenguinDepartments => "$_baseUrl/PenguinIN/departments/";
}

@ -62,7 +62,7 @@ class _AssetTrackingPageState extends State<AssetTrackingPage> with SingleTicker
child: SegmentedButton<int>(
multiSelectionEnabled: false,
emptySelectionAllowed: false,
expandedInsets: const EdgeInsets.only(left: 16, top: 16, right: 16, bottom: 8),
expandedInsets: const EdgeInsets.only(left: 16, top: 8, right: 16, bottom: 8),
style: SegmentedButton.styleFrom(
side: BorderSide(color: AppColor.borderColor(context)),
textStyle: AppTextStyles.bodyText,
@ -99,7 +99,7 @@ class _AssetTrackingPageState extends State<AssetTrackingPage> with SingleTicker
SafeArea(
child: AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
child: selectedIndex == 3 ? MapTrackingPage(inAppView: true) : listView(),
child: selectedIndex == 3 ? MapTrackingPage() : listView(),
),
).expanded,
],
@ -149,32 +149,33 @@ class _AssetTrackingPageState extends State<AssetTrackingPage> with SingleTicker
return FadeTransition(
opacity: animation,
child: SlideTransition(
position: slideAnimation,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StatusLabel(
label: (provider.assetsList[itemIndex].location?.isLive ?? false) ? "Live" : "Not Live",
radius: 4,
textColor: AppColor.getPriorityStatusTextColor(context, (provider.assetsList[itemIndex].location?.isLive ?? false) ? 0 : 1),
backgroundColor: AppColor.getPriorityStatusColor(context, (provider.assetsList[itemIndex].location?.isLive ?? false) ? 0 : 1),
),
4.height,
InfoHeader16Widget(provider.assetsList[itemIndex].label ?? ""),
InfoTextWidget(label: "Serial No", value: provider.assetsList[itemIndex].label, showEmptyValue: true),
InfoTextWidget(label: "Type", value: provider.assetsList[itemIndex].type?.name, showEmptyValue: true),
InfoTextWidget(label: "Status", value: provider.assetsList[itemIndex].status?.name, showEmptyValue: true),
InfoTextWidget(label: "Department", value: provider.assetsList[itemIndex].department?.name, showEmptyValue: true),
InfoTextWidget(
label: "Last seen",
value: provider.assetsList[itemIndex].location?.lastSeen?.toServiceRequestDetailsFormat,
showEmptyValue: true,
showArrow: true,
arrowMsg: "View on map",
),
],
).toShadowContainer(context)).onPress((){
position: slideAnimation,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StatusLabel(
label: (provider.assetsList[itemIndex].location?.isLive ?? false) ? "Live" : "Not Live",
radius: 4,
textColor: AppColor.getPriorityStatusTextColor(context, (provider.assetsList[itemIndex].location?.isLive ?? false) ? 0 : 1),
backgroundColor: AppColor.getPriorityStatusColor(context, (provider.assetsList[itemIndex].location?.isLive ?? false) ? 0 : 1),
),
4.height,
InfoHeader16Widget(provider.assetsList[itemIndex].label ?? ""),
InfoTextWidget(label: "Serial No", value: provider.assetsList[itemIndex].label, showEmptyValue: true),
InfoTextWidget(label: "Type", value: provider.assetsList[itemIndex].type?.name, showEmptyValue: true),
InfoTextWidget(label: "Status", value: provider.assetsList[itemIndex].status?.name, showEmptyValue: true),
InfoTextWidget(label: "Department", value: provider.assetsList[itemIndex].department?.name, showEmptyValue: true),
InfoTextWidget(
label: "Last seen",
value: provider.assetsList[itemIndex].location?.lastSeen?.toServiceRequestDetailsFormat,
showEmptyValue: true,
showArrow: true,
arrowMsg: "View on map",
),
],
).toShadowContainer(context))
.onPress(() {
Navigator.push(context, MaterialPageRoute(builder: (context) => MapTrackingPage(assetTrackingData: provider.assetsList[itemIndex])));
}),
);

@ -67,14 +67,14 @@ class AssetTrackingProvider extends ChangeNotifier {
Future<FloorMapModel?> getFloorMap(int floorId) async {
FloorMapModel? floorMapModel;
// try {
final response = await ApiManager.instance.get(URLs.getFloorMap + "$floorId/maps");
try {
final response = await ApiManager.instance.get(URLs.getPenguinFloors + "$floorId/maps");
if (response.statusCode >= 200 && response.statusCode < 300) {
floorMapModel = FloorMapModel.fromJson(json.decode(response.body)["data"]);
}
return floorMapModel;
// } catch (error) {
// return floorMapModel;
// }
} catch (error) {
return floorMapModel;
}
}
}

@ -5,9 +5,11 @@ import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_map_geojson2/flutter_map_geojson2.dart';
import 'package:latlong2/latlong.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/widgets/item_views/info_text_widget.dart';
import 'asset_tracking_provider.dart';
import 'models/asset_tracking_model.dart';
@ -15,9 +17,8 @@ import 'models/floor_map_model.dart';
class MapTrackingPage extends StatefulWidget {
final AssetTrackingModel? assetTrackingData;
final bool inAppView;
MapTrackingPage({Key? key, this.inAppView = false, this.assetTrackingData}) : super(key: key);
MapTrackingPage({Key? key, this.assetTrackingData}) : super(key: key);
@override
_MapTrackingPageState createState() {
@ -29,33 +30,38 @@ class _MapTrackingPageState extends State<MapTrackingPage> {
final MapController mapController = MapController();
late AssetTrackingProvider assetTrackingProvider;
late bool inAppView;
FloorMapModel? floorMapModel;
Map<String, dynamic>? _geojson;
List<Marker> markers = [];
LatLngBounds? _computedBounds;
final ExpansibleController expansibleController = ExpansibleController();
// Fallback shown only until the real floor plan bounds are computed.
static const LatLng _fallbackCenter = LatLng(24.81200245073082, 46.624273601310186);
@override
void initState() {
super.initState();
inAppView = widget.assetTrackingData == null;
assetTrackingProvider = Provider.of<AssetTrackingProvider>(context, listen: false);
WidgetsBinding.instance.addPostFrameCallback((_) {
if (widget.assetTrackingData != null) {
print('widget.assetTrackingData!.location!.floor!.id!: ${widget.assetTrackingData!.toJson()}');
Utils.showLoading(context);
assetTrackingProvider.getFloorMap(widget.assetTrackingData!.location!.floor!.id!).then((floorMap) {
Utils.hideLoading(context);
_onFloorMapLoaded(floorMap);
}).catchError((error) {
print('Failed to load floor map: $error');
Utils.hideLoading(context);
});
if (!inAppView) {
getFloorMap(widget.assetTrackingData!.location!.floor!.id!);
}
});
}
void getFloorMap(int id) {
Utils.showLoading(context);
assetTrackingProvider.getFloorMap(id).then((floorMap) {
Utils.hideLoading(context);
_onFloorMapLoaded(floorMap);
}).catchError((error) {
Utils.hideLoading(context);
});
}
void _onFloorMapLoaded(FloorMapModel? loadedFloorMap) {
floorMapModel = loadedFloorMap;
@ -142,18 +148,44 @@ class _MapTrackingPageState extends State<MapTrackingPage> {
_geojson!,
styleDefaults: GeoJsonStyleDefaults.leaflet,
),
MarkerLayer(markers: markers),
if (!inAppView) MarkerLayer(markers: markers),
]
],
);
return widget.inAppView
? mapWidget
: Scaffold(
appBar: const DefaultAppBar(title: "Live Asset Tracking"),
body: Stack(
children: [mapWidget],
),
);
return inAppView
? Stack(
alignment: AlignmentDirectional.topCenter,
children: [
mapWidget,
Container(
margin: const EdgeInsets.all(16),
padding: const EdgeInsets.only(right: 16, left: 16),
decoration: BoxDecoration(
color: AppColor.tabBarBackground(context),
border: Border.all(color: AppColor.tabBarBorder(context)),
borderRadius: BorderRadius.circular(20),
),
child: Theme(
data: ThemeData(splashColor: Colors.transparent, hoverColor: Colors.transparent, highlightColor: Colors.transparent),
child: ExpansionTile(
shape: Border.all(color: Colors.transparent, width: 0),
collapsedShape: Border.all(color: Colors.transparent, width: 0),
controller: expansibleController,
title: const InfoTextLabelWidget(label: "Search Floor Map"),
iconColor: AppColor.icon2Color(context),
collapsedIconColor: AppColor.icon2Color(context),
dense: true,
children: <Widget>[
],
childrenPadding: EdgeInsets.all(0),
tilePadding: EdgeInsets.all(0),
),
),
),
],
)
: Scaffold(appBar: const DefaultAppBar(title: "Live Asset Tracking"), body: mapWidget);
}
}

Loading…
Cancel
Save