Skip to main content

geometry_kit_widgets 0.4.0 copy "geometry_kit_widgets: ^0.4.0" to clipboard
geometry_kit_widgets: ^0.4.0 copied to clipboard

Flutter widgets for geometry_kit shapes — CustomPainter-backed, styled, themable, and composable. Includes closed shapes, arcs, rings, capsules, Bezier curves, splines, polylines and rays with tap, ho [...]

example/lib/main.dart

import 'package:flutter/material.dart';

import 'demos/canvas_demo.dart';
import 'demos/circle_demo.dart';
import 'demos/clipping_demo.dart';
import 'demos/coordinate_mapper_demo.dart';
import 'demos/curves_demo.dart';
import 'demos/ellipse_demo.dart';
import 'demos/interaction_demo.dart';
import 'demos/line_demo.dart';
import 'demos/polygon_demo.dart';
import 'demos/properties_demo.dart';
import 'demos/quadrilateral_demo.dart';
import 'demos/rectangle_demo.dart';
import 'demos/solar_system_demo.dart';
import 'demos/style_demo.dart';
import 'demos/transforms_demo.dart';
import 'demos/triangle_demo.dart';
import 'demos3d/bar_chart_demo.dart';
import 'demos3d/cone_slice_demo.dart';
import 'demos3d/draw_extrude_demo.dart';
import 'demos3d/editor_demo.dart';
import 'demos3d/picking_demo.dart';
import 'demos3d/room_demo.dart';
import 'demos3d/solids_gallery_demo.dart';
import 'demos3d/vase_demo.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'geometry_kit_widgets',
      theme: ThemeData(colorSchemeSeed: Colors.indigo, useMaterial3: true),
      home: const _Home(),
    );
  }
}

class _Demo {
  final String title;
  final String subtitle;
  final WidgetBuilder builder;
  const _Demo(this.title, this.subtitle, this.builder);
}

final _demos = <_Demo>[
  _Demo(
    'GeoCircle',
    'Stroked, filled, dashed circles',
    (_) => const CircleDemo(),
  ),
  _Demo('GeoEllipse', 'Axis-aligned ellipses', (_) => const EllipseDemo()),
  _Demo(
    'GeoRectangle',
    'Rectangles with rounded corners',
    (_) => const RectangleDemo(),
  ),
  _Demo('GeoTriangle', 'Triangle from 3 vertices', (_) => const TriangleDemo()),
  _Demo(
    'GeoQuadrilateral',
    'Trapezoid / kite / rhombus',
    (_) => const QuadrilateralDemo(),
  ),
  _Demo(
    'GeoPolygon',
    'Regular and free-form polygons',
    (_) => const PolygonDemo(),
  ),
  _Demo('GeoLine', 'Line segments + dashes', (_) => const LineDemo()),
  _Demo(
    'Curves, drag & grid',
    'Arc, ring, capsule, Bezier, spline, ray; drag; GeoGrid; debug overlays',
    (_) => const CurvesDemo(),
  ),
  _Demo('GeometryCanvas', 'Multi-shape rendering', (_) => const CanvasDemo()),
  _Demo('ShapeStyleTheme', 'Inherited default style', (_) => const StyleDemo()),
  _Demo(
    'CoordinateMapper',
    'Y-up + centered origins',
    (_) => const CoordinateMapperDemo(),
  ),
  _Demo(
    'Clipping & layering',
    'clipBehavior + Stack composition',
    (_) => const ClippingDemo(),
  ),
  _Demo(
    'Transforms',
    'rotate / scale / translate (interactive)',
    (_) => const TransformsDemo(),
  ),
  _Demo(
    'Properties & contains',
    'area / perimeter / centroid / contains',
    (_) => const PropertiesDemo(),
  ),
  _Demo(
    'Solar system',
    'Animated orbits via canvas + transforms',
    (_) => const SolarSystemDemo(),
  ),
  _Demo(
    'Interactivity',
    'onTap + onHoverChanged on Geo* and canvas',
    (_) => const InteractionDemo(),
  ),
];

final _demos3d = <_Demo>[
  _Demo(
    'Solids',
    'Every Solid: transforms, bounds, mesh accuracy',
    (_) => const SolidsGalleryDemo(),
  ),
  _Demo(
    'Cone slice',
    'Cone.slice(plane) → conic section',
    (_) => const ConeSliceDemo(),
  ),
  _Demo(
    'Bar chart',
    'GeoScene with hover and tap picking',
    (_) => const BarChartDemo(),
  ),
  _Demo(
    'Room',
    'Prism.extrude(floor plan) + measurements',
    (_) => const RoomDemo(),
  ),
  _Demo(
    'Draw and extrude',
    'GeometryCanvas plan → Prism in GeoScene',
    (_) => const DrawExtrudeDemo(),
  ),
  _Demo(
    'Picking & contact',
    'Ray picking, drag to move, Sphere.intersects',
    (_) => const PickingDemo(),
  ),
  _Demo(
    'Vase',
    'SolidOfRevolution(spline) + STL / OBJ export',
    (_) => const VaseDemo(),
  ),
  _Demo(
    'Editor',
    'Select, move, undo with geometry_kit_editor',
    (_) => const EditorDemo(),
  ),
];

class _Home extends StatelessWidget {
  const _Home();

  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 2,
      child: Scaffold(
        appBar: AppBar(
          title: const Text('geometry_kit_widgets'),
          bottom: const TabBar(
            tabs: [
              Tab(text: '2D'),
              Tab(text: '3D'),
            ],
          ),
        ),
        body: TabBarView(children: [_DemoList(_demos), _DemoList(_demos3d)]),
      ),
    );
  }
}

class _DemoList extends StatelessWidget {
  final List<_Demo> demos;
  const _DemoList(this.demos);

  @override
  Widget build(BuildContext context) {
    return ListView.separated(
      itemCount: demos.length,
      separatorBuilder: (_, _) => const Divider(height: 0),
      itemBuilder: (context, i) {
        final d = demos[i];
        return ListTile(
          title: Text(d.title),
          subtitle: Text(d.subtitle),
          trailing: const Icon(Icons.chevron_right),
          onTap: () {
            Navigator.of(context).push(
              MaterialPageRoute(
                builder: (ctx) => Scaffold(
                  appBar: AppBar(title: Text(d.title)),
                  body: SafeArea(child: d.builder(ctx)),
                ),
              ),
            );
          },
        );
      },
    );
  }
}
1
likes
150
points
286
downloads
screenshot

Documentation

API reference

Publisher

verified publishersamderlust.com

Weekly Downloads

Flutter widgets for geometry_kit shapes — CustomPainter-backed, styled, themable, and composable. Includes closed shapes, arcs, rings, capsules, Bezier curves, splines, polylines and rays with tap, hover and drag, a multi-shape canvas with grid and debug overlays, and a 3D scene for geometry_kit_3d solids.

Homepage
Repository (GitHub)
View/report issues
Contributing

Topics

#geometry #widget #custom-painter #shapes #flutter

License

MIT (license)

Dependencies

flutter, geometry_kit, geometry_kit_3d

More

Packages that depend on geometry_kit_widgets