Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android à l'ere de Compose

Farouk
December 09, 2023
5

Android à l'ere de Compose

Découvrez comment Compose révolutionne la création d'interfaces utilisateur sur Android et apprenez les meilleures pratiques pour rester à la pointe de la technologie dans le paysage du développement natif d'aujourd'hui.

Farouk

December 09, 2023
Tweet

Transcript

  1. Le développement Android moderne à l'ère de Compose. Niamey Sabiou

    Godi Farouk Android Engineer Android à l'ère de Compose. Niamey Sabiou Godi Farouk Android Engineer
  2. • Developpeur Android (Freelance) • Consultant Formateur • Lead Organizer

    GDG Maradi • Technical writer (codelabs, articles) • Speaker
  3. public class MainActivity extends AppCompatActivity implements View.OnClickListener { static Repository

    repository = new Repository(); final static String KEY = "Key"; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.text_view); if (savedInstanceState != null) { // Retrieve from savedInstanceState textView.setText( savedInstanceState.getString(KEY) ); } else { // Retrieve from intent textView.setText( getIntent().getExtras().getString(KEY) ); } Button button = findViewById(R.id.btn_fetch); button.setOnClickListener(this); } @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); // Saving to savedInstanceState outState.putString(KEY, textView.getText().toString()); } @Override public void onClick(View v) { // Retrieve from repository textView.setText(repository.getMessage()); } } Repository Saved instance state Intent retrieval
  4. MVP (Model-View Presenter) MainPresenter.java View Server data MainActivity.java RxJava findviewById

    RecyclerView MainActivity.kt* Dagger data Action trigger instanciation Callback Intent Saved Instance state
  5. MVVM (Model-View-ViewModel) View Server data MainActivity.kt Coroutine findviewById RecyclerView Trigger

    Observe Intent Saved Instance state Saved state handler Dagger Hilt Inject saved state handler and repository LiveDa ta Inject view model
  6. • Tourne sous la JVM (Java Virtual Machine), ce qui

    le rend interopérable avec Java • Null Safety • Combine la POO et la Programmation Fonctionnelle • Possibilité d'écrire des scripts Kotlin (Kotlin Gradle Build Script) • Top-level functions, extensions functions … • Kotlin Multiplatform
  7. • Tourne sous la JVM (Java Virtual Machine), ce qui

    le rend interopérable avec Java • Null Safety • Combine la POO et la Programmation Fonctionnelle • Possibilité d'écrire des scripts Kotlin (Kotlin Gradle Build Script) • Top-level functions, extensions functions … • Kotlin Multiplatform
  8. • Tourne sous la JVM (Java Virtual Machine), ce qui

    le rend interopérable avec Java • Null Safety • Combine la POO et la Programmation Fonctionnelle • Possibilité d'écrire des scripts Kotlin (Kotlin Gradle Build Script) • Top-level functions, extensions functions … • Kotlin Multiplatform
  9. • Tourne sous la JVM (Java Virtual Machine), ce qui

    le rend interopérable avec Java • Null Safety • Combine la POO et la Programmation Fonctionnelle • Possibilité d'écrire des scripts Kotlin (Kotlin Gradle Build Script) • Top-level functions, extensions functions … • Kotlin Multiplatform
  10. • Tourne sous la JVM (Java Virtual Machine), ce qui

    le rend interopérable avec Java • Null Safety • Combine la POO et la Programmation Fonctionnelle • Possibilité d'écrire des scripts Kotlin (Kotlin Gradle Build Script) • Top-level functions, extensions functions … • Kotlin Multiplatform
  11. • Tourne sous la JVM (Java Virtual Machine), ce qui

    le rend interopérable avec Java • Null Safety • Combine la POO et la Programmation Fonctionnelle • Possibilité d'écrire des scripts Kotlin (Kotlin Gradle Build Script) • Top-level functions, extensions functions … • Kotlin Multiplatform
  12. abstract class Person(val name: String) { abstract fun greet() }

    interface FoodConsumer { fun eat() fun pay(amount: Int) = println("Montant: $amount FCA!") } class RestaurantCustomer(name: String, val plat: String) : Person(name), FoodConsumer { fun order() = println("De la $plat, SVP!") override fun eat() = println("*Mange de la $plat*") override fun greet() = println("Bonjour!) } fun main() { val farouk = RestaurantCustomer("Farouk", "salade") sam.greet() // implémentation d’une fonction abstraite sam.order() // fonction membre sam.eat() // implémentation d’une fonction d’interface sam.pay(1000) // implémentation par défaut d’une interface }
  13. Technologie open-source permettant le développement d’applications multi plateforme avec Kotlin.

    Kotlin Multiplatform vous permet de créer des applications pour différentes plateformes et de réutiliser du code entre elles tout en conservant les avantages de la programmation native.
  14. UI Logic UI Logic Logic UI Une portion de la

    logique Quoi partager avec les autres plateformes?
  15. UI Logic UI Logic Logic UI Toute la logique Quoi

    partager avec les autres plateformes?
  16. UI Logic UI Logic UI Logic Logique + Interface Utilisateur

    Quoi partager avec les autres plateformes?
  17. Jetpack Compose est un kit de création d’interfaces utilisateur natives

    sur Android. Il simplifie et accélère le développement UI. Avec Jetpack Compose vous pouvez prototyper votre application avec moins de code, des outils puissants et des interfaces Kotlin intuitives.
  18. • Approche impérative déclarative (Focus sur le Quoi et non

    le Comment) • Améliore la productivité des développeurs (Faire plus avec moins) • 100% interopérable avec les vues en XML • Codebase plus saine
  19. • Approche impérative déclarative (Focus sur le Quoi et non

    le Comment) • Améliore la productivité des développeurs (Faire plus avec moins) • 100% interopérable avec les vues en XML • Codebase plus saine
  20. • Approche impérative déclarative (Focus sur le Quoi et non

    le Comment) • Améliore la productivité des développeurs • 100% interopérable avec les vues en XML (rétrocompatibilité) • Codebase plus saine
  21. • Approche impérative déclarative (Focus sur le Quoi et non

    le Comment) • Améliore la productivité des développeurs • 100% interopérable avec les vues en XML (rétrocompatibilité) • Codebase plus saine 😊
  22. Fonction composable • Décrit une portion de votre interface •

    Ne renvoie rien • Prends des parametres et genere le rendu affiché sur l’ecran • Peut emetre plusieurs composants de votre UI
  23. @Composable fun Button( onClick: () -> Unit, ... text: @Composable

    () -> Unit ) { // implementation of the Button }
  24. @Composable fun Button( onClick: () -> Unit, ... text: @Composable

    () -> Unit ) { // implementation of the Button } Button(onClick = {}, shape = CircleShape) {}
  25. @Composable fun Button( onClick: () -> Unit, ... text: @Composable

    () -> Unit ) { // implementation of the Button } Button(onClick = {}, shape = CircleShape) {} annotation
  26. Button( onClick = { /*TODO*/ }, shape = CircleShape )

    { Text(text = "DevFest Niamey 2023") }
  27. @Composable fun SpeakerCardDemo( onClick: () -> Unit ) { Column

    { Text(text = "Farouk Sabiou") Text(text = "Android Engineer") } }
  28. @Composable fun SpeakerCardDemo( onClick: () -> Unit ) { Column

    { Text(text = "Farouk Sabiou") Text(text = "Android Engineer") } }
  29. @Composable fun SpeakerCardDemo( onClick: () -> Unit ) { Row(...)

    { Image(...) Column { Text(text = "Farouk Sabiou") Text(text = "Android Engineer") } } }
  30. @Composable fun SpeakerCardDemo( onClick: () -> Unit ) { Row(...)

    { Image(...) Column { Text(text = "Farouk Sabiou") Text(text = "Android Engineer") } } }
  31. @Composable fun SpeakerCardDemo( onClick: () -> Unit ) { Column(...)

    { Row(...) { Image(...) Column { Text(text = "Farouk Sabiou") Text(text = "Android Engineer") } } Card { Image(...) } } }
  32. @Composable fun SpeakerCardDemo( onClick: () -> Unit ) { Column(...)

    { Row(...) { Image(...) Column { Text(text = "Farouk Sabiou") Text(text = "Android Engineer") } } Card { Image(...) } } }
  33. “Threads a été développé et lancé en seulement cinq mois.”

    Richard Zadorozny, Software Engineer chez Threads/Instagram
  34. Q&A

  35. • Kotlin • Article AndroidMood sur Jetpack Compose • Understanding

    Jetpack Compose • Jetpack compose (site web officiel android) • Codelabs • Architecture • How Android Development Evolves Over The Years • Layout guide • Official Compose samples