Skip to content

Instantly share code, notes, and snippets.

@rubywai
rubywai / grid_compose.kt
Created January 24, 2026 17:35
@12 grid layout in compose
package com.rubylearner.composeapp
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
@rubywai
rubywai / @11 composable list part 2 (sticky header and scroll controller)
Created January 21, 2026 21:03
@11 composable list part 2 (sticky header and scroll controller)
package com.rubylearner.composeapp
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.animation.core.Spring
import androidx.compose.animation.core.spring
import androidx.compose.animation.core.tween
import androidx.compose.foundation.background
@rubywai
rubywai / @10 list part 1
Created January 18, 2026 17:36
@10 list (lazy row & lazy column)
package com.rubylearner.composeapp
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.animation.core.Spring
import androidx.compose.animation.core.spring
import androidx.compose.animation.core.tween
import androidx.compose.foundation.background
@rubywai
rubywai / @9material_buttons_in_compose
Created December 14, 2025 12:28
Understanding Material Buttons in compose
package com.rubylearner.mycomposeapp
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background
@rubywai
rubywai / newsfeed.kt
Created December 4, 2025 16:33
News feed ui compose
package com.rubylearner.mycomposelesson
import android.os.Bundle
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
package com.rubylearner.mycomposelesson
import android.os.Bundle
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.background
import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.Arrangement
@rubywai
rubywai / scaffold_composable.kt
Last active December 1, 2025 12:22
@6 Scaffold Composable
package com.rubylearner.mycomposelesson
import android.os.Bundle
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
@rubywai
rubywai / website.js
Last active October 18, 2025 11:06
flutter_web_server_with_nodejs
const express = require("express");
const path = require("path");
const app = express();
const port = process.env.PORT || 3000;
const buildPath = path.join(__dirname, "web");
// Serve static files first
app.use(express.static(buildPath));
class PdfViewer extends ConsumerStatefulWidget {
const PdfViewer({
super.key,
this.filePath,
this.fileUrl,
});
final String? filePath;
final String? fileUrl;
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(