Skip to content

Instantly share code, notes, and snippets.

View mrhungnq95's full-sized avatar
🎯
Focusing

Hung Nguyen mrhungnq95

🎯
Focusing
  • Hanoi, Vietnam
View GitHub Profile
@mrhungnq95
mrhungnq95 / main.dart
Created September 13, 2025 14:12 — forked from MattiaPispisa/main.dart
go_router observer
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
/// A mixin that allows a widget to be aware of the current route.
///
/// ```dart
/// class MyWidget extends StatefulWidget {
/// const MyWidget({super.key});
/// @override
/// State<MyWidget> createState() => _MyWidgetState();
@mrhungnq95
mrhungnq95 / app-build.gradle
Created September 13, 2025 04:32 — forked from JEuler/app-build.gradle
Flutter Android 16KB Setup Gist
// app/build.gradle
plugins {
id 'com.android.application'
// Use modern Kotlin Android plugin ID aligned with settings.gradle
id 'org.jetbrains.kotlin.android'
id 'dev.flutter.flutter-gradle-plugin'
}
...
ADB = YOUR_ADB_PATH
PACKAGE_NAME = YOUR_PACKAGE_NAME
MAIN_ACTIVITY = .entry.MainActivity
clean:
./gradlew clean
build:
./gradlew build
@mrhungnq95
mrhungnq95 / SegmentedProgress.kt
Created February 1, 2025 14:57 — forked from ardakazanci/SegmentedProgress.kt
Segmented Progress with Jetpack Compose
@Composable
fun SegmentedArcProgressIndicator(
progress: Float,
strokeWidth: Float = 48f,
maxAngle: Float = 160f,
gapAngle: Float = 15f,
backgroundColor: Color = Color(0xffCBE0E8),
progressColor: Brush = Brush.linearGradient(listOf(Color(0xff83B2D1), Color(0xff106AA7)))
) {
val animatedProgress by animateFloatAsState(
@mrhungnq95
mrhungnq95 / gist:62bea00ce23e6750ec46b159ec0a9322
Created May 13, 2024 07:14 — forked from AlShevelev/gist:ea43096e8f66b0ec45a0ec0dd1e8cacc
ViewPager2 extension for reducing drag sensitivity
/**
* Reduces drag sensitivity of [ViewPager2] widget
*/
fun ViewPager2.reduceDragSensitivity() {
val recyclerViewField = ViewPager2::class.java.getDeclaredField("mRecyclerView")
recyclerViewField.isAccessible = true
val recyclerView = recyclerViewField.get(this) as RecyclerView
val touchSlopField = RecyclerView::class.java.getDeclaredField("mTouchSlop")
touchSlopField.isAccessible = true
<style name="TopSheet_DialogAnimation">
  <item name="android:windowEnterAnimation">@anim/slide_out_from_top</item>
  <item name="android:windowExitAnimation">@anim/slide_back_to_top</item>
</style>

slide_out_from_top

@mrhungnq95
mrhungnq95 / RSAEncryptionHelper.kt
Created October 2, 2023 11:13 — forked from mertceyhan/RSAEncryptionHelper.kt
This class helps to you for in RSA encryption and decryption operation in Kotlin.
import android.util.Base64
import java.security.KeyFactory
import java.security.PrivateKey
import java.security.PublicKey
import java.security.spec.PKCS8EncodedKeySpec
import java.security.spec.X509EncodedKeySpec
import javax.crypto.Cipher
/**
*
@mrhungnq95
mrhungnq95 / aes-cbc-padding.kts
Created September 25, 2023 08:15 — forked from flymrc/aes-cbc-padding.kts
Kotlin AES Encryption and Decryption
// ref: https://www.baeldung.com/java-aes-encryption-decryption
import java.util.*
import javax.crypto.Cipher
import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec
fun decrypt(algorithm: String, cipherText: String, key: SecretKeySpec, iv: IvParameterSpec): String {
val cipher = Cipher.getInstance(algorithm)
package productmeister.com.productmeister.view;
import android.annotation.TargetApi;
import android.os.Build;
import android.support.design.widget.AppBarLayout;
import android.support.v4.view.ViewCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
@mrhungnq95
mrhungnq95 / FileUtils
Created December 12, 2022 07:54 — forked from walkingError/FileUtils
Get a file from Uri.
package com.jitosoft.imageloadapp.util;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;