This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.aidanvii.extensions | |
import android.util.SparseArray | |
import java.util.* | |
val SparseArray<*>.max: Int get () = size() - 1; | |
inline fun <V> SparseArray<V>.forEachValue(action: (V) -> Unit): SparseArray<V> { | |
for (index in 0..max) { | |
val key = keyAt(index) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.aidanvii.extensions | |
fun Any.logD(message: String) = Logger.d(javaClass.simpleName, message) | |
interface LoggerDelegate { | |
fun d(tag: String, message: String) | |
} | |
interface CompositeLoggerDelegate : LoggerDelegate { | |
fun attachDelegate(delegate: LoggerDelegate) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.aidanvii7.mvvm | |
class UserViewModel(val firstName: String, val lastName: String) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fun <T> BaseObservable.bindable(initialValue: T, propertyId: Int): BindableProperty<T> { | |
return BindableProperty<T>(initialValue, this) | |
} | |
class BindableProperty<T>(initialValue: T, | |
private val observable: BaseObservable) : ObservableProperty<T>(initialValue) { | |
private var propertyId: Int = 0 | |
override fun beforeChange(property: KProperty<*>, oldValue: T, newValue: T): Boolean { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.arch.lifecycle.ViewModel | |
import android.arch.lifecycle.ViewModelProvider | |
import android.arch.lifecycle.ViewModelProviders | |
import android.support.v4.app.Fragment | |
import android.support.v4.app.FragmentActivity | |
/** | |
* Implementation of [ViewModelProvider.Factory] that takes care of the slightly awkward generic method [ViewModelProvider.Factory.create] | |
* | |
* It removes the need for the client to manually handle the given ViewModel [Class] in an if else clause or switch statement, or perform type casting when returning. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MyViewModel : ViewModel() { | |
@get:MainThread | |
val users: LiveData<List<String>> by unsafeLazy { | |
MutableLiveData<List<String>>().apply { loadUsersInto(this) } | |
} | |
private fun loadUsersInto(liveData: MutableLiveData<List<String>>) { | |
// do async operation to fetch users and update | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
inline fun <V : View, I> V.trackInstance( | |
newInstance: I?, | |
@IdRes instanceResId: Int, | |
onDetached: V.(I) -> Unit = {}, | |
onAttached: V.(I) -> Unit = {} | |
) { | |
ListenerUtil.trackListener(this, newInstance, instanceResId).let { oldInstance -> | |
if (oldInstance !== newInstance) { // referential comparison | |
oldInstance?.let { onDetached(oldInstance) } | |
newInstance?.let { onAttached(newInstance) } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:mobx/mobx.dart'; | |
part 'counter_store.g.dart'; | |
class CounterStore = _CounterStore with _$CounterStore; | |
abstract class _CounterStore with Store { | |
@observable | |
int counter1 = 0; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/widgets.dart'; | |
import 'package:flutter_mobx/flutter_mobx.dart'; | |
import 'package:provider/provider.dart'; | |
typedef ConsumerObserverBuilder<T> = Widget Function(BuildContext context, T value); | |
class ConsumerObserver<T> extends StatelessWidget { | |
final ConsumerObserverBuilder<T> builder; | |
final Widget prebuiltChild; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Transient<T> { | |
T _value; | |
Transient(T value) { | |
this._value = value; | |
} | |
void use(Function(T value) block) { | |
assert(block != null); | |
if (_value != null) { |
OlderNewer