Skip to content

Instantly share code, notes, and snippets.

View CostaFot's full-sized avatar
🍦

Costa Fotiadis CostaFot

🍦
View GitHub Profile
@Composable
fun FirstScreen(
navigate: () -> Unit,
firstContainer: FirstContainer = rememberFirstContainer(),
firstViewModel: FirstViewModel = viewModel(factory = firstContainer.viewModelFactory)
) { // content here.. }
@Composable
fun rememberFirstContainer(): FirstContainer {
return remember {
@Composable
fun FirstScreen(
navigate: () -> Unit,
firstContainer: FirstContainer = FirstContainer().also {
DaggerFirstComponent.builder().build().inject(it)
},
firstViewModel: FirstViewModel = viewModel(factory = firstContainer.viewModelFactory)
) { }
@Component(
modules = [FirstModule::class, VmModule::class] // dagger modules here if needed
)
interface FirstComponent {
fun inject(firstContainer: FirstContainer) // inject the container instead of the activity/fragment
@Component.Builder
interface Builder {
fun build(): FirstComponent
@Stable
class FirstContainer {
@Inject lateinit var firstScreenTracker: FirstScreenTracker
@Inject lateinit var viewModelFactory: ViewModelFactory
}
class MainActivity : AppCompatActivity() {
@Inject lateinit var firstScreenTracker: FirstScreenTracker
@Inject lateinit var viewModelFactory: ViewModelFactory
override fun onCreate(savedInstanceState: Bundle?) {
DaggerFirstComponent.builder().build().inject(this) // build dagger component and inject
super.onCreate(savedInstanceState)
setContent {
@Composable
fun FirstScreen(
navigate: () -> Unit,
firstScreenTracker: FirstScreenTracker,
viewModelFactory: ViewModelFactory,
firstViewModel: FirstViewModel = viewModel(factory = viewModelFactory)
) {
// content...
}
@Composable
fun FirstScreen(
navigate: () -> Unit,
firstContainer: FirstContainer = rememberFirstContainer(),
firstViewModel: FirstViewModel = viewModel(factory = firstContainer.viewModelFactory)
) {
// content...
}
@Composable
private fun MainContent(
changeSystemBarStyle: (SystemBarStyle) -> Unit
) {
Scaffold(
modifier = Modifier.fillMaxSize(),
containerColor = Color.Black
) { paddingValues ->
LaunchedEffect(Unit) {
@Composable
fun BoxWithConstraintsScope.draggableBox() {
Box(
modifier = Modifier
.fillMaxWidth()
.height(boxHeight)
.background(Color.White)
.align(Alignment.BottomCenter)
.pointerInput(Unit) {
detectVerticalDragGestures { change, dragAmount ->
@Composable
fun MainContent() {
Scaffold { paddingValues ->
// ....
val layoutDirection = LocalLayoutDirection.current
Box(
modifier = Modifier
.fillMaxSize()
.padding(
start = paddingValues.calculateStartPadding(layoutDirection),