diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a59273..9ebb6d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,30 @@ +## 1.1.2 +- feat: support specifying legends and legend text build. + + example: + ```dart + Options() + ..legendBuilder = (color, i) { // default + return RectangleComponent.fromRect( + Rect.fromLTWH(40, 50.0 + 30 * i, 30, 18), + paint: Paint()..color = color, + ); + } + ..legendTextBuilder = (tag, i, color, position) { // default + return TextComponent( + text: tag, + position: Vector2(position.x + 40, position.y - 6), + // position: Vector2(position.x + 40, position.y - 2), + // textRenderer: TextPaint( + // style: TextStyle( + // fontSize: 17.0, + // color: Colors.white, + // ), + // ), + ); + } + ``` + ## 1.1.1 - fix usage of both Scale and Pan on mobile platforms. ( [#12](https://github.com/graph-cn/flutter_graph_view/pull/12), via: [Mykyta Sadchenko](https://github.com/muknta)) - feat: support zooming through gestures. diff --git a/example/pubspec.lock b/example/pubspec.lock index 9f165ef..1c2088e 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -76,7 +76,7 @@ packages: path: ".." relative: true source: path - version: "1.0.3" + version: "1.1.1" flutter_lints: dependency: "direct dev" description: @@ -95,6 +95,30 @@ packages: description: flutter source: sdk version: "0.0.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -107,26 +131,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" ordered_set: dependency: transitive description: @@ -139,10 +163,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" plugin_platform_interface: dependency: transitive description: @@ -200,10 +224,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" url_launcher: dependency: "direct main" description: @@ -276,6 +300,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" web: dependency: transitive description: @@ -285,5 +317,5 @@ packages: source: hosted version: "0.3.0" sdks: - dart: ">=3.2.3 <4.0.0" - flutter: ">=3.16.6" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/lib/core/options.dart b/lib/core/options.dart index ac2762e..b71d593 100644 --- a/lib/core/options.dart +++ b/lib/core/options.dart @@ -112,4 +112,23 @@ class Options { /// /// @zh: overlay消失的延迟 Duration? panelDelay; + + /// @en: legend component builder + /// + /// @zh: 图例组件 + PositionComponent Function(Color color, int i) legendBuilder = (color, i) { + return RectangleComponent.fromRect(Rect.fromLTWH(40, 50.0 + 30 * i, 30, 18), + paint: Paint()..color = color); + }; + + /// @en: default legend text builder + /// + /// @zh: 默认图例文字构建器 + TextComponent Function(String tag, int i, Color color, Vector2 position) + legendTextBuilder = (tag, i, color, position) { + return TextComponent( + text: tag, + position: Vector2(position.x + 40, position.y - 6), + ); + }; } diff --git a/lib/widgets/graph_component.dart b/lib/widgets/graph_component.dart index 9453ed5..125b528 100644 --- a/lib/widgets/graph_component.dart +++ b/lib/widgets/graph_component.dart @@ -216,18 +216,21 @@ class GraphComponent extends FlameGame for (var i = legendCount; i < graph.allTags.length; i++) { var tag = graph.allTags[i]; - add( - RectangleComponent.fromRect( - Rect.fromLTWH(40, 50.0 + 30 * i, 30, 18), - paint: Paint() - ..color = graphStyle.colorByTag(tag, graph.allTags) ?? - (i < graphStyle.tagColorByIndex.length - ? graphStyle.tagColorByIndex[i] - : graphStyle.defaultColor()[0]), - ), - ); - - add(TextComponent(text: tag, position: Vector2(40 + 40, 44.0 + 30 * i))); + var legendColor = graphStyle.colorByTag(tag, graph.allTags) ?? + (i < graphStyle.tagColorByIndex.length + ? graphStyle.tagColorByIndex[i] + : graphStyle.defaultColor()[0]); + + // add legend + // 添加图例 + var legendItem = options.legendBuilder(legendColor, i); + add(legendItem); + + // add legend text + // 添加图例文字 + var legendText = + options.legendTextBuilder(tag, i, legendColor, legendItem.position); + add(legendText); legendCount = i; } diff --git a/pubspec.yaml b/pubspec.yaml index be34a95..a6f309c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_graph_view description: Widgets for beautiful graphic data structures, such as force-oriented diagrams. -version: 1.1.1 +version: 1.1.2 repository: https://github.com/dudu-ltd/flutter_graph_view homepage: https://graph-cn.github.io/flutter_graph_view