View Logger.kt
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) |
View UserViewModel.kt
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) |
View BindableProperty.kt
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 { |
View ViewModelFactory.kt
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. |
View MyViewModel.kt
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 | |
} |
View DataBindingTrackingExample.kt
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) } |
View counter_store.dart
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; |
View consumer_observer.dart
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; |
View transient.dart
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) { |
View google_sign_in.dart
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
Future<FirebaseUser> login() async { | |
final googleUser = await _googleSignIn.signIn(); | |
final googleAuth = await googleUser.authentication; | |
final authCredential = GoogleAuthProvider.getCredential( | |
idToken: googleAuth.idToken, | |
accessToken: googleAuth.accessToken | |
); | |
return await _firebaseAuth.signInWithCredential(authCredential); | |
} |
OlderNewer