From a3ef2ca7e2548b16395347b75da61dcd14579e1b Mon Sep 17 00:00:00 2001 From: Sara <sarasdj@stud.ntnu.no> Date: Mon, 18 Mar 2024 20:06:14 +0100 Subject: [PATCH] update: partial shape seleciton --- app/lib/pages/widgets/cloropleth_map.dart | 37 +++++++++-------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/app/lib/pages/widgets/cloropleth_map.dart b/app/lib/pages/widgets/cloropleth_map.dart index 0fed74d1..8a665f0f 100644 --- a/app/lib/pages/widgets/cloropleth_map.dart +++ b/app/lib/pages/widgets/cloropleth_map.dart @@ -1,26 +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 'dart:convert'; +import '../marker_handler/marker_data.dart'; /// A class containing thickness data for each subdivision of the map. class IceThicknessModel { - IceThicknessModel(this.sub_div_id, this.thickness, this.color); + IceThicknessModel(this.sub_div_id, this.thickness, this.color, this.isSelected); final String sub_div_id; final int thickness; - final Color color; + Color color; + bool isSelected; } /// 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; @@ -31,11 +32,10 @@ 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 = [ // NB test color + List<Color> testColors = [ const Color(0xff8a003b), const Color(0xff8a4300), const Color(0xff8a7a00), @@ -53,7 +53,7 @@ class _ChoroplethMapState extends State<ChoroplethMap> { Color randomColor = testColors[ran]; int randomNumber = random.nextInt(21); // 0 -> 20, NB: temp test data - iceThicknessList.add(IceThicknessModel(i.toString(), randomNumber, randomColor)); + iceThicknessList.add(IceThicknessModel(i.toString(), randomNumber, randomColor, false)); } } @@ -64,29 +64,23 @@ class _ChoroplethMapState extends State<ChoroplethMap> { SfMaps( layers: [ MapShapeLayer( - source: MapShapeSource.memory( // Map polygon - widget.relation, // JSON coordinates from server + source: MapShapeSource.memory( + widget.relation, 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; + } }); - print("Selection triggered"); }, - selectionSettings: MapSelectionSettings( - color: Colors.orange, - strokeColor: Colors.red[900], - strokeWidth: 3, - ), ), ], ), @@ -94,4 +88,3 @@ class _ChoroplethMapState extends State<ChoroplethMap> { ); } } - -- GitLab