Showing posts with label Tutorial Android Studio. Show all posts
Showing posts with label Tutorial Android Studio. Show all posts

Tutorial menambahkan 3D models ke dalam aplikasi projek Flutter dengan vectary

Selamat malam semuanya....

Sesuai dengan judul artikel ini,kali ini saya akan bahas bagaimana menambahkan 3D model ke dalam aplikasi Project flutter dengan memanfaatkan fitur dari website vectary...

Untuk menggunakan fitur dari website vectary,hal pertama yang harus kita lakukan adalah mendaftar ke website tersebut atau bisa langsung dengan login menggunakan akun google kita...
Buka website vectary.com. Selanjutnya masuk dengan akun google.



Setelah berhasil login,kita akan di diperlihatkan halaman dashboard dari website vectary. Selanjutnya pilih new project -> Pilih Template yang ingin ditampilkan pada project aplikasi kita.



Setelah proses diatas selesai,selanjutnya kita kembali ke project flutter (disini saya menggunakan Android Studio). Untuk menampilkan template yang kita pilih dari website vectary ke dalam project flutter,disini kita harus menambahkan package webview_flutter.


Setelah package ditambahkan jangan lupa untuk klik pub get. Setelah proses diatas selesai selanjutnya buat file dart baru dengan nama vectary_screen.dart dan ikuti kode nya seperti dibawah.
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

class VectaryScreen extends StatefulWidget {
  const VectaryScreen({Key? key}) : super(key: key);

  @override
  State<VectaryScreen> createState() => _VectaryScreenState();
}

class _VectaryScreenState extends State<VectaryScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        title: const Text('Vectary'),
        elevation: 0,
        actions: const [
          Icon(Icons.shopping_cart),
          SizedBox(
            width: 20,
          ),
          Icon(Icons.share),
          SizedBox(
            width: 20,
          ),
        ],
      ),
      bottomNavigationBar: _buildBottomBarActions(),
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          const Expanded(
            child: WebView(
              initialUrl:
                  'https://app.vectary.com/p/4lepw7bb8QnDkTRO8uRiB7',
              javascriptMode: JavascriptMode.unrestricted,
            ),
          ),
          const SizedBox(
            height: 20,
          ),
          _buildProductTitle(),
        ],
      ),
    );
  }

  Widget _buildBottomBarActions() {
    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 16.0),
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          Row(
            children: [
              Expanded(
                  child: Container(
                height: 50,
                decoration: BoxDecoration(
                  border: Border.all(color: Colors.black),
                  borderRadius: BorderRadius.circular(4),
                ),
                child: const Center(
                  child: Text(
                    'Buy Now',
                    style: TextStyle(
                      color: Colors.black,
                      fontSize: 16,
                    ),
                  ),
                ),
              )),
              const SizedBox(
                width: 8,
              ),
              Expanded(
                child: Container(
                  height: 50,
                  width: 200,
                  decoration: BoxDecoration(
                    color: Colors.black,
                    border: Border.all(color: Colors.black),
                    borderRadius: BorderRadius.circular(4),
                  ),
                  child: const Center(
                    child: Text(
                      'Add to bag',
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 16,
                      ),
                    ),
                  ),
                ),
              )
            ],
          ),
          const SizedBox(
            height: 20,
          )
        ],
      ),
    );
  }

  Widget _buildProductTitle() {
    return Column(
      children: const [
        Text(
          'Sneaker',
          style: TextStyle(
            fontWeight: FontWeight.bold,
            fontSize: 20,
          ),
        ),
        SizedBox(
          height: 8,
        ),
        Text(
          'Sneaker X',
          style: TextStyle(
            fontSize: 16,
          ),
        ),
        SizedBox(
          height: 8,
        ),
      ],
    );
  }
}

Setelah itu ubah file main.dart seperti code dibawah
import 'package:flutter/material.dart';
import 'package:tutorials_vectary/vectary_screen.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Tutorial Vactary',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const VectaryScreen(),
    );
  }
}

Jika semua langkah sudah dilakukan,jalankan aplikasinya maka hasilnya seperti ini

Cara menampilkan Progress indicator dengan Image.Network() pada Flutter

Tutorial kali ini saya ingin membagikan cara menampilkan Progress Indicator dengan Image.Network() pada Flutter...

Code penggunaan Widget Image.Network() sebelum menggunakan progress ketika gambar di load dari internet serta hasilnya:

code image network

Agar ketika proses load gambar dari internet menampilkan progress dialog ubah code diatas menjadi seperti ini..

code setelah

Jika dijalankan maka akan Kelihatan perbedaan sebelum dan sesudah kita meletakkan progress dialog ketika load gambar dari internet...

Saya menyarankan jika ingin load gambar dari internet lebih baik menggunakan Plugin cached_network_image link plugin disini.

