new-screen
Scaffold a new Jetpack Compose screen following project patterns. Use when creating a new screen or view in the app.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
New Screen Skill
Create a new Jetpack Compose screen following MateDroid's patterns.
Project Structure
Screens are located in app/src/main/java/com/matedroid/ui/screens/:
screens/
├── dashboard/
│ └── DashboardScreen.kt
├── drives/
│ ├── DrivesScreen.kt
│ └── DriveDetailScreen.kt
├── charges/
│ ├── ChargesScreen.kt
│ └── ChargeDetailScreen.kt
├── settings/
│ └── SettingsScreen.kt
└── {feature}/
└── {Feature}Screen.kt
Process
-
Ask the user for:
- Screen name (e.g., "Battery Health")
- Brief description of what it displays
- Whether it needs navigation parameters
-
Read an existing screen as reference (e.g.,
DashboardScreen.kt) -
Create the new screen file following the pattern
Screen Template
package com.matedroid.ui.screens.{feature}
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.matedroid.R
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun {Feature}Screen(
onNavigateBack: () -> Unit,
modifier: Modifier = Modifier
) {
Scaffold(
topBar = {
TopAppBar(
title = { Text(stringResource(R.string.{feature}_title)) },
navigationIcon = {
IconButton(onClick = onNavigateBack) {
Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = stringResource(R.string.back)
)
}
}
)
}
) { paddingValues ->
Column(
modifier = modifier
.fillMaxSize()
.padding(paddingValues)
.padding(16.dp)
) {
// Screen content here
}
}
}
After Creating the Screen
- Add string resources for the screen title using the translate skill
- Add navigation route to the app's navigation graph
- Remind the user to wire up the navigation
Common Patterns
Loading State
var isLoading by remember { mutableStateOf(true) }
if (isLoading) {
CircularProgressIndicator()
} else {
// Content
}
API Data Fetching
LaunchedEffect(Unit) {
// Fetch data from TeslamateApiService
}
Pull to Refresh
val pullRefreshState = rememberPullToRefreshState()
PullToRefreshBox(state = pullRefreshState, isRefreshing = isRefreshing) {
// Content
}
Cards
Card(
modifier = Modifier.fillMaxWidth(),
colors = CardDefaults.cardColors(
containerColor = MaterialTheme.colorScheme.surfaceVariant
)
) {
// Card content
}
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-01-20
- Index updated
- 2026-02-04
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!