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