5

In XML we use sample name, date etc. by using attributes like @tools:sample/first_names. Is there any way we can use sample data similar way from @tools:sample in Preview Composable ?

Niaz Ahmed
  • 220
  • 2
  • 12

1 Answers1

1

You can use the @PreviewParameter.

For example:

data class Obj(val name :String,val count:Int)

@Composable
fun ObjCard(obj:Obj) {
    Card(
        Modifier.width(100.dp).height(50.dp)){
        Column(
            verticalArrangement = Arrangement.Center,
            horizontalAlignment = Alignment.CenterHorizontally)
        {
            Text("Name = " +obj.name)
            Text("Count = " +obj.count)
        }
    }
}

In this case you can implement the PreviewParameterProvider interface and create something like:

class SampleObjProvider: PreviewParameterProvider<Obj> {
    override val values = sequenceOf(
         Obj("Obj1",10),
         Obj("Obj2",70))
    override val count: Int = values.count()
}    

Finally apply the @PreviewParameter to the ObjCard composable:

@Preview(showBackground = true)
@Composable
fun ObjCard(@PreviewParameter(SampleObjProvider::class)  obj:Obj) {
    //..same code 
}

enter image description here

Phil Dukhov
  • 67,741
  • 15
  • 184
  • 220
Gabriele Mariotti
  • 320,139
  • 94
  • 887
  • 841