# Donovan LaDuke - Developer

Helpful articles and tips for building well architected Android applications

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Reusable Styles in Compose

DevFeed: [Reusable Styles in Compose](<https://devfeed.tech/articles/reusable-styles-in-compose-25101.md>)

Original publisher: [Read original article](<https://dladukedev.com/articles/046_reusable_styles_in_compose/>)

Published: 2024-10-17T00:00:00Z

Content type: tutorial

Language: en

Sources: [Donovan LaDuke - Developer](<https://devfeed.tech/sources/donovan-laduke-developer.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [extension-function](<https://devfeed.tech/tags/extension-function.md>), [function](<https://devfeed.tech/tags/function.md>), [layout](<https://devfeed.tech/tags/layout.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [reuse](<https://devfeed.tech/tags/reuse.md>)

### AI overview

This article explains how to create reusable styles in Jetpack Compose by grouping shared modifier chains into reusable modifier functions. It discusses applying padding, borders, and card styling across layout components, while warning against excessive nesting and overuse of abstraction.

### Source excerpt

Leverage Modifier chains to create reusable styles in Compose

## Hidden Gems of the Kotlin Standard Library - List

DevFeed: [Hidden Gems of the Kotlin Standard Library - List](<https://devfeed.tech/articles/hidden-gems-of-the-kotlin-standard-library-list-25100.md>)

Original publisher: [Read original article](<https://dladukedev.com/articles/045_hidden_gems_kotlin_standard_lib/>)

Published: 2024-10-03T00:00:00Z

Content type: tutorial

Language: en

Sources: [Donovan LaDuke - Developer](<https://devfeed.tech/sources/donovan-laduke-developer.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [function](<https://devfeed.tech/tags/function.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-standard-library](<https://devfeed.tech/tags/kotlin-standard-library.md>), [library](<https://devfeed.tech/tags/library.md>), [list](<https://devfeed.tech/tags/list.md>), [overview](<https://devfeed.tech/tags/overview.md>), [sealed-class](<https://devfeed.tech/tags/sealed-class.md>), [standard](<https://devfeed.tech/tags/standard.md>), [standard-library](<https://devfeed.tech/tags/standard-library.md>)

### AI overview

An overview of useful Kotlin Standard Library functions for working with lists, including orEmpty, filterIsInstance, distinctBy, chunked, and random.

### Source excerpt

An overview of several hidden gem List Functions in the Kotlin Standard Library

## Spacing Concepts in Jetpack Compose - An Overview

DevFeed: [Spacing Concepts in Jetpack Compose - An Overview](<https://devfeed.tech/articles/spacing-concepts-in-jetpack-compose-an-overview-25099.md>)

Original publisher: [Read original article](<https://dladukedev.com/articles/044_spacing_concepts_compose/>)

Published: 2024-09-19T00:00:00Z

Content type: article

Language: en

Sources: [Donovan LaDuke - Developer](<https://devfeed.tech/sources/donovan-laduke-developer.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [guide](<https://devfeed.tech/tags/guide.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [overview](<https://devfeed.tech/tags/overview.md>), [padding](<https://devfeed.tech/tags/padding.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This article presents a mental model for handling fixed spacing in Jetpack Compose. It explains how to choose between modifiers, Spacer-like composables, and arrangement options based on parent-child and sibling relationships, including considerations for directional layouts and interactive touch targets.

### Source excerpt

A short guide to thinking about the concepts of spacing in Jetpack Compose including Spacers, padding, and Arrangement

## Improve Compose UI with Spacing Constants

DevFeed: [Improve Compose UI with Spacing Constants](<https://devfeed.tech/articles/improve-compose-ui-with-spacing-constants-25098.md>)

Original publisher: [Read original article](<https://dladukedev.com/articles/043_spacing_constants_compose_ui/>)

Published: 2024-09-05T00:00:00Z

Content type: tutorial

Language: en

Sources: [Donovan LaDuke - Developer](<https://devfeed.tech/sources/donovan-laduke-developer.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code review](<https://devfeed.tech/topics/code-review.md>)

Tags: [code-review](<https://devfeed.tech/tags/code-review.md>), [collaboration](<https://devfeed.tech/tags/collaboration.md>), [compose](<https://devfeed.tech/tags/compose.md>), [compose-ui](<https://devfeed.tech/tags/compose-ui.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

A guide to improving Jetpack Compose UI consistency by adopting spacing constants based on an 8pt grid. It demonstrates using Kotlin sealed classes or enums and overloads for spacing modifiers or composables, then replacing hard-coded spacing values with constrained components.

### Source excerpt

Create better developer ergonomics and a more cohesive design language by exposing a set of string constants

## Replace Useless Cases with Interfaces

DevFeed: [Replace Useless Cases with Interfaces](<https://devfeed.tech/articles/replace-useless-cases-with-interfaces-25097.md>)

Original publisher: [Read original article](<https://dladukedev.com/articles/042_avoid_useless_cases_part_2/>)

Published: 2024-08-15T00:00:00Z

Content type: article

Language: en

Sources: [Donovan LaDuke - Developer](<https://devfeed.tech/sources/donovan-laduke-developer.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [mvc](<https://devfeed.tech/topics/mvc.md>), [Framework](<https://devfeed.tech/topics/framework.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [class](<https://devfeed.tech/tags/class.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [function](<https://devfeed.tech/tags/function.md>), [implement](<https://devfeed.tech/tags/implement.md>), [interface](<https://devfeed.tech/tags/interface.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>)

### AI overview

The article presents an alternative to dedicated pass-through use-case classes: define use-case interfaces and implement them directly in the repository. This preserves architectural benefits while reducing unnecessary code. It also discusses using invoke-operator extensions and the resulting trade-off of exposing an additional function.

### Source excerpt

An alternative approach to avoiding Useless Cases by making Use Case interfaces without dedicated Use Case classes

## How to Add an aiexclude File

DevFeed: [How to Add an aiexclude File](<https://devfeed.tech/articles/how-to-add-an-aiexclude-file-25096.md>)

Original publisher: [Read original article](<https://dladukedev.com/articles/041_android_studio_ai_ignore/>)

Published: 2024-08-01T00:00:00Z

Content type: tutorial

Language: en

Sources: [Donovan LaDuke - Developer](<https://devfeed.tech/sources/donovan-laduke-developer.md>)

Topics: [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [AI-assisted coding](<https://devfeed.tech/topics/ai-assisted-coding.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [autocomplete](<https://devfeed.tech/tags/autocomplete.md>), [code](<https://devfeed.tech/tags/code.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [privacy](<https://devfeed.tech/tags/privacy.md>)

### AI overview

A tutorial explaining how to use an .aiexclude file in an Android Studio project to prevent selected code files from being sent to Google's Gemini-powered code generation and autocomplete features. It highlights the trade-off between protecting private or proprietary code and retaining AI-assisted productivity features.

### Source excerpt

Avoid Accidentally Sharing Code with AI for training by using an aiexclude file in Android Studio

## Cross-Document View Transitions

DevFeed: [Cross-Document View Transitions](<https://devfeed.tech/articles/cross-document-view-transitions-25095.md>)

Original publisher: [Read original article](<https://dladukedev.com/articles/040_crossdocument_view_transitions/>)

Published: 2024-07-18T00:00:00Z

Content type: article

Language: en

Sources: [Donovan LaDuke - Developer](<https://devfeed.tech/sources/donovan-laduke-developer.md>)

Topics: [view transitions](<https://devfeed.tech/topics/view-transitions.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [Chrome](<https://devfeed.tech/topics/chrome.md>), [Edge](<https://devfeed.tech/topics/edge.md>), [CSS](<https://devfeed.tech/topics/css.md>), [Single-page application (SPA)](<https://devfeed.tech/topics/spa.md>)

Tags: [chrome](<https://devfeed.tech/tags/chrome.md>), [css](<https://devfeed.tech/tags/css.md>), [firefox](<https://devfeed.tech/tags/firefox.md>), [google-i-o](<https://devfeed.tech/tags/google-i-o.md>), [microsoft-edge](<https://devfeed.tech/tags/microsoft-edge.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [view-transitions](<https://devfeed.tech/tags/view-transitions.md>), [web-apps](<https://devfeed.tech/tags/web-apps.md>)

### AI overview

This article explains how Cross-Document View Transitions can make traditional multi-page websites feel more seamless by adding navigation and shared-element animations between full-page loads. It also discusses progressive enhancement and current browser support.

### Source excerpt

Make Multi-Page applications feel more seamless with built in navigation transition animations in the latest version of Chrome as announced at Google I/O

## Improving Perceived Performance with Delayed Visibility

DevFeed: [Improving Perceived Performance with Delayed Visibility](<https://devfeed.tech/articles/improving-perceived-performance-with-delayed-visibility-25094.md>)

Original publisher: [Read original article](<https://dladukedev.com/articles/039_delayed_visibility_modifier/>)

Published: 2024-07-04T00:00:00Z

Content type: tutorial

Language: en

Sources: [Donovan LaDuke - Developer](<https://devfeed.tech/sources/donovan-laduke-developer.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Cache](<https://devfeed.tech/topics/cache.md>), [Network](<https://devfeed.tech/topics/network.md>)

Tags: [cache](<https://devfeed.tech/tags/cache.md>), [compose](<https://devfeed.tech/tags/compose.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [performance](<https://devfeed.tech/tags/performance.md>), [ui](<https://devfeed.tech/tags/ui.md>), [visibility-modifier](<https://devfeed.tech/tags/visibility-modifier.md>)

### AI overview

This article explains how delaying the rendering of loading indicators can improve perceived performance. A short delay, such as 100 milliseconds, prevents flickering when data loads quickly from memory while still showing feedback for slower network requests.

### Source excerpt

Improve percieved performance for users by delaying showing loading elements until needed

## Using Lists in Compose Previews

DevFeed: [Using Lists in Compose Previews](<https://devfeed.tech/articles/using-lists-in-compose-previews-25093.md>)

Original publisher: [Read original article](<https://dladukedev.com/articles/038_compose_collectionpreviewparameterprovider/>)

Published: 2024-06-20T00:00:00Z

Content type: tutorial

Language: en

Sources: [Donovan LaDuke - Developer](<https://devfeed.tech/sources/donovan-laduke-developer.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [Documentation](<https://devfeed.tech/topics/documentation.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [article](<https://devfeed.tech/tags/article.md>), [compose](<https://devfeed.tech/tags/compose.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [how-to](<https://devfeed.tech/tags/how-to.md>)

### AI overview

This tutorial explains how to use a List with CollectionPreviewParameterProvider to preview multiple variations of Compose components. It presents this approach as a simpler alternative to creating separate preview functions and to using a Sequence.

### Source excerpt

The Android developer documentation shows how to use a sequence to build multiple Compose Previews, but a List can also be used with the CollectionPreviewParameterProvider

## Dynamic Layouts with ContextualFlowRow and ContextualFlowColumn

DevFeed: [Dynamic Layouts with ContextualFlowRow and ContextualFlowColumn](<https://devfeed.tech/articles/dynamic-layouts-with-contextualflowrow-and-contextualflowcolumn-25092.md>)

Original publisher: [Read original article](<https://dladukedev.com/articles/037_dynamic_rows_with_contextual_flow_row/>)

Published: 2024-06-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Donovan LaDuke - Developer](<https://devfeed.tech/sources/donovan-laduke-developer.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Large Screen](<https://devfeed.tech/topics/large-screen.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [compose](<https://devfeed.tech/tags/compose.md>), [devices](<https://devfeed.tech/tags/devices.md>), [examples](<https://devfeed.tech/tags/examples.md>), [google](<https://devfeed.tech/tags/google.md>), [google-i-o](<https://devfeed.tech/tags/google-i-o.md>), [layout](<https://devfeed.tech/tags/layout.md>), [screen](<https://devfeed.tech/tags/screen.md>)

### AI overview

A tutorial on using Compose's ContextualFlowRow and ContextualFlowColumn for dynamic row and column layouts. It explains how these components support fixed row or column counts, overflow policies, lazy layout, and adaptation to large-screen devices such as tablets and foldables.

### Source excerpt

Check out ContextualFlowRow and ContextualFlowColumn a new way to layout items in a row or column with a dynamic number of items that accounts for dynamic screen sizes automagically