From 47ba192cdaa8f6f58e64ba4d445337f044c1d22b Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Mon, 18 Mar 2024 20:16:19 +0100
Subject: [PATCH] fix: shape selection

---
 app/lib/pages/widgets/cloropleth_map.dart | 37 +++++++++++++++--------
 1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/app/lib/pages/widgets/cloropleth_map.dart b/app/lib/pages/widgets/cloropleth_map.dart
index 8a665f0f..b8239d04 100644
--- a/app/lib/pages/widgets/cloropleth_map.dart
+++ b/app/lib/pages/widgets/cloropleth_map.dart
@@ -1,27 +1,27 @@
 import 'dart:typed_data';
+import '../marker_handler/marker_data.dart';
 import 'package:flutter/material.dart';
 import 'package:syncfusion_flutter_maps/maps.dart';
 import 'dart:math';
-import '../marker_handler/marker_data.dart';
+import 'dart:convert';
 
 /// A class containing thickness data for each subdivision of the map.
 class IceThicknessModel {
-  IceThicknessModel(this.sub_div_id, this.thickness, this.color, this.isSelected);
+  IceThicknessModel(this.sub_div_id, this.thickness, this.color, this.savedColor);
 
   final String sub_div_id;
   final int thickness;
   Color color;
-  bool isSelected;
+  final Color savedColor;
 }
 
 /// ChoroplethMap is a stateful widget that contains a choropleth map.
 /// The map is created using the Syncfusion Flutter Maps library and
 /// coordinates fetched from the server.
 class ChoroplethMap extends StatefulWidget {
-  const ChoroplethMap({
-    Key? key,
+  const ChoroplethMap({Key? key,
     required this.relation,
-    required this.measurements,
+    required this.measurements
   }) : super(key: key);
 
   final Uint8List relation;
@@ -32,10 +32,11 @@ class ChoroplethMap extends StatefulWidget {
 }
 
 class _ChoroplethMapState extends State<ChoroplethMap> {
+  int selectedIndex = -1;
   late MapShapeSource mapShapeSource;
   late final MapZoomPanBehavior _zoomPanBehavior = MapZoomPanBehavior();
   List<IceThicknessModel> iceThicknessList = <IceThicknessModel>[];
-  List<Color> testColors = [
+  List<Color> testColors = [ // NB test color
     const Color(0xff8a003b),
     const Color(0xff8a4300),
     const Color(0xff8a7a00),
@@ -49,11 +50,11 @@ class _ChoroplethMapState extends State<ChoroplethMap> {
 
     final Random random = Random();
     for (int i = 0; i <= 120; i++) {
-      int ran = random.nextInt(4); // NB test color
+      int ran = random.nextInt(5); // NB test color
       Color randomColor = testColors[ran];
 
       int randomNumber = random.nextInt(21); // 0 -> 20, NB: temp test data
-      iceThicknessList.add(IceThicknessModel(i.toString(), randomNumber, randomColor, false));
+      iceThicknessList.add(IceThicknessModel(i.toString(), randomNumber, randomColor, randomColor));
     }
   }
 
@@ -64,23 +65,32 @@ class _ChoroplethMapState extends State<ChoroplethMap> {
         SfMaps(
           layers: [
             MapShapeLayer(
-              source: MapShapeSource.memory(
-                widget.relation,
+              source: MapShapeSource.memory( // Map polygon
+                widget.relation, // JSON coordinates from server
                 shapeDataField: 'sub_div_id',
                 dataCount: iceThicknessList.length,
                 primaryValueMapper: (int index) => iceThicknessList[index].sub_div_id,
                 shapeColorValueMapper: (int index) => iceThicknessList[index].color,
               ),
+              //color: Colors.blue.shade400, // Map color
               zoomPanBehavior: _zoomPanBehavior,
               strokeColor: Colors.black,
+              // Shape selection
+              selectedIndex: selectedIndex,
               onSelectionChanged: (int index) {
                 setState(() {
+                  selectedIndex = index;
                   for (int i = 0; i < iceThicknessList.length; i++) {
-                    iceThicknessList[i].isSelected = i == index;
-                    iceThicknessList[i].color = i == index ? Colors.red : iceThicknessList[i].color;
+                    iceThicknessList[i].color = i == index ? Colors.red : iceThicknessList[i].savedColor;
                   }
                 });
+                print("Selection triggered");
               },
+              selectionSettings: MapSelectionSettings(
+                color: Colors.orange,
+                strokeColor: Colors.red[900],
+                strokeWidth: 3,
+              ),
             ),
           ],
         ),
@@ -88,3 +98,4 @@ class _ChoroplethMapState extends State<ChoroplethMap> {
     );
   }
 }
+
-- 
GitLab