Skip to content

Instantly share code, notes, and snippets.

View nhancv's full-sized avatar
🏠
Working from home

Nhan Cao nhancv

🏠
Working from home
View GitHub Profile
@nhancv
nhancv / w_shake_anim.dart
Created April 14, 2021 10:56
Flutter simple shake animation
import 'package:flutter/material.dart';
class WShakeAnim extends StatelessWidget {
const WShakeAnim({
Key key,
this.child,
this.offset = 100,
this.duration = const Duration(seconds: 1),
}) : super(key: key);
@nhancv
nhancv / backend_pm2
Last active October 30, 2021 12:21
Nginx config sample
server {
listen 80;
listen [::]:80;
server_name api.nhancv.com;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:3000;
@nhancv
nhancv / mongodb_upgrade.md
Created April 7, 2021 04:16
Upgrade mongodb from 3.6.3 to 4.4.4

Upgrade mongodb from 3.6.3 to 4.4.4

STOP APPLICATION

BACKUP DATABASE

mongodump --username DB_USERNAME --password DB_PASSWORD --db DB_NAME --out /var/backups/mongobackups/`date +"%m-%d-%y"`

UNINSTALL OLD DATABASE

@nhancv
nhancv / w_picker_date.dart
Last active April 14, 2021 10:54
Flutter picker widget
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:nft/services/safety/base_stateful.dart';
import 'package:nft/utils/app_extension.dart';
import 'package:nft/utils/app_style.dart';
import 'package:nft/widgets/w_bottom_action_sheet.dart';
import 'package:nft/widgets/w_button_inkwell.dart';
import 'package:nft/widgets/w_divider_line.dart';
@nhancv
nhancv / w_time_picker.dart
Created March 5, 2021 09:06
Flutter time picker
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:nft/services/safety/base_stateful.dart';
import 'package:nft/utils/app_extension.dart';
import 'package:nft/utils/app_style.dart';
import 'package:nft/widgets/w_bottom_action_sheet.dart';
import 'package:nft/widgets/w_button_inkwell.dart';
import 'package:nft/widgets/w_divider_line.dart';
@nhancv
nhancv / w_keyboard_detector.dart
Created March 5, 2021 05:44
Flutter keyboard detector
import 'package:flutter/material.dart';
import 'package:nft/utils/app_route.dart';
// // AppRoute from nft template
// WKeyboardDetector(
// onState: (bool isOpen, double keyboardHeight) {
// print('isOpen: $isOpen');
// },
// ),
class WKeyboardDetector extends StatefulWidget {
@nhancv
nhancv / w_marquee.md
Created March 4, 2021 16:11
Flutter marquee long text

w_marquee.dart

import 'package:flutter/material.dart';

class WMarquee extends StatefulWidget {
  const WMarquee({
    @required this.child,
    this.padding,
    this.scrollDirection = Axis.horizontal,
    this.animationDuration = const Duration(milliseconds: 5000),
@nhancv
nhancv / 0_observable.dart
Last active April 14, 2021 10:55
Flutter observer pattern. Ex: global timer
class Subject<T> {
List<Observer<T>> observers = <Observer<T>>[];
T _state;
T get state => _state;
set state(T value) {
_state = value;
notifyAllObservers();
}
@nhancv
nhancv / _z_android_setup.md
Last active July 3, 2022 11:05
Flutter stream hls m3u8

build.gradle

    aaptOptions {
        noCompress '.flv', '.mp4'
    }

    signingConfigs {}
@nhancv
nhancv / painter.dart
Last active December 29, 2023 14:29
Flutter custom painter: rounded rect and arrow
class _MenuBoxBackground extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
final Paint paint = Paint()
..color = Colors.white
..strokeWidth = 1.W
..style = PaintingStyle.fill;
final double triangleH = 10.H;
final double triangleW = 25.0.W;
final double width = size.width;