panels_system 0.1.0 copy "panels_system: ^0.1.0" to clipboard
panels_system: ^0.1.0 copied to clipboard

Pane and tabs system for flutter

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:panels_system/model/pane_tree.dart';
import 'package:panels_system/pane_system.dart';

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

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

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: PaneSystem<TabData>(
        tabViewBuilder: (_, __) => const SizedBox.shrink(),
        tabBuilder: (_, __) => const SizedBox.shrink(),
        emptyTabBuilder: (context) {
          return const Text('Nouvel onglet');
        },
        emptyTabViewBuilder: (context, pane) {
          return Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () {
                  PaneSystem.of<TabData>(context).controller.replaceElement(
                        pane,
                        HorizontalPaneTreeNode(
                          size: Size.zero,
                          child1: pane,
                          child2: Pane<TabData>(
                            size: Size.zero,
                            id: PaneTree.autoIncrement,
                            tabsData: [
                              EmptyTab(
                                id: PaneTree.autoIncrement,
                                visible: true,
                              ),
                            ],
                          ),
                          id: PaneTree.autoIncrement,
                        ),
                      );
                },
                child: const Text('Split horizontally'),
              ),
              ElevatedButton(
                onPressed: () {
                  PaneSystem.of<TabData>(context).controller.replaceElement(
                        pane,
                        VerticalPaneTreeNode(
                          size: Size.zero,
                          child1: pane,
                          child2: Pane<TabData>(
                            size: Size.zero,
                            id: PaneTree.autoIncrement,
                            tabsData: [
                              EmptyTab(
                                id: PaneTree.autoIncrement,
                                visible: true,
                              ),
                            ],
                          ),
                          id: PaneTree.autoIncrement,
                        ),
                      );
                },
                child: const Text('Split vertically'),
              ),
            ],
          );
        },
      ),
    );
  }
}

class TabData extends PaneTabData<TabData> {
  final String title;
  final IconData icon;
  final Widget content;

  const TabData({
    required this.title,
    required this.icon,
    required this.content,
    required super.id,
    required super.visible,
  });

  @override
  TabData copyWithVisibility(bool visibility) {
    return TabData(
        id: id,
        title: title,
        icon: icon,
        content: content,
        visible: visibility);
  }

  @override
  String toString() {
    return 'TabData{title: $title, icon: $icon, content: $content}';
  }
}
0
likes
130
points
1
downloads

Publisher

unverified uploader

Weekly Downloads

Pane and tabs system for flutter

Documentation

API reference

License

MIT (license)

Dependencies

collection, equatable, flutter, flutter_resizable_container, gap, intersperse, logger

More

Packages that depend on panels_system