Menampilkan Tombol Flutter Hot Restart di Navigation Bar Toolbar pada Android Studio

    Default tampilan actions flutter pada bagian Navigation Bar Toolbar yang ada pada Android Studio tidak ada tombol Flutter Hot Restart namun berada pada bagian bawah di menu Debug seperti gambar dibawah. Dan setelah otak atik Android Studio, saya menemukan cara mengatasi masalah yang saya sebutkan diatas...


Adapun cara untuk Menampilkan Tombol Flutter Hot Restart di  Navigation Bar Toolbar...
Pertama pilih menu File lalu pilih Settings (atau menggunakan kombinasi tombol Ctrl+Alt+S) maka akan muncul halaman settings. Selanjutnya pada menu Appearance & Behavior pilih sub menu Menus and Toolbars lalu klik folder Run/Debug.


Selanjutnya klik simbol Plus/Tambah maka akan muncul popup lalu pilih Add Action

Maka akan muncul tampilan untuk menambahkan Actions baru, pada kolom search masukkan kata Flutter hot restart selanjutnya pilih action tersebut lalu klik OK. 

Jika berhasil menambahkan action tadi maka akan muncul daftar actions seperti gambar di bawah lalu klik OK

Jika semua langkah berhasil dilakukan maka tampilan Android Studio akan seperti gambar dibawah





Plugin agar tampilan Android Studio terlihat keren dan nyaman di pandang mata

    Android Studio adalah salah satu IDE (Integrated Development Environment) yang didesain khusus untuk pengembangan Android. Sebagai seorang Mobile Developer, Pemilihan Tema/tampilan Android Studio salah satu faktor yang bisa meningkatkan kinerja dan kecepatan  saat menulis code....

    Dari Pengalaman pribadi menggunakan android studio ada beberapa plugin yang cocok agar tampilan Android Studio terlihat lebih keren dan nyaman dipandang mata, plugin ini cocok untuk anda yang suka tampilan dark mode (mode gelap). Berikut daftar plugin yang wajib di pasang pada IDE Android Studio:


1. One dark Theme (tema untuk Android Studio)


2.Atom Material Icons (ikon untuk Android Studio)

    Adapun cara memasang Plugin pada Android Studio adalah dengan cara klik menu File->pilih Settings -> akan muncul window baru Selanjutnya pilih menu Plugins dan pada bagian marketplace ketik kan satu persatu plugin diatas lalu klik tombol install...setelah kedua plugin diatas di install, restart Android Studio dengan cara klik menu File ->  lalu pilih menu Invalidate Caches/Restart ->lalu pilih pilihan Just Restart tunggu beberapa  saat maka Android Studio akun terbuka lagi....

    Jika tema Android Studio tidak berubah menggunakan tema One Dark Theme maka kita harus ubah setelah tema Android Studio dengan cara klik File setelah itu pilih Settings lalu pilih menu Appearance & Behavior dan pilih sub menu Appearance ->pada bagian Theme pilih One Dark setelah itu pilih OK maka tema Android Studio akan berubah...






Membuat Bottom Navigation Bar dengan Flutter

Selamat siang teman teman hari ini saya akan membagikan tutorial cara membuat Bottom Navigation Bar dengan menggunakan Flutter....

Contoh Bottom Navigation Bar yang akan kita buat seperti gambar di bawah:


Pertama tama kita sediakan 2 file dart dengan nama:
  1. home.dart
  2. bottom_navigation.dart

Adapun code untuk File home.dart sebagai berikut:

import 'package:bottom_navigation_bar/bottom_navigation.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const BottomNavigation(title: 'Bottom Navigation Bar'),
    );
  }
}

Selanjutnya untuk file bottom_navigation.dart masukkan code dibawah:

import 'package:flutter/material.dart';

class BottomNavigation extends StatefulWidget {
  const BottomNavigation({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  State<BottomNavigation> createState() => _BottomNavigationState();
}

class _BottomNavigationState extends State<BottomNavigation> {
  int currentPage = 0;
  String text = "Home Page";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Text(text),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => setPage(4, "Add Items"),
        child: const Icon(
          Icons.add,
          color: Colors.white,
          size: 30,
        ),
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
      bottomNavigationBar: BottomAppBar(
        color: Colors.blue,
        shape: const CircularNotchedRectangle(),
        child: Container(
          padding: const EdgeInsets.symmetric(vertical: 5),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              IconButton(
                  onPressed: () => setPage(0, "Home Page"),
                  icon: Icon(
                    Icons.home,
                    color: currentPage == 0 ? Colors.white : Colors.grey,
                    size: 30,
                  )),
              IconButton(
                  onPressed: () => setPage(1, "Search Page"),
                  icon: Icon(
                    Icons.search,
                    color: currentPage == 1 ? Colors.white : Colors.grey,
                    size: 30,
                  )),
              const SizedBox(),
              IconButton(
                  onPressed: () => setPage(2, "Notifications Page"),
                  icon: Icon(
                    Icons.notifications,
                    color: currentPage == 2 ? Colors.white : Colors.grey,
                    size: 30,
                  )),
              IconButton(
                  onPressed: () => setPage(3, "History Page"),
                  icon: Icon(
                    Icons.history,
                    color: currentPage == 3 ? Colors.white : Colors.grey,
                    size: 30,
                  )),
            ],
          ),
        ),
      ),
    );
  }

  void setPage(int index, String text) {
    setState(() {
      currentPage = index;
      this.text = text;
    });
  }
}

