Add topAppBar to some tabs
This commit is contained in:
parent
f08d3eac71
commit
cf0f94bff2
@ -3,9 +3,13 @@ package com.readrops.app.compose.account
|
|||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.material3.Button
|
import androidx.compose.material3.Button
|
||||||
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.material3.TopAppBar
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
@ -27,6 +31,7 @@ object AccountTab : Tab {
|
|||||||
title = "Account"
|
title = "Account"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
override fun Content() {
|
override fun Content() {
|
||||||
val navigator = LocalNavigator.currentOrThrow
|
val navigator = LocalNavigator.currentOrThrow
|
||||||
@ -37,27 +42,33 @@ object AccountTab : Tab {
|
|||||||
navigator.replaceAll(AccountSelectionScreen())
|
navigator.replaceAll(AccountSelectionScreen())
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Scaffold(
|
||||||
Text(text = "Account")
|
topBar = {
|
||||||
|
TopAppBar(title = { Text(text = "Account") })
|
||||||
Spacer(modifier = Modifier.size(16.dp))
|
|
||||||
|
|
||||||
Row {
|
|
||||||
Button(onClick = { viewModel.deleteAccount() }) {
|
|
||||||
Text(
|
|
||||||
text = "Delete"
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
) { paddingValues ->
|
||||||
|
Column(
|
||||||
|
modifier = Modifier.padding(paddingValues)
|
||||||
|
) {
|
||||||
|
Row {
|
||||||
|
Button(onClick = { viewModel.deleteAccount() }) {
|
||||||
|
Text(
|
||||||
|
text = "Delete"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
Spacer(modifier = Modifier.size(16.dp))
|
Spacer(modifier = Modifier.size(16.dp))
|
||||||
|
|
||||||
Button(onClick = { navigator.push(AccountSelectionScreen()) }) {
|
Button(onClick = { navigator.push(AccountSelectionScreen()) }) {
|
||||||
Text(
|
Text(
|
||||||
text = "New"
|
text = "New"
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -7,8 +7,12 @@ import androidx.compose.foundation.lazy.LazyColumn
|
|||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.Add
|
import androidx.compose.material.icons.filled.Add
|
||||||
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.FloatingActionButton
|
import androidx.compose.material3.FloatingActionButton
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
|
import androidx.compose.material3.Scaffold
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.material3.TopAppBar
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
@ -31,6 +35,7 @@ object FeedTab : Tab {
|
|||||||
title = "Feeds"
|
title = "Feeds"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
override fun Content() {
|
override fun Content() {
|
||||||
val viewModel = getViewModel<FeedViewModel>()
|
val viewModel = getViewModel<FeedViewModel>()
|
||||||
@ -40,55 +45,62 @@ object FeedTab : Tab {
|
|||||||
|
|
||||||
if (showDialog) {
|
if (showDialog) {
|
||||||
AddFeedDialog(
|
AddFeedDialog(
|
||||||
onDismiss = { showDialog = false },
|
onDismiss = { showDialog = false },
|
||||||
onValidate = {
|
onValidate = {
|
||||||
showDialog = false
|
showDialog = false
|
||||||
viewModel.insertFeed(it)
|
viewModel.insertFeed(it)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Box(
|
Scaffold(
|
||||||
modifier = Modifier.fillMaxSize()
|
topBar = {
|
||||||
) {
|
TopAppBar(title = { Text(text = "Feeds") })
|
||||||
when (state) {
|
}
|
||||||
is FeedsState.LoadedState -> {
|
) { paddingValues ->
|
||||||
val feeds = (state as FeedsState.LoadedState).feeds
|
Box(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.padding(paddingValues)
|
||||||
|
) {
|
||||||
|
when (state) {
|
||||||
|
is FeedsState.LoadedState -> {
|
||||||
|
val feeds = (state as FeedsState.LoadedState).feeds
|
||||||
|
|
||||||
if (feeds.isNotEmpty()) {
|
if (feeds.isNotEmpty()) {
|
||||||
LazyColumn {
|
LazyColumn {
|
||||||
items(
|
items(
|
||||||
items = feeds
|
items = feeds
|
||||||
) { feed ->
|
) { feed ->
|
||||||
FeedItem(
|
FeedItem(
|
||||||
feed = feed,
|
feed = feed,
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is FeedsState.ErrorState -> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
is FeedsState.ErrorState -> {
|
|
||||||
|
|
||||||
|
FloatingActionButton(
|
||||||
|
modifier = Modifier
|
||||||
|
.align(Alignment.BottomEnd)
|
||||||
|
.padding(16.dp),
|
||||||
|
onClick = { showDialog = true }
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.Add,
|
||||||
|
contentDescription = null
|
||||||
|
)
|
||||||
}
|
}
|
||||||
else -> {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FloatingActionButton(
|
|
||||||
modifier = Modifier
|
|
||||||
.align(Alignment.BottomEnd)
|
|
||||||
.padding(16.dp),
|
|
||||||
onClick = { showDialog = true }
|
|
||||||
) {
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Default.Add,
|
|
||||||
contentDescription = null
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,21 +3,23 @@ package com.readrops.app.compose.timelime
|
|||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.material3.TopAppBar
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||||
import cafe.adriel.voyager.navigator.Navigator
|
|
||||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||||
import cafe.adriel.voyager.navigator.tab.LocalTabNavigator
|
|
||||||
import cafe.adriel.voyager.navigator.tab.Tab
|
import cafe.adriel.voyager.navigator.tab.Tab
|
||||||
import cafe.adriel.voyager.navigator.tab.TabOptions
|
import cafe.adriel.voyager.navigator.tab.TabOptions
|
||||||
import com.google.accompanist.swiperefresh.SwipeRefresh
|
import com.google.accompanist.swiperefresh.SwipeRefresh
|
||||||
@ -37,6 +39,7 @@ object TimelineTab : Tab {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
override fun Content() {
|
override fun Content() {
|
||||||
val viewModel = getViewModel<TimelineViewModel>()
|
val viewModel = getViewModel<TimelineViewModel>()
|
||||||
@ -47,37 +50,50 @@ object TimelineTab : Tab {
|
|||||||
|
|
||||||
val navigator = LocalNavigator.currentOrThrow
|
val navigator = LocalNavigator.currentOrThrow
|
||||||
|
|
||||||
SwipeRefresh(
|
Scaffold(
|
||||||
state = swipeToRefreshState,
|
topBar = {
|
||||||
onRefresh = {
|
TopAppBar(
|
||||||
viewModel.refreshTimeline()
|
title = { Text(text = "Timeline") }
|
||||||
},
|
)
|
||||||
) {
|
}
|
||||||
when (state) {
|
) { paddingValues ->
|
||||||
is TimelineState.LoadedState -> {
|
SwipeRefresh(
|
||||||
val items = (state as TimelineState.LoadedState).items
|
state = swipeToRefreshState,
|
||||||
|
onRefresh = {
|
||||||
|
viewModel.refreshTimeline()
|
||||||
|
},
|
||||||
|
modifier = Modifier.padding(paddingValues)
|
||||||
|
) {
|
||||||
|
when (state) {
|
||||||
|
is TimelineState.LoadedState -> {
|
||||||
|
val items = (state as TimelineState.LoadedState).items
|
||||||
|
|
||||||
if (items.isNotEmpty()) {
|
if (items.isNotEmpty()) {
|
||||||
LazyColumn {
|
LazyColumn {
|
||||||
items(
|
items(
|
||||||
items = items
|
items = items
|
||||||
) {
|
) {
|
||||||
TimelineItem(
|
TimelineItem(
|
||||||
onClick = { navigator.push(ItemScreen()) }
|
onClick = { navigator.push(ItemScreen()) }
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
NoItemPlaceholder()
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
else -> {
|
||||||
NoItemPlaceholder()
|
NoItemPlaceholder()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> {
|
|
||||||
NoItemPlaceholder()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun NoItemPlaceholder() {
|
fun NoItemPlaceholder() {
|
||||||
val scrollState = rememberScrollState()
|
val scrollState = rememberScrollState()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user