From b5c9f3cb75a776800ee69aad715f879e5aaca7de Mon Sep 17 00:00:00 2001 From: CorvusYe Date: Wed, 4 Feb 2026 16:35:41 +0800 Subject: [PATCH] fix: the id type does not support numbers, when using parallel. --- example/.metadata | 30 +++++++++---------- example/pubspec.lock | 16 ++++++++++ .../barnes_hut_coulomb_decorator.dart | 2 -- .../decorator/parallelization_decorator.dart | 6 ++-- lib/flutter_graph_view.dart | 2 ++ lib/model/graph.dart | 2 +- lib/model/vertex.dart | 4 +-- 7 files changed, 40 insertions(+), 22 deletions(-) diff --git a/example/.metadata b/example/.metadata index b48f68e..5f4336f 100644 --- a/example/.metadata +++ b/example/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: "2f708eb8396e362e280fac22cf171c2cb467343c" + revision: "adc901062556672b4138e18a4dc62a4be8f4b3c2" channel: "stable" project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: 2f708eb8396e362e280fac22cf171c2cb467343c - base_revision: 2f708eb8396e362e280fac22cf171c2cb467343c + create_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 + base_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 - platform: android - create_revision: 2f708eb8396e362e280fac22cf171c2cb467343c - base_revision: 2f708eb8396e362e280fac22cf171c2cb467343c + create_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 + base_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 - platform: ios - create_revision: 2f708eb8396e362e280fac22cf171c2cb467343c - base_revision: 2f708eb8396e362e280fac22cf171c2cb467343c + create_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 + base_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 - platform: linux - create_revision: 2f708eb8396e362e280fac22cf171c2cb467343c - base_revision: 2f708eb8396e362e280fac22cf171c2cb467343c + create_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 + base_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 - platform: macos - create_revision: 2f708eb8396e362e280fac22cf171c2cb467343c - base_revision: 2f708eb8396e362e280fac22cf171c2cb467343c + create_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 + base_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 - platform: web - create_revision: 2f708eb8396e362e280fac22cf171c2cb467343c - base_revision: 2f708eb8396e362e280fac22cf171c2cb467343c + create_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 + base_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 - platform: windows - create_revision: 2f708eb8396e362e280fac22cf171c2cb467343c - base_revision: 2f708eb8396e362e280fac22cf171c2cb467343c + create_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 + base_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 # User provided section diff --git a/example/pubspec.lock b/example/pubspec.lock index 202e1e7..ee742ea 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -87,6 +87,22 @@ packages: description: flutter source: sdk version: "0.0.0" + intl: + dependency: transitive + description: + name: intl + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" + url: "https://pub.dev" + source: hosted + version: "0.20.2" + isolate_manager: + dependency: transitive + description: + name: isolate_manager + sha256: "375e35325c964be41336faeaf86641d742a944f10b28d301237b795f1085cbb7" + url: "https://pub.dev" + source: hosted + version: "6.1.2" leak_tracker: dependency: transitive description: diff --git a/lib/core/algorithm/decorator/barnes_hut_coulomb_decorator.dart b/lib/core/algorithm/decorator/barnes_hut_coulomb_decorator.dart index 85119e0..5320227 100644 --- a/lib/core/algorithm/decorator/barnes_hut_coulomb_decorator.dart +++ b/lib/core/algorithm/decorator/barnes_hut_coulomb_decorator.dart @@ -1,8 +1,6 @@ import 'dart:math'; import 'dart:ui'; import 'package:flutter/foundation.dart'; -import 'package:flutter_graph_view/core/algorithm/decorator/parallelizable_decorator.dart'; -import 'package:flutter_graph_view/core/algorithm/decorator/parallelization_decorator.dart'; import 'package:flutter_graph_view/flutter_graph_view.dart'; import 'package:intl/intl.dart'; import 'package:isolate_manager/isolate_manager.dart'; diff --git a/lib/core/algorithm/decorator/parallelization_decorator.dart b/lib/core/algorithm/decorator/parallelization_decorator.dart index acc8127..e624091 100644 --- a/lib/core/algorithm/decorator/parallelization_decorator.dart +++ b/lib/core/algorithm/decorator/parallelization_decorator.dart @@ -1,5 +1,4 @@ import 'package:flutter/foundation.dart'; -import 'package:flutter_graph_view/core/algorithm/decorator/parallelizable_decorator.dart'; import 'package:flutter_graph_view/flutter_graph_view.dart'; import 'package:intl/intl.dart'; import 'package:isolate_manager/isolate_manager.dart'; @@ -147,8 +146,11 @@ class ParallelizationDecorator extends ForceDecorator { // apply forces var vMap = graph.vertexByIdMap; + var k = vMap.entries.firstOrNull?.key; + var keyParser = k is num ? num.parse : (v) => v; totalForcePerVertex.forEach((key, force) { - setForceMap(vMap[key]!, vMap[key]!, force); + var v = vMap[keyParser(key)]!; + setForceMap(v, v, force); }); // print how much time all parallel runs took diff --git a/lib/flutter_graph_view.dart b/lib/flutter_graph_view.dart index 6430112..5b5340e 100644 --- a/lib/flutter_graph_view.dart +++ b/lib/flutter_graph_view.dart @@ -55,6 +55,8 @@ export 'core/algorithm/decorator/graph_route_decorator.dart'; export 'core/algorithm/decorator/legend_decorator.dart'; export 'core/algorithm/decorator/counter_decorator.dart'; export 'core/algorithm/decorator/barnes_hut_coulomb_decorator.dart'; +export 'core/algorithm/decorator/parallelizable_decorator.dart'; +export 'core/algorithm/decorator/parallelization_decorator.dart'; export 'core/options/shape/vertex/vertex_circle_shape.dart'; export 'core/options/shape/vertex/vertex_diamond_shape.dart'; diff --git a/lib/model/graph.dart b/lib/model/graph.dart index 2ef7d0a..b9b38a2 100644 --- a/lib/model/graph.dart +++ b/lib/model/graph.dart @@ -136,6 +136,6 @@ class Graph { /// serialize the graph Map serialize() => { - "vertexes": { for (var v in vertexes) v.id as String: v.serialize() }, + "vertexes": { for (var v in vertexes) '${v.id}': v.serialize() }, }; } diff --git a/lib/model/vertex.dart b/lib/model/vertex.dart index b8c5663..a500be9 100644 --- a/lib/model/vertex.dart +++ b/lib/model/vertex.dart @@ -159,12 +159,12 @@ class Vertex { Map serialize() => { - "id": id as String, + "id": '$id', "position": position, "radius": radius, "tag": tag, "tags": tags, - "neighbors": neighbors.map((n) => n.id as String).toList(), + "neighbors": neighbors.map((n) => '${n.id}').toList(), "degree": degree, // TODO: how do we safely pass in properties // "properties": properties