Buscar pacotes, repositórios e categorias de apps

Capa de flutter_graph_view
Detalhes do pacotev2.1.0

flutter_graph_view

Widgets para estruturas de dados gráficas bonitas, como diagramas orientados por força.

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
3,1 mil
Curtidas
93
Pontos Pub
160

Instalar pacote

flutter pub add flutter_graph_view

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

Flutter Graph View é um pacote de visualização que permite a criação de estruturas de dados gráficas visualmente atraentes, incluindo diagramas com direcionamento por força. Ele fornece widgets personalizáveis para renderizar nós e arestas com animações suaves e comportamentos interativos. Ideal para exibir relações complexas em redes, árvores ou grafos de dependência, suporta múltiplas plataformas, incluindo mobile, web e desktop. O pacote utiliza algoritmos de layout eficientes para garantir desempenho responsivo mesmo com grandes conjuntos de dados. Sua API limpa simplifica a integração em aplicativos Flutter que exigem visualizações dinâmicas.

Casos de uso

  • Visualização de topologias de rede
  • Exibindo gráficos de dependência
  • Criando mapas mentais interativos
  • Renderização de estruturas de dados hierárquicas
  • Mostrando fluxos de dados em tempo real

Principais recursos

  • algoritmos de layout com força direcionada
  • Estilo personalizável de nó e aresta
  • Suporte interativo para arrastar e soltar
  • Animações e transições suaves
  • Compatibilidade multiplataforma (Android, iOS, Web, macOS, Windows, Linux)

Indicado para

  • Aplicativos de visualização de dados
  • Ferramentas educacionais
  • software de análise de rede
  • UIs com relações de dados complexas
  • Aplicações que exigem renderização dinâmica de gráficos

Considerações

  • O desempenho pode degradar com grafos muito grandes
  • Requer ajuste cuidadoso dos parâmetros de layout
  • Interatividade embutida limitada além do arrasto básico
  • Pode ser necessário lógica adicional para manipulação avançada de eventos
  • Não otimizado para atualizações de dados em tempo real

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

Flutter Graph View

GitHub stars GitHub forks

Widgets for beautiful graphic data structures, such as force-oriented diagrams.

image image

image

https://github.com/graph-cn/flutter_graph_view/assets/15630211/a035cd7d-bdac-4ef6-8abf-74594e9d699b

Features

  • [x] Data converter: convert business data into graphic view data.

  • [x] Algorithm: calculate vertex layout.

    • [x] Force directed algorithm.
    • [x] Random algorithm (In example folder).
    • [x] Support algorithm decorator.
      • [x] Breathe decorator (optional).
      • [x] Provide decorators that follow Hooke's Law for related nodes
      • [x] Provide a decorator for Hooke's Law from the center outward for all nodes
      • [x] Provide mutually exclusive Coulomb's law decorators for subgraph root nodes
      • [x] Hooke's Law decorator that provides border buffering collisions for all nodes
      • [x] Add a counter decorator in the figure to convert node forces into motion
  • [x] Data panel embedding.

  • [x] Style configuration.

  • [ ] More graphical interactions.

Getting started

flutter pub add flutter_graph_view

Usage

// Copyright (c) 2023- All flutter_graph_view authors. All rights reserved.
//
// This source code is licensed under Apache 2.0 License.

import 'dart:math';

import 'package:flutter/material.dart';
import 'package:flutter_graph_view/flutter_graph_view.dart';

class DecoratorDemo extends StatelessWidget {
  const DecoratorDemo({super.key});

