5. Apa perbedaan Statelesswidget dan StatefulWidget ? Dan berikan contoh kasus penggunaannya!
6. Sebutkan dan jelaskan 5 widget flutter yang Anda ketahui!
7. Anda diberikan tiga endpoint:
https://usu.ac.id/getmhs/[nim] untuk mendapatkan data mahasiswa,
https://usu.ac.id/getbiomhs/[nim] untuk mendapatkan biodata mahasiswa, dan
https://usu.ac.id/krs/[krs_id] untuk mendapatkan ID mata kuliah yang diambil mahasiswa. Krs_id
didapatkan dari endpoint mahasiswa
Buatlah fungsi menggunakan bahasa pemrograman dart / framework flutter untuk mendapatkan
ketiga data tersebut dengan memanfaatkan asyncronous programming di dart sehingga waktu yang
dibutuhkan untuk mendapatkan data lebih efektif. (tidak perlu sampai menampilkan UI/membubat
widget, parameter nim menggunakan nim Anda).
1.
c.
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDM
ExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
},
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
}
3. - Mudah dikelola sebab SQLite merupakan file tunggal dan tidak
menggunakan konfigurasi yang banyak
- Sangat Stabil dengan software engineer yang handal, banyak
fitur yang telah ditambahkan.
- SQLite sangat cepat jika berjalan pada lingkup yang sama
sehingga tidak ada sumber daya tambahan seperti jaringan ketika
menjalankan query maupun mengambil data.
4. MainActivity.java
8. package com.example.belajarnotification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.TaskStackBuilder;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
Button btnTrigger;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnTrigger = findViewById(R.id.btn_trigger);
creatNotificationChannel();
handleOnClickButton();
}
void handleOnClickButton() {
btnTrigger.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
triggerNotification();
}
});
}
void creatNotificationChannel(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
CharSequence channelName
=getString(R.string.channelTestName);
String channelDescription
=getString(R.string.channelTestDesc);
String channelid =getString(R.string.channelTestId);
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationManager notificationManager =
getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(notificationChannel);
}
}
void triggerNotification() {
Intent intent = new Intent(this,
DetailDetailActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK);
// PendingIntent pendingIntent =
PendingIntent.getActivity(this,0, intent,0);
TaskStackBuilder stackBuilder =
TaskStackBuilder.create(this);
stackBuilder.addNextIntentWithParentStack(intent);
PendingIntent pendingIntent =
stackBuilder.getPendingIntent(0, FLAG_UPDATE_CURRENT);
Intent actionIntent = new Intent(this,
NotificationBroadcastReceiver.class);
actionIntent.putExtra("msg","Broadcastreceiver berhasil
dijalankan");
actionIntent.setAction("ACTION_TEST_NOTIFICATION");
PendingIntent actionPendingIntent =
PendingIntent.getBroadcast(this,0, actionIntent,0);
NotificationManagerCompat notificationManagerCompat =
NotificationManagerCompat.from(this);
notificationManagerCompat.notify(getResources().getInteger(R.integer
.notificationTestid), builder.build());
}
}
NotificationBroadcastReceiver.java
package com.example.belajarnotification;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
@Override
public void onReceive(Context context, Intent intent) {
String massage = intent.getStringExtra("msg");
Log.d(TAG, massage);
}
}
5. Stateless Widget : Widget yang tidak dapat dirubah bersifat
immutable atau tidak akan pernah berubah contoh kasus
penggunaannya saat membuat suatu komponen yang sederhana
dan bersifat statis. Sedangkan Stateful Widget : Widget yang
dapat berubah atau mutable contoh kasus penggunaannya saat
membuat suatu komponen yang sederhana dan bersifat statis.
6. Widget flutter
- Text : Dapat membuat text Panjang atau 1 baris tergantung
constrain layout, kemudian dapat memanipulasi jenis font,
ukuran, warna, jenis font dan lainnya.
- TextSpan : Rentang teks yang tidak dapat diubah, memiliki style
property untuk memberi style pada teks dan memiliki children
property untuk menambahkan lebih banyak teks ke widget serta
memberi style pada widget.
- RichText : digunakan untuk menampilkan teks yang
menggunakan berbagai style yang berbeda.
- Padding : untuk membuat ataupun memposisikan widget child
yang dimiliki dengan memberikan jarak.
- Container : hanya dapat memiliki satu buah child widget saja
namun, dapat menempatkan row, column, text ataupun container
lainnya.
- Row : Widget yang digunakan dalam menempatkan widget-
widget lain secara horizontal.
- Column : Widget yang digunakan dalam menempatkan widget-
widget lain secara vertikal.
- Flexible : Widget yang digunakan membuat tampilan dengan
ukuran dalam perbandingan tertentu, sehingga mudah diatur
serta bersifat fleksibel.
- Expanded : Widget memperluas child dari Row, Column atau
flex sehingga mengisi ruang yang tersedia pada sumbu utama.
- Scaffold : Widget yang utama dalam membangun halaman pada
flutter yang memiliki beberapa parameter seperti; appBar untuk
membuat AppBar, body untuk bagian tubuhnya atau isinya ,
menambahkan floating action bar, maupun mengganti warna
pada background body.
- TextField : untuk memasukkan suatu text yang biasanya terdapat
pada login terdapat input username ataupun password.
- Elevated Button : memberikan dimensi yang menunjukan suatu
aksi pada saat tombol ditekan
- TextButton : Text yang terdapat pada tombol yang biasanya
sebagai penjelasan fungsi daripada tombol tersebut.
- ListView : Widget list yang disusun secara bergulir dan dapat di
scroll.
- GesturDetector : Widget yang dapat mendeteksi Gerakan,
misalnya saat adanya aksi double tap.
- IconButton : Icon yang terdapat pada tombol sebagai penjelas
fungsi tombol dalam bentuk icon.
- AssetsImages : Mengambil gambar dari AssetBundle, setelah
menentukan gambar yang tepat untuk digunakan berdasarkan
konteks.
- NetworkImage : Mengambil URL yang diberikan dari jaringan,
dan mengaitkannya dengan skala yang telah diberikan.
7.
import 'dart:io';
main() {
stdout.write("Nama : , Nim: ");
var nama = stdin.readLineSync();
print("Hello $nama!");
}