Migration du navController
Migration du navController couplage fort en evenemential donc coplage faible avec transfer d'evenement
This commit is contained in:
@@ -32,8 +32,25 @@ fun ArticleActivityPage() {
|
||||
navController = navController,
|
||||
startDestination = "list_article"
|
||||
) {
|
||||
composable("list_article") { ListArticleFragmentPage(viewModel, detailViewModel, navController) }
|
||||
composable("article_form") { ArticleFormFragmentPage(viewModel, navController) }
|
||||
composable("list_article") {
|
||||
ListArticleFragmentPage(viewModel, detailViewModel,
|
||||
onClickAddArticle = {
|
||||
navController.navigate("article_form")
|
||||
},
|
||||
onClickEditArticle = {
|
||||
navController.navigate("article_form")
|
||||
},
|
||||
onClickShowArticle = {
|
||||
navController.navigate("article_detail");
|
||||
}
|
||||
)
|
||||
}
|
||||
composable("article_form") {
|
||||
ArticleFormFragmentPage(viewModel,
|
||||
onAddArticleSuccess = {
|
||||
navController.navigate("list_article")
|
||||
})
|
||||
}
|
||||
composable("article_detail") { DetailArticleFragmentPage(detailViewModel) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ import com.example.tpfilrouge.ui.theme.EniTextField
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
|
||||
@Composable
|
||||
fun ArticleForm(viewModel: ListArticleViewModel, navController : NavController?=null){
|
||||
fun ArticleForm(viewModel: ListArticleViewModel, onAddArticleSuccess : () -> Unit = {}){
|
||||
var titleFieldState by remember { mutableStateOf("Un article") }
|
||||
var descFieldState by remember { mutableStateOf("Une description") }
|
||||
|
||||
@@ -43,15 +43,13 @@ fun ArticleForm(viewModel: ListArticleViewModel, navController : NavController?=
|
||||
val newArticle = Article(titleFieldState, descFieldState,
|
||||
"https://avatar.iran.liara.run/public");
|
||||
// Envoyer l'article via une méthode view model
|
||||
viewModel.addArticle(newArticle, onSuccess = {
|
||||
navController!!.navigate("list_article")
|
||||
})
|
||||
viewModel.addArticle(newArticle, onSuccess = onAddArticleSuccess)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ArticleEditForm(viewModel: ListArticleViewModel, navController : NavController?=null){
|
||||
fun ArticleEditForm(viewModel: ListArticleViewModel){
|
||||
var titleFieldState by remember { mutableStateOf(viewModel.editedArticle.title) }
|
||||
var descFieldState by remember { mutableStateOf(viewModel.editedArticle.desc) }
|
||||
|
||||
@@ -71,27 +69,27 @@ fun ArticleEditForm(viewModel: ListArticleViewModel, navController : NavControll
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun AddArticleFormPage(viewModel: ListArticleViewModel, navController : NavController?=null){
|
||||
fun AddArticleFormPage(viewModel: ListArticleViewModel, onAddArticleSuccess : () -> Unit = {}){
|
||||
Text(text = "Ajouter un article",
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
textAlign = TextAlign.Center,
|
||||
style = TextStyle(color = Color.White, fontSize = 28.sp)
|
||||
)
|
||||
ArticleForm(viewModel, navController)
|
||||
ArticleForm(viewModel, onAddArticleSuccess)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun EditArticleFormPage(viewModel: ListArticleViewModel, navController : NavController?=null){
|
||||
fun EditArticleFormPage(viewModel: ListArticleViewModel){
|
||||
Text(text = "Modifier un article",
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
textAlign = TextAlign.Center,
|
||||
style = TextStyle(color = Color.White, fontSize = 28.sp)
|
||||
)
|
||||
ArticleEditForm(viewModel, navController)
|
||||
ArticleEditForm(viewModel)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ArticleFormFragmentPage(viewModel: ListArticleViewModel, navController : NavController?=null) {
|
||||
fun ArticleFormFragmentPage(viewModel: ListArticleViewModel, onAddArticleSuccess : () -> Unit = {}) {
|
||||
// Savoir si je suis en mode edition ou ajout
|
||||
val isEdit by viewModel.isEdit.collectAsState();
|
||||
|
||||
@@ -101,10 +99,10 @@ fun ArticleFormFragmentPage(viewModel: ListArticleViewModel, navController : Nav
|
||||
modifier = Modifier.padding(40.dp)
|
||||
) {
|
||||
if (isEdit){
|
||||
EditArticleFormPage(viewModel, navController)
|
||||
EditArticleFormPage(viewModel)
|
||||
}
|
||||
else {
|
||||
AddArticleFormPage(viewModel, navController)
|
||||
AddArticleFormPage(viewModel, onAddArticleSuccess)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,8 @@ import com.example.tpfilrouge.ui.theme.EniPage
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
|
||||
@Composable
|
||||
fun ArticleCard(article: Article, viewModel: ListArticleViewModel, detailViewModel: DetailArticleViewModel, navController: NavController?=null){
|
||||
fun ArticleCard(article: Article, viewModel: ListArticleViewModel, detailViewModel: DetailArticleViewModel,
|
||||
onClickEditArticle : () -> Unit = {}, onClickShowArticle : () -> Unit = {}){
|
||||
ElevatedCard(
|
||||
elevation = CardDefaults.cardElevation(defaultElevation = 6.dp),
|
||||
shape = RoundedCornerShape(0.dp),
|
||||
@@ -69,9 +70,8 @@ fun ArticleCard(article: Article, viewModel: ListArticleViewModel, detailViewMod
|
||||
Text(article.desc, style = TextStyle(color = Color.White))
|
||||
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.End) {
|
||||
IconButton(onClick = {
|
||||
|
||||
detailViewModel.article.value = article;
|
||||
navController!!.navigate("article_detail");
|
||||
onClickShowArticle();
|
||||
|
||||
}) {
|
||||
Icon(imageVector = Icons.Filled.Info, tint = Color.White, contentDescription = "Voir")
|
||||
@@ -84,7 +84,7 @@ fun ArticleCard(article: Article, viewModel: ListArticleViewModel, detailViewMod
|
||||
// Dire au viewmodel quel Id d'article en cours de proccessus
|
||||
viewModel.editedArticleId = article.id;
|
||||
// naviguer dans le formulaire
|
||||
navController!!.navigate("article_form")
|
||||
onClickEditArticle();
|
||||
}) {
|
||||
Icon(imageVector = Icons.Filled.Edit, tint = Color.White, contentDescription = "Edit")
|
||||
}
|
||||
@@ -102,7 +102,9 @@ fun ArticleCard(article: Article, viewModel: ListArticleViewModel, detailViewMod
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ListArticleFragmentPage(viewModel: ListArticleViewModel, detailViewModel: DetailArticleViewModel, navController: NavController? = null) {
|
||||
fun ListArticleFragmentPage(viewModel: ListArticleViewModel, detailViewModel: DetailArticleViewModel,
|
||||
onClickAddArticle : () -> Unit = {}, onClickEditArticle : () -> Unit = {},
|
||||
onClickShowArticle : () -> Unit = {}) {
|
||||
// Ecouter les changements de la liste d'article dans le ViewModel
|
||||
val articlesState by viewModel.articles.collectAsState();
|
||||
|
||||
@@ -118,8 +120,7 @@ fun ListArticleFragmentPage(viewModel: ListArticleViewModel, detailViewModel: De
|
||||
EniButton("Ajouter un Article") {
|
||||
// Passer le edit à false pour revenir en mode ajout dans le form
|
||||
viewModel.isEdit.value = false;
|
||||
|
||||
navController!!.navigate("article_form")
|
||||
onClickAddArticle();
|
||||
}
|
||||
EniButton("Rafraichir") {
|
||||
// Appeler l'api du viewmodel
|
||||
@@ -127,7 +128,7 @@ fun ListArticleFragmentPage(viewModel: ListArticleViewModel, detailViewModel: De
|
||||
}
|
||||
LazyColumn {
|
||||
items(articlesState) { article ->
|
||||
ArticleCard(article, viewModel, detailViewModel, navController)
|
||||
ArticleCard(article, viewModel, detailViewModel, onClickEditArticle, onClickShowArticle)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user