  @override
  Widget build(BuildContext context) {
    var vertexes = <Map>{};
    var r = Random();
    for (var i = 0; i < 150; i++) {
      vertexes.add(
        {
          'id': 'node$i',
          'tag': 'tag${r.nextInt(9)}',
          'tags': [
            'tag${r.nextInt(9)}',
            if (r.nextBool()) 'tag${r.nextInt(4)}',
            if (r.nextBool()) 'tag${r.nextInt(8)}'
          ],
        },
      );
    }
    var edges = <Map>{};

    for (var i = 0; i < 150; i++) {
      edges.add({
        'srcId': 'node${i % 8 + 8}',
        'dstId': 'node$i',
        'edgeName': 'edge${r.nextInt(3)}',
        'ranking': DateTime.now().millisecond,
      });
    }
    // for (var i = 0; i < 20; i++) {
    //   edges.add({
    //     'srcId': 'node${i % 8}',
    //     'dstId': 'node${r.nextInt(150)}',
    //     'edgeName': 'edge${r.nextInt(3)}',
    //     'ranking': DateTime.now().millisecond,
    //   });
    // }

    var data = {
      'vertexes': vertexes,
      'edges': edges,
    };
    return FlutterGraphWidget(
      data: data,
      algorithm: RandomAlgorithm(
        decorators: [
          CoulombDecorator(),
          // HookeBorderDecorator(),
          HookeDecorator(),
          CoulombCenterDecorator(),
          HookeCenterDecorator(),
          ForceDecorator(),
          ForceMotionDecorator(),
          TimeCounterDecorator(),
        ],
      ),
      convertor: MapConvertor(),
      options: Options()
        ..enableHit = false
        ..panelDelay = const Duration(milliseconds: 500)
        ..graphStyle = (GraphStyle()
          // tagColor is prior to tagColorByIndex. use vertex.tags to get color
          ..tagColor = {'tag8': Colors.orangeAccent.shade200}
          ..tagColorByIndex = [
            Colors.red.shade200,
            Colors.orange.shade200,
            Colors.yellow.shade200,
            Colors.green.shade200,
            Colors.blue.shade200,
            Colors.blueAccent.shade200,
            Colors.purple.shade200,
            Colors.pink.shade200,
            Colors.blueGrey.shade200,
            Colors.deepOrange.shade200,
          ])
        ..useLegend = true // default true
        ..edgePanelBuilder = edgePanelBuilder
        ..vertexPanelBuilder = vertexPanelBuilder
        ..edgeShape = EdgeLineShape() // default is EdgeLineShape.
        ..vertexShape = VertexCircleShape(), // default is VertexCircleShape.
    );
  }

  Widget edgePanelBuilder(Edge edge, Viewfinder viewfinder) {
    var c = viewfinder.localToGlobal(edge.position);

    return Stack(
      children: [
        Positioned(
          left: c.x + 5,
          top: c.y,
          child: SizedBox(
            width: 200,
            child: ColoredBox(
              color: Colors.grey.shade900.withAlpha(200),
              child: ListTile(
                title: Text(
                    '${edge.edgeName} @${edge.ranking}\nDelay controlled by \noptions.panelDelay\ndefault to 300ms'),
              ),
            ),
          ),
        )
      ],
    );
  }

  Widget vertexPanelBuilder(hoverVertex, Viewfinder viewfinder) {
    var c = viewfinder.localToGlobal(hoverVertex.cpn!.position);
    return Stack(
      children: [
        Positioned(
          left: c.x + hoverVertex.radius + 5,
          top: c.y - 20,
          child: SizedBox(
            width: 120,
            child: ColoredBox(
              color: Colors.grey.shade900.withAlpha(200),
              child: ListTile(
                title: Text(
                  'Id: ${hoverVertex.id}',
                ),
                subtitle: Text(
                    'Tag: ${hoverVertex.data['tag']}\nDegree: ${hoverVertex.degree} ${hoverVertex.prevVertex?.id}'),
              ),
            ),
          ),
        )
      ],
    );
  }
}

Licence

flutter_graph_view is under the Apache License, Version 2.0.

Categorias

Dependências

Lista de dependências 1 itens

Repositório-fonte

Projetos que usam este pacote

Ainda não há dados.