Add new features and update configurations for improved functionality
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
import "package:go_router/go_router.dart";
|
||||
import "package:shadcn_flutter/shadcn_flutter.dart";
|
||||
|
||||
class ProjectDetailPage extends StatelessWidget {
|
||||
const ProjectDetailPage({
|
||||
super.key,
|
||||
required this.projectId,
|
||||
this.tab = 'overview',
|
||||
});
|
||||
|
||||
final String projectId;
|
||||
final String tab;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
headers: [
|
||||
AppBar(
|
||||
title: Text("Project: $projectId"),
|
||||
leading: [
|
||||
IconButton.ghost(
|
||||
icon: const Icon(LucideIcons.arrowLeft),
|
||||
onPressed: () => context.go('/'),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
child: Column(
|
||||
children: [
|
||||
// Tab navigation
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
||||
child: Row(
|
||||
children: [
|
||||
_buildTabButton(context, 'overview', 'Overview'),
|
||||
const Gap(8),
|
||||
_buildTabButton(context, 'files', 'Files'),
|
||||
const Gap(8),
|
||||
_buildTabButton(context, 'settings', 'Settings'),
|
||||
],
|
||||
),
|
||||
),
|
||||
const Divider(),
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: _buildTabContent(),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildTabButton(BuildContext context, String tabName, String label) {
|
||||
final isActive = tab == tabName;
|
||||
return Button(
|
||||
style: isActive ? ButtonStyle.secondary() : ButtonStyle.ghost(),
|
||||
onPressed: () => context.go(
|
||||
ProjectDetailRoute.pathWithParams(
|
||||
projectId: projectId,
|
||||
tab: tabName,
|
||||
),
|
||||
),
|
||||
child: Text(label),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildTabContent() {
|
||||
switch (tab) {
|
||||
case 'files':
|
||||
return const Center(child: Text("Files tab content"));
|
||||
case 'settings':
|
||||
return const Center(child: Text("Settings tab content"));
|
||||
case 'overview':
|
||||
default:
|
||||
return const Center(child: Text("Project overview content"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// GoRouter routes for the project detail page
|
||||
abstract class ProjectDetailRoute {
|
||||
static const path = '/projects/:projectId';
|
||||
static const name = 'project_detail';
|
||||
|
||||
static String pathWithParams({
|
||||
required String projectId,
|
||||
String tab = 'overview',
|
||||
}) {
|
||||
return '/projects/$projectId?tab=$tab';
|
||||
}
|
||||
|
||||
static GoRoute get route => GoRoute(
|
||||
path: path,
|
||||
name: name,
|
||||
builder: (context, state) {
|
||||
final projectId = state.pathParameters['projectId']!;
|
||||
final tab = state.uri.queryParameters['tab'] ?? 'overview';
|
||||
|
||||
return ProjectDetailPage(
|
||||
projectId: projectId,
|
||||
tab: tab,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user