Update project structure and enhance functionality with new features and dependencies
This commit is contained in:
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user