Jika cara diatas sudah dilakukan maka selanjutnya jalankan aplikasi, jika tampilan aplikasi sama dengan contoh diatas....SELAMAT anda sudah bisa membuat Bottom Navigation Bar dengan Flutter

Untuk lebih jelasnya silahkan lihat tutorial nya di video berikut
Link Youtube


Cara Mengatasi "/dev/kvm device: permission denied" pada Linux ubuntu (Android Studio)

Sering kali ketika ingin membuka Emulator di Android Studio pada ubuntu akan ada pesan dialog "/dev/kvm device: permission denied" sehingga emulator yang ingin di jalankan tidak bisa terbuka, Maksud dari pesan yang ditampilkan ini adalah user yang kita pakai tidak memiliki akses ke /dev/kvm yang diperlukan oleh emulator. Bagaimana menyelesaikannya?




Adapun Tips cara mengatasi masalah diatas adalah:
1. Buka terminal pada OS linux dengan cara menekan kombinasi tombol CTRL+ALT+T



2.Selanjutnya ketikkan perintah sudo chmod 777 -R /dev/kvm lalu tekan enter




Itulah cara menyelesaikan masalah /dev/kvm device: permission denied semoga berhasil






membuat backdrop layout menggunakan android studio (material Design)

KetikanMD kembali lagi dengan tutorial membuat  backdrop layout pada android studio.....seperti judulnya kali ini kita akan mencoba untuk mengimplementasikan material design android yaitu Backdrop Layout....backDrop layout terdiri dari dua permukaan yaitu lapisan belakang dan lapisan depan. Lapisan belakang menampilkan tindakan dan konteks, dan lapisan depan mengontrol dan menginformasikan konten.untuk lebih jelas nya bisa baca artikel di link berikut https://material.io/components/backdrop/

ok tidak perlu lama.....pertama tama buatlah project baru dan disini kita asumsikan teman teman sudah bisa membuat project baru di Android Studio...kalau belum bisa,silahkan cari tutorialnya di google hehe

contoh tampilan yang akan kita buat seperti ini:

pertama kita akan masukkan kebutuhan icon untuk menu item dengan cara klik kanan pada drawable lalu pilih New->Vektor Asset dan pilih icon sesuai keinginan...disini kita membutuhkan dua asset,masing masing diberi nama ic_close dan ic_pilih.

seperti kita ketahui backDrop Layout terdiri dari 2 lapisan yaitu lapisan depan dan belakang,maka dari itu kita akan buat 2 layout untuk lapisan depan dan belakang,dengan cara klik kanan pada folder layout lalu pilih New->Layout resource file,untuk layout pertama kita kasih nama back_layout.xml dan untuk layout kedua kasih nama front_layout.xml.

adapun isi layout back_layout.xml seperti code dibawah
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary">

        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingHorizontal="20dp"
            android:paddingVertical="10dp">
            <RadioButton
                android:id="@+id/rb_ya"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:buttonTint="@android:color/white"
                android:textColor="@android:color/white"
                android:text="YA" />
            <RadioButton
                android:id="@+id/rb_tidak"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:buttonTint="@android:color/white"
                android:textColor="@android:color/white"
                android:text="TIDAK"/>
        </RadioGroup>

</LinearLayout>


agar front_layout.xml memiliki corner radius pada sudut kiri dan kanan atas kita buat backgroundnya dengan cara kilik kanan pada drawable lalu pilih New->Drawble resource file dan berikan nama layout_bg.xml dan masukkan kode dibawah ini  kedalam file drawalbe yang kita buat tadi.
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF" />
    <corners
        android:topLeftRadius="35dp"
        android:topRightRadius="35dp" />
</shape>


adapun isi layout front_layout.xml seperti code dibawah
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/front_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/layout_bg">

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ketikan MD"
        android:textColor="@android:color/black"
        android:textSize="24dp"
        android:layout_centerInParent="true"/>

</RelativeLayout>


