53 lines
1.4 KiB
Dart
53 lines
1.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:pyramid/features/rooms/rooms_page.dart';
|
|
|
|
final sidebarWidthProvider = StateProvider<double>((ref) => 280);
|
|
|
|
class PanelLayout extends ConsumerWidget {
|
|
final Widget mainContent;
|
|
const PanelLayout({super.key, required this.mainContent});
|
|
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
final sidebarWidth = ref.watch(sidebarWidthProvider);
|
|
|
|
return Row(
|
|
children: [
|
|
SizedBox(
|
|
width: sidebarWidth,
|
|
child: const RoomsPage(),
|
|
),
|
|
_ResizeDivider(
|
|
onDrag: (delta) {
|
|
final notifier = ref.read(sidebarWidthProvider.notifier);
|
|
notifier.state =
|
|
(notifier.state + delta).clamp(180.0, 480.0);
|
|
},
|
|
),
|
|
Expanded(child: mainContent),
|
|
],
|
|
);
|
|
}
|
|
}
|
|
|
|
class _ResizeDivider extends StatelessWidget {
|
|
final ValueChanged<double> onDrag;
|
|
const _ResizeDivider({required this.onDrag});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return GestureDetector(
|
|
behavior: HitTestBehavior.translucent,
|
|
onHorizontalDragUpdate: (d) => onDrag(d.delta.dx),
|
|
child: MouseRegion(
|
|
cursor: SystemMouseCursors.resizeColumn,
|
|
child: Container(
|
|
width: 6,
|
|
color: Theme.of(context).dividerColor,
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|