Update project structure and enhance functionality with new features and dependencies

This commit is contained in:
ImBenji
2026-04-14 03:31:29 +01:00
parent 0b6b604c56
commit 3588783001
63 changed files with 10565 additions and 789 deletions
+96 -24
View File
@@ -6,11 +6,12 @@ import "../../../src/project_store.dart";
import "../../providers/chat_provider.dart";
import "../../providers/home_coordinator.dart";
import "../../providers/projects_provider.dart";
import "../../widgets/agents/agents_pane.dart";
import "../../widgets/chat/chat_box.dart";
import "../../widgets/chat/chat_view.dart";
import "../../widgets/common/footer_bar.dart";
import "../../widgets/common/app_header.dart";
import "../../widgets/sidebar/sidebar.dart";
import "../../widgets/sidebar/sidebar_v2.dart";
class NewHomeScreen extends StatefulWidget {
const NewHomeScreen({super.key});
@@ -19,6 +20,16 @@ class NewHomeScreen extends StatefulWidget {
State<NewHomeScreen> createState() => _NewHomeScreenState();
}
Color _centerBgColor(BuildContext context) {
final theme = Theme.of(context);
final dark = theme.brightness == Brightness.dark;
final h = HSLColor.fromColor(theme.colorScheme.border).hue;
return dark
? HSLColor.fromAHSL(1, h, 0.35, 0.13).toColor()
: HSLColor.fromAHSL(1, h, 0.30, 0.88).toColor();
}
class _NewHomeScreenState extends State<NewHomeScreen> {
final ScrollController _chatScrollController = ScrollController();
@@ -68,37 +79,40 @@ class _NewHomeScreenState extends State<NewHomeScreen> {
return Scaffold(
child: Column(
children: [
AppHeader(),
Expanded(
child: Row(
children: [
child: ColoredBox(
color: _centerBgColor(context),
child: Stack(
children: [
Sidebar(),
_ChatArea(scrollController: _chatScrollController),
Gap(1),
Positioned(
top: 0,
bottom: 0,
right: 0,
width: 12,
child: ChatScrollBar(controller: _chatScrollController),
),
VerticalDivider(),
Expanded(
child: Stack(
children: [
_ChatArea(scrollController: _chatScrollController),
Positioned(
top: 0,
bottom: 0,
right: 0,
width: 12,
child: FullHeightScrollbar(controller: _chatScrollController),
),
],
Positioned.fill(
child: IgnorePointer(
child: CustomPaint(painter: _InsetShadowPainter()),
),
),
AgentsPane(),
Positioned(
top: 12,
left: 12,
bottom: 12,
child: _SidebarPane(),
),
],
],
),
),
),
@@ -223,6 +237,64 @@ class _EmptyChatState extends StatelessWidget {
}
class _InsetShadowPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
const blur = 12.0;
final rect = Offset.zero & size;
canvas.save();
canvas.clipRect(rect);
// restrict to outer ring so shadow doesnt bleed into center
final innerRect = rect.deflate(24);
final ringClip = Path()
..addRect(rect)
..addRect(innerRect)
..fillType = PathFillType.evenOdd;
canvas.clipPath(ringClip);
final path = Path()
..addRect(rect.inflate(blur * 2))
..addRect(rect)
..fillType = PathFillType.evenOdd;
final paint = Paint()
..color = const Color(0x55000000)
..maskFilter = const MaskFilter.blur(BlurStyle.normal, blur);
canvas.drawPath(path, paint);
canvas.restore();
}
@override
bool shouldRepaint(covariant CustomPainter old) => false;
}
class _SidebarPane extends StatelessWidget {
const _SidebarPane();
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
return OutlinedContainer(
borderRadius: BorderRadius.circular(8),
boxShadow: [
BoxShadow(
color: Colors.black.withValues(alpha: 0.15),
blurRadius: 16,
spreadRadius: 2,
),
],
child: SidebarV2(),
);
}
}
abstract class HomeScreenRoute {
static const path = '/';
static const name = 'home';