Skip to content

Instantly share code, notes, and snippets.

View fluxtah's full-sized avatar

Ian Warwick fluxtah

  • Just Eat
  • London
View GitHub Profile
class MyViewModel : BaseViewModel() {
val _data = MutableLiveData<String>()
val data: LiveData<String>
get() = _data
fun load() {
_data.value = "Hello, World"
}
}
class MyViewModel : BaseViewModel() {
val data: LiveData<String> = MutableLiveData()
fun load() {
data.forceValue("Hello, World")
}
private fun <T> LiveData<T>.forceValue(value: T) {
(this as MutableLiveData<T>).value = value
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
onActive {
// TODO something special
onDispose {
// TODO clean up the special stuff
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val hello = remember { HelloModel(HelloResult.Pending) }
observe(getHello()) {
onResult {
if(hello.state != result) hello.state = result
@Composable
fun <T> observe(@Pivotal data: LiveData<T>, block: ObserveScope<T>.() -> Unit) {
onActive {
val context = ObserveScope<T>()
block(context)
context.onStartBlock()
val observer = object : Observer<T> {
override fun onChanged(t: T) {
val resultScope = ObserveScope.OnResultScope(this, data, t)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val hello = remember { HelloModel(HelloResult.Pending) }
Recompose { recompose ->
observe(getHello()) {
onResult {
interface HelloView {
fun updateGreetingText(greetingText: String)
fun onShowNewGreetingButtonPressed(onPressed: () -> Unit)
}
interface HelloModel {
fun loadGreeting()
}
class HelloPresenter(val model: HelloModel, val view: HelloView) {
fun onCreated(init: Boolean) {
// If this is the first time we loaded,
// then load the first greeting
if (init) {
model.loadGreeting()
}
}
class HelloViewImpl(activity: AppCompatActivity) : HelloView {
private val greetingTextView: TextView = activity.findViewById(R.id.greeting_text)
private val newGreetingButton: Button = activity.findViewById(R.id.new_greeting_button)
override fun updateGreetingText(greetingText: String) {
greetingTextView.text = greetingText
}
override fun onShowNewGreetingButtonPressed(onPressed: () -> Unit) =
newGreetingButton.setOnClickListener { onPressed() }