untuk code layout activity_main.xml seperti dibawah
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/colorPrimary"
    tools:context=".MainActivity">

   <androidx.appcompat.widget.Toolbar
       android:id="@+id/toolbar"
       android:layout_width="match_parent"
       android:layout_height="?attr/actionBarSize"
       android:background="@color/colorPrimary"
       android:fitsSystemWindows="false"
       android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
       app:contentInsetStartWithNavigation="0dp"
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

      <RelativeLayout
          android:layout_width="match_parent"
          android:layout_height="match_parent">
          <include layout="@layout/back_layout"/>
          <include layout="@layout/front_layout"/>
      </RelativeLayout>

</LinearLayout>


Selanjutnya buat menu item didalam Directory menu (jika directory menu belum ada pada directory res, silahakan buat directory nya dengan cara klik kanan pada directory res lalu pilih  new-> Directory lalu masukkan nama direktorinya) klik kanan directory menu lalu pilih  new->Menu resource file dan berikan nama menu_item.xml. Masukkan kode dibawah kedalam menu_item.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">

    <item
        android:id="@+id/action_pilih"
        android:orderInCategory="300"
        android:title="Pilih"
        android:icon="@drawable/ic_pilih"
        app:showAsAction="ifRoom"/>

</menu>

lanjut ke file java MainActivity.java masukkan kode dibawah
package com.ketikanmd.backdrop;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;

import android.animation.ValueAnimator;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {


    private Toolbar toolbar;
    private RelativeLayout frontLayout;
    private LinearLayout backLayout;
    private TextView textView;
    private RadioButton rbYa,rbTidak;
    private RelativeLayout.LayoutParams lp;
    MenuItem itemCheck;
    boolean showBackLayout = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar=findViewById(R.id.toolbar);
        frontLayout = findViewById(R.id.front_layout);
        backLayout = findViewById(R.id.back_layout);
        textView = findViewById(R.id.text);
        rbYa = findViewById(R.id.rb_ya);
        rbTidak = findViewById(R.id.rb_tidak);
        setSupportActionBar(toolbar);
        initListener();


    }

    private void initListener(){
        rbYa.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textView.setText("Anda pilih ya");
            }
        });

        rbTidak.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textView.setText("Anda pilih tidak");
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_item, menu);
        itemCheck=menu.findItem(R.id.action_pilih);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.action_pilih) {
           dropLayout();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private void dropLayout() {
        showBackLayout = !showBackLayout;
        itemCheck.setIcon(ContextCompat.getDrawable(MainActivity.this, showBackLayout ? R.drawable.ic_close : R.drawable.ic_pilih));
         lp = (RelativeLayout.LayoutParams) frontLayout.getLayoutParams();
        if (showBackLayout) {
            ValueAnimator varl =ValueAnimator.ofInt(backLayout.getHeight());
            varl.setDuration(100);
            varl.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    lp.setMargins(0, (Integer) animation.getAnimatedValue(), 0, 0);
                    frontLayout.setLayoutParams(lp);
                }
            });
            varl.start();
        }else {
            lp.setMargins(0, 0, 0, 0);
            frontLayout.setLayoutParams(lp);
            TranslateAnimation anim = new TranslateAnimation(0, 0, backLayout.getHeight(), 0);
            anim.setStartOffset(0);
            anim.setDuration(200);
            frontLayout.startAnimation(anim);
        }
    }
}

terakhir masuk ke directory values->styles.xml dan pastikan codenya seperti dibawah:
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>


jika semua langkah sudah diikuti,jalankan aplikasi dan lihat hasilnya........
untuk demonya silahkan klik disini 

untuk lebih lajut silahkan ambil source code nya di github klik disini

Sekian tutorial cara membuat backDrop layout pada android studio,cukup mudah kan teman teman......silahkan dikembangkan sesuai kebutuhan










Tutorial membuat Sliding Navigation Menu Android Studio

Pada artikel kali ini ketikanMD akan memberikan tutorial bagaimana membuat Sliding Navigation Menu pada Android Studio.Dimana Sliding Navigation ini sebagai pengganti dari menu Navigation Drawer pada Android.Berhubung tutorial ini sangat panjang maka ketikanMD membuatkan tutorial dalam bentuk video yang akan akan diunggah ke channel youtube ketikanMD sendiri dan jangan lupa untuk subscribe ya......

Adapun di Artikel kali ini ketikanMD hanya akan menampilkan screen shoot hasil akhir dari tutorial yang telah diunggah ke youtube...Kalian bisa melihat tutorialnya dengan mengklik link dibawah untuk mengikuti tutorialnya .....


Untuk mengikuti tutorial di youtube silahkan klik tombol dibawah

File yang dibutuhkan untuk mengikuti tutorial di youtube silahkan klik tombol dibawah  
download[4]