org_chart 4.2.2+1
org_chart: ^4.2.2+1 copied to clipboard
A flutter orgranizational chart with drag and drop, zoom and pan, search, collapse, expand, and easy customizations!
import 'package:flutter/material.dart';
import 'screens/home_screen.dart';
import 'screens/genogram_screen.dart';
void main(List<String> args) {
return runApp(const App());
}
/// Main application widget
class App extends StatelessWidget {
const App({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Org Chart & Genogram Example',
theme: ThemeData(
colorSchemeSeed: Colors.blue,
brightness: Brightness.light,
),
darkTheme: ThemeData(
colorSchemeSeed: Colors.blue,
brightness: Brightness.dark,
),
themeMode: ThemeMode.system,
home: const Main(),
);
}
}
class Main extends StatelessWidget {
const Main({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Visualization Examples'),
),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const Text(
'Org Chart & Genogram Visualizations',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
const SizedBox(height: 24),
Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
_buildFeatureCard(
context,
title: 'Organization Chart',
description:
'Visualize hierarchical organizational structures with customizable nodes and connections.',
icon: Icons.account_tree_outlined,
color: Colors.blue,
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const HomeScreen(),
),
);
},
),
const SizedBox(width: 16),
_buildFeatureCard(
context,
title: 'Family Genogram',
description:
'Create and visualize family trees showing relationships between family members.',
icon: Icons.family_restroom,
color: Colors.green,
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const GenogramScreen(),
),
);
},
),
],
),
],
),
],
),
),
);
}
Widget _buildFeatureCard(
BuildContext context, {
required String title,
required String description,
required IconData icon,
required Color color,
required VoidCallback onTap,
}) {
return Card(
elevation: 4,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
child: InkWell(
onTap: onTap,
borderRadius: BorderRadius.circular(12),
child: Container(
width: 250,
padding: const EdgeInsets.all(16),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Icon(
icon,
size: 48,
color: color,
),
const SizedBox(height: 12),
Text(
title,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
),
),
const SizedBox(height: 8),
Text(
description,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 14,
color: Theme.of(context)
.textTheme
.bodyMedium
?.color
?.withOpacity(0.8),
),
),
const SizedBox(height: 12),
Icon(
Icons.touch_app,
size: 20,
color: color.withOpacity(0.7),
),
],
),
),
),
);
}
}