Skip to content

Commit

Permalink
feat: 更多登录滚动条
Browse files Browse the repository at this point in the history
  • Loading branch information
xfqwdsj committed Jan 21, 2024
1 parent 4067586 commit 4eed58c
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 88 deletions.
2 changes: 1 addition & 1 deletion build-number.properties
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@
# You should have received a copy of the GNU General Public License along
# with Fhraise. If not, see <https://www.gnu.org/licenses/>.
#
buildNumber=32
buildNumber=34
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import com.arkivanov.decompose.ComponentContext
import com.arkivanov.decompose.router.stack.*
import com.arkivanov.decompose.router.stack.ChildStack
import com.arkivanov.decompose.router.stack.StackNavigation
import com.arkivanov.decompose.router.stack.childStack
import com.arkivanov.decompose.router.stack.pop
import com.arkivanov.decompose.value.Value
import com.arkivanov.essenty.backhandler.BackHandlerOwner
import data.AppComponentContext
Expand Down Expand Up @@ -95,12 +98,7 @@ class AppRootComponent(
AppSignInComponent.ComponentState.SignIn(
context = this,
onGuestSignIn = {},
onUsernameSignIn = {},
onFaceSignIn = {},
onSignUp = {
navigation.push(Configuration.SignUp)
},
onAdminSignIn = {},
)
},
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,9 @@ interface SignInComponent : AppComponentContext {
}

val onGuestSignIn: () -> Unit
val onUsernameSignIn: () -> Unit
val onFaceSignIn: () -> Unit
val onSignUp: () -> Unit
val onAdminSignIn: () -> Unit

fun onAdminSignIn()
}

interface SignUp : ComponentState, UsernamePasswordState {
Expand Down Expand Up @@ -130,10 +129,7 @@ class AppSignInComponent(
canInputVerifyCode: Boolean = false,
showMoreSignInOptions: Boolean = false,
override val onGuestSignIn: () -> Unit,
override val onUsernameSignIn: () -> Unit,
override val onFaceSignIn: () -> Unit,
override val onSignUp: () -> Unit,
override val onAdminSignIn: () -> Unit,
) : ComponentState(context), SignInComponent.ComponentState.SignIn {
private val phoneNumberRegex =
Regex("^1(3(([0-3]|[5-9])[0-9]{8}|4[0-8][0-9]{7})|(45|5([0-2]|[5-6]|[8-9])|6(2|[5-7])|7([0-1]|[5-8])|8[0-9]|9([0-3]|[5-9]))[0-9]{8})$")
Expand Down Expand Up @@ -213,6 +209,10 @@ class AppSignInComponent(
override val onDone: KeyboardActionScope.() -> Unit = {
submit()
}

override fun onAdminSignIn() {
// TODO
}
}

class SignUp(
Expand Down
141 changes: 66 additions & 75 deletions composeApp/src/commonMain/kotlin/ui/pages/root/SignIn.kt
Original file line number Diff line number Diff line change
Expand Up @@ -481,82 +481,73 @@ fun SignInMainLayout(

@Composable
fun SignInComponent.ComponentState.SignIn.MoreMethods(modifier: Modifier = Modifier) {
Column(modifier = modifier.verticalScroll(state = rememberScrollState())) {
FilledTonalButton(
onClick = onGuestSignIn,
modifier = Modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.large,
) {
Icon(
imageVector = Icons.Default.NoAccounts,
contentDescription = null,
)
Spacer(modifier = Modifier.width(8.dp))
Text(text = "游客登录")
}
FilledTonalButton(
onClick = onUsernameSignIn,
modifier = Modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.large,
) {
Icon(
imageVector = Icons.Default.Person,
contentDescription = null,
)
Spacer(modifier = Modifier.width(8.dp))
Text(text = "用户名登录")
}
FilledTonalButton(
onClick = onFaceSignIn,
modifier = Modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.large,
) {
Icon(
imageVector = Icons.Default.Face,
contentDescription = null,
)
Spacer(modifier = Modifier.width(8.dp))
Text(text = "人脸登录")
}
FilledTonalButton(
onClick = onSignUp,
modifier = Modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.large,
) {
Icon(
imageVector = Icons.Default.PersonAdd,
contentDescription = null,
)
Spacer(modifier = Modifier.width(8.dp))
Text(text = "注册")
}
TextButton(
onClick = ::switchShowMoreSignInOptions,
modifier = Modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.large,
) {
Icon(
imageVector = Icons.Default.MoreHoriz,
contentDescription = null,
)
Spacer(modifier = Modifier.width(8.dp))
Text(text = "更多登录选项")
}
AnimatedVisibility(
visible = showMoreSignInOptions,
) {
FilledTonalButton(
onClick = onAdminSignIn,
modifier = Modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.large,
) {
Icon(
imageVector = Icons.Default.AdminPanelSettings,
contentDescription = null,
)
Spacer(modifier = Modifier.width(8.dp))
Text(text = "管理员登录")
val scrollState = rememberScrollState()

SubcomposeLayout { constraints ->
val buttons = subcompose("buttons") {
Column(modifier = modifier.verticalScroll(state = scrollState)) {
FilledTonalButton(
onClick = onGuestSignIn,
modifier = Modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.large,
) {
Icon(
imageVector = Icons.Default.NoAccounts,
contentDescription = null,
)
Spacer(modifier = Modifier.width(8.dp))
Text(text = "游客登录")
}
FilledTonalButton(
onClick = onFaceSignIn,
modifier = Modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.large,
) {
Icon(
imageVector = Icons.Default.Face,
contentDescription = null,
)
Spacer(modifier = Modifier.width(8.dp))
Text(text = "人脸登录")
}
TextButton(
onClick = ::switchShowMoreSignInOptions,
modifier = Modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.large,
) {
Icon(
imageVector = Icons.Default.MoreHoriz,
contentDescription = null,
)
Spacer(modifier = Modifier.width(8.dp))
Text(text = "更多登录选项")
}
AnimatedVisibility(
visible = showMoreSignInOptions,
) {
FilledTonalButton(
onClick = ::onAdminSignIn,
modifier = Modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.large,
) {
Icon(
imageVector = Icons.Default.AdminPanelSettings,
contentDescription = null,
)
Spacer(modifier = Modifier.width(8.dp))
Text(text = "管理员登录")
}
}
}
}.first().measure(constraints)

val scrollBar = subcompose("scrollBar") {
VerticalScrollbar(scrollState = scrollState)
}.first().measure(Constraints.fixedHeight(buttons.height))

layout(buttons.width, buttons.height) {
buttons.placeRelative(0, 0)
scrollBar.placeRelative(buttons.width - scrollBar.width, 0)
}
}
}
Expand Down

0 comments on commit 4eed58c

Please sign in to comment.