Skip to content

Instantly share code, notes, and snippets.

@febritecno
Last active January 18, 2022 12:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save febritecno/e78dd84657cc2c4945482dc44e12cfb0 to your computer and use it in GitHub Desktop.
Save febritecno/e78dd84657cc2c4945482dc44e12cfb0 to your computer and use it in GitHub Desktop.
GETX FLUTTER
// gitlab variable -> $TOKEN_V2_JSON
image: mahdigharooni/flutter:latest #It is my flutter docker image, ok
stages:
- deploy
flutter_deploy:
stage: deploy
before_script:
- flutter channel stable
- flutter upgrade
- flutter pub get
- flutter clean
script:
- flutter build apk
- curl -L "https://github.com/prasmussen/gdrive/releases/download/2.1.1/gdrive_2.1.1_linux_386.tar.gz" -o gdrive.tar.gz
- tar zxvf gdrive.tar.gz
- chmod +x gdrive
- mv gdrive /usr/local/bin/gdrive
- mkdir -p ~/.gdrive && echo $TOKEN_V2_JSON > ~/.gdrive/token_v2.json
- gdrive update $OBJECT_ID build/app/outputs/flutter-apk/app-release.apk
artifacts:
paths:
- build/app/outputs/flutter-apk/app-release.apk
only:
refs:
- main
image: mahdigharooni/flutter:latest #It is my flutter docker image, ok
stages:
- deploy
flutter_deploy:
stage: deploy
before_script:
- flutter channel stable
- flutter upgrade
- flutter pub get
- flutter clean
script:
- flutter build apk
artifacts:
paths:
- build/app/outputs/flutter-apk/app-release.apk
only:
refs:
- master

AGAR LOCALHOST BACKEND TERDETEKSI DI EMULATOR ANDROID STUDIO

akses listen port localhost backend ke IP

http://10.0.2.2:[port]

---- RESPON DIO tidak harus dimasukan ke model

-> kalau post tidak pakai model

-> kalau get pakai class model ambil yang diperluhkan saja

--> buat class model agar data collection bisa mutable atau mudah di manipulasi. contoh .addAll .clear .map .assignAll dll. kalau json biasa atau list/map biasa sulit buat manipulasi. masukan data ke model yang dibutuhkan saja

flexible -> single [child]

wrap -> multi [children]

expanded -> agar keyboard tidak tertabrak

stack -> layer z-index

*** Catatan Tentang Routing

// INGAT kalau off itu melupakan cache, state, dll kalau kembali ke layar itu

get.toNamed -> ingat keduanya (page)

get.offNamed -> lupakan keduanya (page) get.offAllNamed -> lupakan semua dan ingat (page)

get.offAndNamed-> lupakan sebelum dan ingat (page)

get.back -> untuk close dialog atau untuk back page

cara load controller atau state dari controller lain (get.find) 
  
/// manual load controller
Get.find<NAMA_CONTROLLER>(); 
final reloadData = Get.find(); 
// contoh memanggil method
reloadData.onInit(); 
reloadData.isLoading(true); 
Get.toNamed(Routes.VESSEL);
  • kita bisa load multi repository dalam satu controller tinggal daftarkan di binding
  • untuk menghemat file. bisa gunakan 1 file untuk beberapa screen jika overkill codingan dikit tiap file

// untuk delay 3 detik Timer(Duration(seconds: 3), () { print("Yeah, this line is printed after 3 second"); }); Future.delayed(Duration(seconds: 10), () { AuthPrefs.resetToken(); Get.offAllNamed(Routes.LOGIN); });

// repeatedly/ looping tiap 5 detik : Timer.periodic(Duration(seconds: 5), (timer) { print(DateTime.now()); });

STYLE

[!] harus memberi batas tinggi / lebar agar halaman bisa di scroll dalam container (alternative bisa pakai sizedbox)

[!] agar tampilan rapi kotak untuk builder bisa memakai GridView (syarat-> harus wrapper container dan atur tinggi) seperti pakai Listview juga butuh. (untuk scroll tanpa builder bisa pakai SingleChildScrollView)

--- RENDER LOOP

list.generate() -> bisa generate list atau array dengan contains String (List)

list.map((property) {}) -> bisa generate widget children dan binding tiap property pada widget (List)

-- DIO

catch http error -> on DioError catch(e){}

di repo bisa ambil return dari dio lalu proses di controller (Future) atau proses masukan map ke class model (Future<List>)

res.data, res.statusCode, dll

PENTING-NYA UNIT TESTING

  • code lebih solid, maksudnya kode nya lebih padat dan pasti jika pernah work. meminimalkan dan mengamankan dari case kesenggol orang lain
  • cepet ditrace jika ada error terjadi. cepet diperbaiki.
  • cepet tahu letak errornya
  • lebih terrawat dan terukur

** PENTING ** KALEM KALEM KALEM SENYUM KALEM SENYUM

kalem dalam mengerjakan semua masalah yang ada

controller tidak bisa dipakai kalau belum di register cara register dg git put/lazyput. bisa taruh perpage atau ditaruh di initial service (global) /// manual load controller (syarat harus di terdaftar dulu controllernya) /// cara check Get.isRegistered( // final reloadData = Get.find(); // reloadData.onInit(); // reloadData.isLoading(true); // Get.toNamed(Routes.VESSEL);

// cara check jika belum terdaftar dia didaftarkan dulu // TestCartController? cartController; // // if(condition){ // cartController = Get.isRegistered() // ? Get.find() // : Get.put(TestCartController()); // // }

//// regist global binding (taruh di getx services) // void main() async { // //WidgetsFlutterBinding.ensureInitialized(); // uncomment if needed for resource initialization // GlobalBindings().dependencies(); // runApp(MyApp()); // }

CARA BUILD IPA IOS

  1. open folder ios in xcode
  2. login apple developer & edit in xcode
  3. flutter build ipa
  4. show contains xarchive and copy plist (rename app.plist)
  5. xcodebuild -exportArchive -exportOptionsPlist app.plist -archivePath Runner.xcarchive -exportPath app.ipa
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment