graph_plus 1.0.0-alpha copy "graph_plus: ^1.0.0-alpha" to clipboard
graph_plus: ^1.0.0-alpha copied to clipboard

Provides graphing and drawing features with a focus on software architecture diagramming capabilities

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:graph_plus/diagraming/graph_view.dart';
import 'package:graph_plus/diagraming/graph_view_grid_layout_delegate.dart';
import 'package:graph_plus/graphing/g.dart';

void main() {
  runApp(const MainApp());
}

class MainApp extends StatefulWidget {
  const MainApp({super.key});

  @override
  State<MainApp> createState() => _MainAppState();
}

class _MainAppState extends State<MainApp> {
  ThemeMode mode = ThemeMode.light;
  final scaffoldKey = GlobalKey<ScaffoldMessengerState>();
  GraphViewOrientation orientation = GraphViewOrientation.vertical;

  @override
  Widget build(BuildContext context) {
    final recorder = GraphViewRecorder();
    return MaterialApp(
      scaffoldMessengerKey: scaffoldKey,
      themeMode: mode,
      theme: ThemeData.light(),
      darkTheme: ThemeData.dark(),
      home: Scaffold(
        appBar: AppBar(actions: [
          OutlinedButton(onPressed: () {}, child: const Text("NoOp")),
          IconButton(
              onPressed: () {
                setState(() => orientation = switch (orientation) {
                      GraphViewOrientation.vertical =>
                        GraphViewOrientation.horizontal,
                      GraphViewOrientation.horizontal =>
                        GraphViewOrientation.vertical,
                    });
              },
              icon: Icon(switch (orientation) {
                GraphViewOrientation.vertical => Icons.horizontal_distribute,
                GraphViewOrientation.horizontal => Icons.vertical_distribute,
              })),
          IconButton(
              onPressed: () async {
                await recorder.exportToClipboard(pixelRatio: 3);
                scaffoldKey.currentState!
                    .showSnackBar(const SnackBar(content: Text("copied!")));
              },
              icon: const Icon(Icons.content_copy)),
          TextButton(
              onPressed: () {
                setState(() {
                  mode = switch (mode) {
                    ThemeMode.light => ThemeMode.dark,
                    ThemeMode.dark => ThemeMode.system,
                    ThemeMode.system => ThemeMode.light
                  };
                });
              },
              child: Text("$mode")),
        ]),
        body: Center(
          // child: TextButton(
          //     onPressed: () {

          //     },
          //     child: const Text("Copy")),
          child: GraphView(
            Graph(vertices: const [
              V("a"),
              V("b", name: "BBBBB"),
              V("b1.1"),
              V("b1.2"),
              V("b1.3"),
              V("b1.2.1"),
              V("c"),
            ], edges: const [
              // E.endpoints("a", "b"),
              E.endpoints("b", "b1.1"),
              E.endpoints("b", "b1.2"),
              E.endpoints("b", "b1.3"),
              E.endpoints("b1.1", "b1.2"),
              E.endpoints("b1.2", "b1.2.1"),
              E.endpoints("b", "c"),
            ]),
            //useAppTheme: false,
            //theme: const GraphViewThemeData(vertexBorderColor: Colors.blue),
            //darkTheme: const GraphViewThemeData(vertexBorderColor: Colors.red),
            grouping: GraphViewGrouping(
              assignGroup: (V<String> vertex) {
                //return {"a"};
                final set = <String>{};
                if (vertex.id.startsWith("b")) {
                  set.add("a");
                }
                if (vertex.id.startsWith("b1.2")) {
                  set.add("b");
                }
                if (vertex.id == "c") {
                  set.add("c");
                }

                return set;
              },
            ),
            orientation: orientation,

            layoutDelegate: GraphViewGridLayoutDelegate(),
            buildDelegate: GraphViewBuildDelegate(
              groupBorderRadius: 20,
              buildVertex: (context, theme, vertex) => Container(
                decoration: BoxDecoration(
                    border: Border.all(color: theme.vertexBorderColor)
                    // color: Colors.green,
                    ),
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: TextButton(onPressed: () {}, child: Text(vertex.name)),
                ),
              ),
              buildGroup: (context, theme, group) =>
                  TextButton(onPressed: () {}, child: const Text("Some Group")),
            ),
            recorder: recorder,
          ),
        ),
      ),
    );
  }
}
0
likes
0
points
23
downloads

Publisher

verified publisherarchmind.io

Weekly Downloads

Provides graphing and drawing features with a focus on software architecture diagramming capabilities

Repository (GitHub)
View/report issues

Topics

#graphing #diagramming #utils

License

unknown (license)

Dependencies

core_extras, flutter, graph_plus_exporter

More

Packages that depend on graph_plus