Add modifier parameter to composables
For context, see: https://android.googlesource.com/platform/frameworks/support/+/androidx-main/compose/docs/compose-api-guidelines.md#elements-accept-and-respect-a-modifier-parameter > Element functions MUST accept a parameter of type Modifier. > This parameter MUST be named modifier and MUST appear as the > first optional parameter in the element function's parameter list
This commit is contained in:
parent
da136a1990
commit
ea53d3cb1d
|
@ -60,7 +60,7 @@ fun DrawerAction(
|
|||
}
|
||||
|
||||
@Composable
|
||||
fun Drawer(modifier: Modifier = Modifier, onSelect: (DrawerAction) -> Unit) {
|
||||
fun Drawer(onSelect: (DrawerAction) -> Unit, modifier: Modifier = Modifier) {
|
||||
Column(
|
||||
modifier = modifier
|
||||
.fillMaxSize()
|
||||
|
@ -115,7 +115,8 @@ fun TalariaAppBar(
|
|||
currentScreen: TalariaScreen,
|
||||
canNavigateBack: Boolean,
|
||||
navigateUp: () -> Unit,
|
||||
openDrawer: () -> Unit
|
||||
openDrawer: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
TopAppBar(
|
||||
title = { Text(stringResource(currentScreen.title)) },
|
||||
|
@ -140,7 +141,7 @@ fun TalariaAppBar(
|
|||
}
|
||||
|
||||
@Composable
|
||||
fun TalariaApp() {
|
||||
fun TalariaApp(modifier: Modifier = Modifier) {
|
||||
val navController = rememberNavController()
|
||||
val backStackEntry by navController.currentBackStackEntryAsState()
|
||||
val currentScreen =
|
||||
|
@ -162,6 +163,7 @@ fun TalariaApp() {
|
|||
}
|
||||
|
||||
Scaffold(
|
||||
modifier = modifier,
|
||||
topBar = {
|
||||
TalariaAppBar(
|
||||
currentScreen,
|
||||
|
|
|
@ -25,10 +25,10 @@ import dev.lonami.talaria.ui.theme.TalariaTheme
|
|||
import kotlinx.coroutines.launch
|
||||
|
||||
@Composable
|
||||
fun MessageCard(message: Message) {
|
||||
fun MessageCard(message: Message, modifier: Modifier = Modifier) {
|
||||
Card(
|
||||
elevation = 4.dp,
|
||||
modifier = Modifier
|
||||
modifier = modifier
|
||||
.fillMaxWidth()
|
||||
.padding(8.dp)
|
||||
) {
|
||||
|
@ -44,8 +44,8 @@ fun MessageCard(message: Message) {
|
|||
}
|
||||
|
||||
@Composable
|
||||
fun MessageList(messages: List<Message>, modifier: Modifier, listState: LazyListState) {
|
||||
LazyColumn(modifier, state = listState) {
|
||||
fun MessageList(messages: List<Message>, listState: LazyListState, modifier: Modifier = Modifier) {
|
||||
LazyColumn(modifier = modifier, state = listState) {
|
||||
items(messages.size) { MessageCard(messages[it]) }
|
||||
}
|
||||
}
|
||||
|
@ -54,9 +54,10 @@ fun MessageList(messages: List<Message>, modifier: Modifier, listState: LazyList
|
|||
fun MessageInputField(
|
||||
messageText: String,
|
||||
onMessageChanged: (String) -> Unit,
|
||||
onSendMessage: () -> Unit
|
||||
onSendMessage: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
Row {
|
||||
Row(modifier = modifier) {
|
||||
TextField(
|
||||
messageText,
|
||||
placeholder = { Text(stringResource(R.string.write_message)) },
|
||||
|
@ -78,13 +79,17 @@ fun MessageInputField(
|
|||
}
|
||||
|
||||
@Composable
|
||||
fun ChatScreen(selectedDialog: String, chatViewModel: ChatViewModel = viewModel()) {
|
||||
fun ChatScreen(
|
||||
selectedDialog: String,
|
||||
modifier: Modifier = Modifier,
|
||||
chatViewModel: ChatViewModel = viewModel(),
|
||||
) {
|
||||
val chatUiState by chatViewModel.uiState.collectAsState()
|
||||
var messageText by remember { mutableStateOf("") }
|
||||
val messageListState = rememberLazyListState()
|
||||
val coroutineScope = rememberCoroutineScope()
|
||||
|
||||
Column(modifier = Modifier.fillMaxSize()) {
|
||||
Column(modifier = modifier.fillMaxSize()) {
|
||||
MessageList(
|
||||
chatUiState.messages,
|
||||
modifier = Modifier.weight(1.0f),
|
||||
|
|
|
@ -31,9 +31,9 @@ import java.time.format.DateTimeFormatter
|
|||
import java.time.format.FormatStyle
|
||||
|
||||
@Composable
|
||||
fun Dialog(dialog: Dialog, onDialogSelected: () -> Unit) {
|
||||
fun Dialog(dialog: Dialog, onDialogSelected: () -> Unit, modifier: Modifier = Modifier) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
modifier = modifier
|
||||
.padding(4.dp)
|
||||
.clickable(onClick = onDialogSelected)
|
||||
) {
|
||||
|
@ -98,8 +98,12 @@ fun Dialog(dialog: Dialog, onDialogSelected: () -> Unit) {
|
|||
}
|
||||
|
||||
@Composable
|
||||
fun DialogList(dialogs: List<Dialog>, onDialogSelected: (String) -> Unit) {
|
||||
LazyColumn {
|
||||
fun DialogList(
|
||||
dialogs: List<Dialog>,
|
||||
onDialogSelected: (String) -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
LazyColumn(modifier = modifier) {
|
||||
items(dialogs.size) {
|
||||
Dialog(dialogs[it], onDialogSelected = {
|
||||
onDialogSelected(dialogs[it].id)
|
||||
|
@ -112,10 +116,11 @@ fun DialogList(dialogs: List<Dialog>, onDialogSelected: (String) -> Unit) {
|
|||
@Composable
|
||||
fun DialogScreen(
|
||||
onDialogSelected: (String) -> Unit,
|
||||
dialogViewModel: DialogViewModel = viewModel()
|
||||
modifier: Modifier = Modifier,
|
||||
dialogViewModel: DialogViewModel = viewModel(),
|
||||
) {
|
||||
val dialogUiState by dialogViewModel.uiState.collectAsState()
|
||||
Surface {
|
||||
Surface(modifier = modifier) {
|
||||
DialogList(dialogUiState.dialogs, onDialogSelected = onDialogSelected)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,63 +30,77 @@ fun isPhoneValid(phone: String): Boolean = phone.trim('+', ' ').isNotEmpty()
|
|||
fun isLoginCodeValid(code: String): Boolean = code.trim().count { it.isDigit() } == 5
|
||||
|
||||
@Composable
|
||||
fun PhoneInput(phone: String, onPhoneChanged: (String) -> Unit, onSendCode: () -> Unit) {
|
||||
fun PhoneInput(
|
||||
phone: String,
|
||||
onPhoneChanged: (String) -> Unit,
|
||||
onSendCode: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val focusManager = LocalFocusManager.current
|
||||
|
||||
Text(stringResource(R.string.enter_phone))
|
||||
TextField(
|
||||
phone,
|
||||
label = { Text(stringResource(R.string.phone_international)) },
|
||||
placeholder = { Text(stringResource(R.string.phone_example)) },
|
||||
singleLine = true,
|
||||
keyboardOptions = KeyboardOptions(
|
||||
keyboardType = KeyboardType.Phone,
|
||||
imeAction = ImeAction.Done
|
||||
),
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
onValueChange = onPhoneChanged
|
||||
)
|
||||
Spacer(Modifier.height(16.dp))
|
||||
Button(
|
||||
enabled = isPhoneValid(phone),
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
onClick = onSendCode
|
||||
) {
|
||||
Text(stringResource(R.string.send_otp))
|
||||
Column(modifier = modifier) {
|
||||
Text(stringResource(R.string.enter_phone))
|
||||
TextField(
|
||||
phone,
|
||||
label = { Text(stringResource(R.string.phone_international)) },
|
||||
placeholder = { Text(stringResource(R.string.phone_example)) },
|
||||
singleLine = true,
|
||||
keyboardOptions = KeyboardOptions(
|
||||
keyboardType = KeyboardType.Phone,
|
||||
imeAction = ImeAction.Done
|
||||
),
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
onValueChange = onPhoneChanged
|
||||
)
|
||||
Spacer(Modifier.height(16.dp))
|
||||
Button(
|
||||
enabled = isPhoneValid(phone),
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
onClick = onSendCode
|
||||
) {
|
||||
Text(stringResource(R.string.send_otp))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun OtpInput(otp: String, onOtpChanged: (String) -> Unit, onConfirmOtp: () -> Unit) {
|
||||
fun OtpInput(
|
||||
otp: String,
|
||||
onOtpChanged: (String) -> Unit,
|
||||
onConfirmOtp: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val focusManager = LocalFocusManager.current
|
||||
|
||||
Text(stringResource(R.string.enter_otp))
|
||||
TextField(
|
||||
otp,
|
||||
label = { Text(stringResource(R.string.otp)) },
|
||||
placeholder = { Text(stringResource(R.string.otp_example)) },
|
||||
singleLine = true,
|
||||
keyboardOptions = KeyboardOptions(
|
||||
keyboardType = KeyboardType.Number,
|
||||
imeAction = ImeAction.Done
|
||||
),
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
onValueChange = onOtpChanged
|
||||
)
|
||||
Spacer(Modifier.height(16.dp))
|
||||
Button(
|
||||
enabled = isLoginCodeValid(otp),
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
onClick = onConfirmOtp
|
||||
) {
|
||||
Text(stringResource(R.string.do_login))
|
||||
Column(modifier = modifier) {
|
||||
Text(stringResource(R.string.enter_otp))
|
||||
TextField(
|
||||
otp,
|
||||
label = { Text(stringResource(R.string.otp)) },
|
||||
placeholder = { Text(stringResource(R.string.otp_example)) },
|
||||
singleLine = true,
|
||||
keyboardOptions = KeyboardOptions(
|
||||
keyboardType = KeyboardType.Number,
|
||||
imeAction = ImeAction.Done
|
||||
),
|
||||
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
onValueChange = onOtpChanged
|
||||
)
|
||||
Spacer(Modifier.height(16.dp))
|
||||
Button(
|
||||
enabled = isLoginCodeValid(otp),
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
onClick = onConfirmOtp
|
||||
) {
|
||||
Text(stringResource(R.string.do_login))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun LoginScreen(onConfirmOtp: () -> Unit) {
|
||||
fun LoginScreen(onConfirmOtp: () -> Unit, modifier: Modifier = Modifier) {
|
||||
var stage by remember { mutableStateOf(LoginStage.ASK_PHONE) }
|
||||
var phone by remember { mutableStateOf("") }
|
||||
var otp by remember { mutableStateOf("") }
|
||||
|
@ -94,7 +108,7 @@ fun LoginScreen(onConfirmOtp: () -> Unit) {
|
|||
var tokenPtr by remember { mutableStateOf(0L) }
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
modifier = modifier
|
||||
.fillMaxSize()
|
||||
.padding(16.dp),
|
||||
verticalArrangement = Arrangement.Center
|
||||
|
|
Loading…
Reference in New Issue