Advertisement
  1. Code
  2. Mobile Development
  3. Corona

Cara Membuat Aplikasi To-Do List Dengan Polymer dan Cordova

Scroll to top
Read Time: 12 min

() translation by (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Pengenalan

Kembali di masa awal Android, ketika kerangka kerja antarmuka pengguna yang baik tidak ada dan sebagian besar perangkat Android kurang bertenaga, menciptakan aplikasi hibrid — aplikasi yang dikembangkan menggunakan teknologi web, seperti HTML5, CSS, dan JavaScript — adalah ide yang sangat buruk.

Dibandingkan dengan aplikasi asli, mereka terlihat sangat berbeda dan berkinerja buruk Namun, hari-hari itu sudah lama berlalu. Saat ini, sebagian besar perangkat seluler dapat menjalankan aplikasi hibrida dengan mudah dan ada banyak kerangka kerja yang memungkinkan Anda secara sempurna menjiplak tampilan dan nuansa asli Android. Oleh karena itu, jika Anda menghadapi tenggat waktu singkat atau Anda bekerja dengan anggaran kecil, menggunakan cara hybrid bukan ide yang buruk lagi.

Dalam tutorial ini, saya akan menunjukkan Anda bagaimana untuk menciptakan hibrida sederhana, sebuah to-do list app untuk Android. Antarmuka aplikasi akan sesuai dengan spesifikasi bahan desain Google, tampilan dan nuansa asli Android Lollipop dan Marshmallow. Untuk mencapai hal ini, kita akan menggunakan Polymer, Polymer paper elements, dan Apache Cordova.

Prasyarat

Mengikutinya, Anda akan perlu:

  • Versi terbaru dari Android SDK
  • Versi terbaru dari Node.js
  • perangka tAndroid atau emulator yang menjalankan Android 5.0 atau lebih tinggi
  • pemahaman dasar tentang HTML5, CSS, dan JavaScript

Jika Anda baru mengenal Cordova, maka luangkan waktu sejenak untuk membaca pengantar ini oleh Wernher-Bel Ancheta. Pengenalan ini akan membantu Anda untuk mempercepat.

1. Mengapa Menggunakan Polimer?

Polimer adalah kerangka kerja yang memungkinkan Anda membuat komponen web khusus dengan cepat, elemen Polimer. Dengan menggunakan elemen Polymer, Anda dapat menjadikan aplikasi web Anda lebih modular dan kode Anda lebih dapat digunakan kembali. Setelah dibuat, elemen dapat digunakan seperti tag HTML lain dalam halaman HTML. Misalnya, jika Anda membuat elemen khusus yang disebut my-elemen, Anda dapat menggunakannya di laman HTML apa pun menggunakan kode berikut:

1
<my-element></my-element>

Terlebih lagi, dengan menggunakan kerangka polimer, Anda dapat memanfaatkan fitur data-binding untuk membuat kode JavaScript Anda lebih sederhana dan tidak rawan kesalahan.

2. Apa Itu Polymer Paper Elements?

Paper elements adalah elemen Polimer yang dibuat dengan mengikuti pedoman material desain. Mereka dapat digunakan sebagai alternatif untuk elemen HTML biasa. Misalnya, jika Anda ingin menambahkan tombol material desain ke halaman Anda, Anda dapat menggunakan elemen paper-button. Kode untuk melakukannya terlihat seperti ini:

1
<paper-button> Click Me! </paper-button>

Demikian pula, jika Anda ingin menambahkan kartu atau tombol aksi mengambang, Anda dapat menggunakan elemen paper-card atau paper-fab. Saya yakin Anda mulai memahami kegunaan dari unsur-unsur polimer dan kertas sekarang.

3. Apa itu Apache Cordova?

Aplikasi yang dibuat menggunakan elemen Polymer dan Polymer pada dasarnya hanya kumpulan file HTML, CSS, dan JavaScript. Ini berarti bahwa ia membutuhkan browser untuk menjalankan. Namun, itu dapat berjalan di dalam tampilan web, elemen antarmuka pengguna asli yang berperilaku seperti browser tanpa Chrome.

Apache Cordova adalah kerangka kerja yang memungkinkan Anda menghasilkan aplikasi asli yang berisi tampilan web dan menentukan halaman HTML yang Anda inginkan untuk ditampilkan. Dalam tutorial ini, kami akan menggunakan Apache Cordova untuk menjalankan aplikasi daftar agenda di perangkat Android.

4. Pengaturan Proyek Web

Untuk mempercepat pengembangan dan membuat debugging lebih mudah, sebagian besar pengembang mulai membangun aplikasi hibrida mereka sebagai aplikasi web. Kami akan melakukan yang sama. Mari kita mulai dengan membuat to-do app sebagai sebuah proyek web biasa yang dapat berjalan di browser.

Buat sebuah direktori baru untuk proyek dan beri nama todoWebApp.

1
mkdir ~/todoWebApp

Untuk mengelola dependensi proyek, kita akan menggunakan Bower. Jika Anda tidak memiliki Bower terinstal, gunakan npm untuk menginstalnya secara global.

1
sudo npm install -g bower

Setelah Bower terinstal, navigasikan ke direktori proyek dan gunakan perintah bower menginstal polimer paper elemen serta yang dibutuhkan.

1
cd ~/todoWebApp
2
bower install PolymerElements/paper-elements

Ini melengkapi setup proyek web.

5. Membuat Elemen Polimer Kustom

Mari kita membuat kode yang mengandung unsur polimer kustom untuk tata letak dan fungsi to-do daftar web app. Mulailah dengan membuat file baru dan nama itu tasks-list.html.

Langkah 1: Mengimpor Paper Elements

Setiap paper elemen yang digunakan dalam tata letak unsur kustom harus diimpor secara individual. Untuk membangun antarmuka web app, kita akan menggunakan elemen berikut:

  • paper-toolbar untuk membuat toolbar
  • paper-button untuk membuat berbagai tombol
  • paper-fab untuk membuat tombol action mengambang
  • paper-listbox untuk membuat daftar berisi tugas
  • paper-item untuk membuat tugas individu di dalam daftar
  • paper-checkbox untuk membuat checkbox pengguna dapat memeriksa untuk menandai tugas sebagai selesai
  • paper-icon-button menggambar tombol memiliki ikon
  • paper-input menggambar kolom teks pengguna dapat digunakan untuk memasukkan nama tugas
  • paper-dialog untuk menciptakan sebuah modal dialog
  • iron-icons menggambar ikon

Selain itu, untuk menggunakan fungsi data binding yang disediakan oleh Polymer, kita harus mengimpor kerangka Polymer itu sendiri. Menambahkan kode berikut ke file:

1
<link rel='import' href='bower_components/polymer/polymer.html'/>
2
3
<link rel='import' href='bower_components/paper-toolbar/paper-toolbar.html'/>
4
<link rel='import' href='bower_components/paper-button/paper-button.html'/>
5
<link rel='import' href='bower_components/paper-fab/paper-fab.html'/>
6
<link rel='import' href='bower_components/paper-listbox/paper-listbox.html'/>
7
<link rel='import' href='bower_components/paper-item/paper-item.html'/>
8
<link rel='import' href='bower_components/paper-checkbox/paper-checkbox.html'/>
9
<link rel='import' href='bower_components/paper-icon-button/paper-icon-button.html'/>
10
<link rel='import' href='bower_components/paper-input/paper-input.html'/>
11
<link rel='import' href='bower_components/paper-dialog/paper-dialog.html'/>
12
<link rel='import' href='bower_components/iron-icons/iron-icons.html'/>

Langkah 2: Membuat DOM

Anda dapat berpikir elemen polimer sebagai halaman HTML. Sama seperti halaman HTML, polimer elemen memiliki sendiri DOM tree mereka sendiri yang mengandung berbagai tag untuk elemen antarmuka pengguna, tag style untuk styling dan tag script untuk kode JavaScript.

Untuk membuat DOM, kita harus menggunakan tag dom-modul dan menetapkan atribut id dengan nama elemen. Mari kita sebut kustom elemen tasks-list. Perhatikan bahwa nama harus berisi tanda hubung.

1
<dom-module id='tasks-list'>
2
3
</dom-module>

Langkah 3: Membuat Layout

Membuat sebuah layout yang menggunakan elemen polimer yang sederhana seperti menciptakan satu menggunakan elemen HTML, hanya tag yang berbeda. Namun, Anda harus memastikan bahwa semua detail layout berada di dalam template tag.

Berikut adalah kode yang dapat Anda tambahkan ke dom-modul untuk membuat tata letak to-do list app:

1
<template>
2
  	<!-- Create a toolbar/actionbar -->
3
        <paper-toolbar>
4
            <div class="title"> My Tasks </div>
5
        </paper-toolbar>
6
7
        <div>
8
			<!-- Create a list of tasks -->
9
            <paper-listbox>
10
                <template is='dom-repeat' items='{{ tasks }}'>
11
					<!-- Create an individual task -->
12
                    <paper-item>
13
                        <paper-checkbox checked='{{ item.isComplete }}' 
14
                            class='flex-11 taskBox' on-change='toggleTask'>
15
                                {{ item.taskName }}
16
                        </paper-checkbox>                            
17
                        <paper-icon-button
18
                            icon='delete'
19
                            class='flex-1'
20
                            style='color: gray'
21
                            on-click='deleteTask'>
22
                        </paper-icon-button>                    
23
                    </paper-item>
24
                </template>
25
            </paper-listbox>
26
27
			<!-- Create a floating action button -->
28
            <paper-fab icon='add'
29
                       style='position:absolute; bottom: 30px; right:24px'
30
                       on-click='showAddTaskDialog'>
31
            </paper-fab>
32
33
			<!-- Create a modal dialog -->
34
            <paper-dialog id='addTaskDialog' modal>
35
                <paper-input label='What do you have to do?' value='{{ latestTaskName }}'>
36
				</paper-input>
37
                <div class='buttons'>
38
                    <paper-button dialog-dismiss>Cancel</paper-button>
39
                    <paper-button on-click='addTask'>Add</paper-button>
40
                </div>
41
            </paper-dialog>
42
        </div>
43
</template>

Yang mungkin tampak seperti banyak kode, tetapi jika Anda sudah familiar dengan HTML dan handlebar ekspresi, Anda akan menemukan bahwa cukup intuitif.

Seperti yang Anda lihat, polimer elemen tag dapat digunakan secara bebas bersama tag HTML dan style inline dapat digunakan untuk menyesuaikan penampilan mereka.

Menambahkan event listner ke polimer elemen tag serupa dengan menambahkan satu ke HTML tag. Pada kode di atas, kami telah menggunakan dua type event listeners, on-click listeners untuk mendeteksi tombol diklik dan on-change listeners untuk mendeteksi perubahan-perubahan di states dari checkboxes.

Anda juga mungkin telah memperhatikan bahwa, selain elemen Polimer dan tag HTML, kami telah menggunakan dom-repeat helper template tag. Jika Anda belum menebaknya, ia berfungsi seperti for pernyataan dan dapat digunakan untuk mengulang melalui semua item array. Dalam layout kami, itu sedang digunakan untuk menggambar tugas individu yang berasal dari serangkaian tugas.

Langkah 4: Mendaftar Elemen

Sebelum kita dapat menggunakan elemen polimer kustom dalam halaman HTML, kita harus mendaftar dengan menggunakan fungsi Polimer. Fungsi ini mengharapkan satu objek JavaScript yang berisi fungsi dan properties dari elemen. Setidaknya, objek harus memiliki is properti menetapkan nama custom element.

Tambahkan script tag setelah template tag dan tambahkan kode berikut untuk itu:

1
Polymer({
2
    is: 'tasks-list',	
3
	// more code goes here
4
});

Langkah 5: Initializing Element

Dalam layout element kami, kami telah menggunakan dua sifat dalam handlerbar ekspresi, tasks dan latestTaskName. Namun, elemen tersebut belum memiliki properti tersebut. Untuk menambah dan menginisialisasinya, kita harus menggunakan metode ready. Untuk sekarang, kita hanya dapat menginisialisasi tasks untuk array kosong dan latestTaskName untuk string kosong.

Tambahkan kode berikut setelah is properti:

1
ready: function() {
2
    this.tasks = [];
3
	this.latestTaskName = "";
4
},

Langkah 6: Storing, Updating, dan Deleting Data

Untuk secara permanen menyimpan tugas yang menambahkan pengguna ke to-do list, kita akan menggunakan local storage melalui objek localStorage. Mari kita sekarang menulis beberapa kode untuk menambahkan tugas untuk penyimpanan lokal.

Layout sudah berisi sebuah paper-dialog yang memiliki sebuah field input yang di mana pengguna dapat masukkan nama tugas. Dialog ditutup secara default, meskipun, yang bukan yang kita inginkan. Di on-click listener tombol tindakan yang mengambang, memanggil metode open dialog untuk membukanya.

1
showAddTaskDialog: function() {
2
    this.$.addTaskDialog.open();
3
},

Berkat data bind dua arah Polymer, apa pun yang dimasukkan pengguna ke dalam paper-input dialog langsung tersedia di properti latestTaskName. Oleh karena itu, dalam on-click listener tombol Add dialog, kita hanya dapat menambahkan latestTaskName ke localStorage menggunakan metode setItem.

localStorage menyimpan data dalam bentuk pasangan key-value. Untuk menyimpan tugas, kita akan menggunakan nama tugas sebagai kunci dan apakah selesai atau tidak sebagai nilai. Karena localStorage hanya bekerja dengan string (Boolean yang saat ini tidak didukung), kita akan dapat menyimpan yes jika tugas telah selesai dan no sebaliknya.

Setelah tugas telah ditambahkan, kami dapat menutup dialog menggunakan metode close.

1
addTask: function() {
2
	// Store the new task as not completed
3
    localStorage.setItem(this.latestTaskName, 'no');
4
5
	// Reset latestTaskName
6
	this.latestTaskName="";
7
8
	// Close the dialog
9
    this.$.addTaskDialog.close();
10
11
	// Update the list of tasks
12
    this.updateTasks();
13
},

Demikian pula, bila pengguna check atau unchecks kotak centang yang terkait dengan task, kita dapat memperbarui nilai yang disimpan dalam objek localStorage dengan menerapkan metode setItem. Karena kita menggunakan dom-repeat helper template untuk menarik setiap item dari paper-listbox, kita dapat menggunakan objek model present dalam on-change event untuk mendapatkan nama tugas yang terkait dengan checkbox. Selain itu, kita perlu mengkonversi nilai boolean checkbox checked status ke 'yes' atau 'no' sebelum menyimpannya dalam localStorage.

1
toggleTask: function(e) {
2
	// Get the name of the task
3
    var taskName = e.model.item.taskName;
4
5
	// Convert true/false to yes/no
6
    if(e.model.item.isComplete)
7
        localStorage.setItem(taskName, 'yes');
8
    else
9
        localStorage.setItem(taskName, 'no');
10
},

Jika pengguna memilih untuk menghapus tugas, mereka dapat mengklik paper-icon-button yang terkait dengan tugas. Untuk menghapus tugas secara permanen, panggil metode removeItem dari objek localStorage di on-click listener paper-icon-button.

1
deleteTask: function(e) {
2
    var taskName = e.model.item.taskName;
3
    localStorage.removeItem(taskName);
4
5
	// Update the list of tasks
6
    this.updateTasks();
7
},

Langkah 7: Menampilkan Tugas

Anda mungkin telah memperhatikan panggilan ke updateTasks di addTask dan deleteTask metode. Dalam metode updateTasks, kami memperbarui array task, yang kita diinisialisasi dalam metode ready, untuk mencerminkan isi objek localStorage. Hal ini diperlukan, karena template dom-repeat helper, digunakan untuk menampilkan daftar tugas, bekerja hanya dengan array.

Dalam array tasks, kami menggunakan JSON objek untuk mewakili tugas-tugas. Setiap objek JSON memiliki dua field, taskName, dan isComplete. taskName adalah string yang berisi nama tugas dan isComplete boolean menunjukkan apakah tugas selesai.

Untuk memungkinkan Polimer untuk mendeteksi perubahan-perubahan dalam array tasks, daripada menggunakan fungsi standar array, kita harus menggunakan metode manipulasi array yang hadir dalam elemen polimer. Untuk sekarang, kita akan menggunakan metode splice untuk menghapus semua elemen dari array sekaligus dan push metode untuk menambahkan elemen array.

Kode berikut menciptakan updateTasks metode, yang loop melalui semua item dalam objek localStorage dan menambahkan mereka ke array tasks.

1
updateTasks: function() {
2
	// Empty the array
3
    this.splice('tasks', 0);
4
5
	// Add items from localStorage
6
    for(var taskName in localStorage) {
7
        var task = {
8
            taskName: taskName,
9
            isComplete: localStorage.getItem(taskName) == 'yes'
10
        };
11
        this.push('tasks', task);
12
    }
13
},

Sekarang, array tasks akan diperbarui hanya ketika pengguna menambahkan atau menghapus tugas. Untuk menampilkan tugas segera setelah aplikasi dibuka, kita harus menambahkan panggilan ke updateTasks metode dalam metode ready.

Elemen polimer kami kustom siap untuk digunakan.

6. Menggunakan Elemen Kustom Polimer

Mari kita sekarang membuat halaman HTML dan menambahkan elemen kustom untuk itu. Buat sebuah file baru, beri nama index.html dan menambahkan tag HTML head dan body untuk itu.

Sebelum kita menggunakan elemen, kita harus menambahkan sebuah link tag untuk mengimpor tasks-list.html. Selain itu, untuk menghilangkan paddings dan margin, dan menggunakan tata letak flex, tambahkan fullbleed, layout, dan vertikal CSS kelas ke tag body. Karena kelas CSS ini didefinisikan oleh unsur iron-flex-layout, kita harus menambahkan sebuah link tag untuk mengimpor.

Dengan impor di atas, kita dapat menambahkan tasks-list tag di dalam tag body. File sekarang harus terlihat seperti ini:

1
<html>
2
    <head>
3
        <link rel="import" href="bower_components/iron-flex-layout/iron-flex-layout.html"/> 
4
        <link rel="import" href="./tasks-list.html"/>
5
    </head>
6
    <body class="fullbleed layout vertical">
7
		
8
		<!-- Use the custom Polymer element -->
9
        <tasks-list></tasks-list>
10
11
    </body>
12
</html>

7. Menjalankan App di Browser

Aplikasi web to-do kami sudah siap. Karena kerangka polimer kebutuhan HTTP server untuk menjalankan, mulai satu menggunakan Python's SimpleHTTPServer modul di dalam direktori proyek.

1
python -m SimpleHTTPServer

Anda sekarang dapat mengunjungi http://localhost:8000/ untuk menggunakan aplikasi Anda.

App running in Google ChromeApp running in Google ChromeApp running in Google Chrome

8. Pengaturan Proyek Cordova

Sekarang setelah kami berhasil menjalankan aplikasi di browser, saatnya mengubahnya menjadi aplikasi Android dengan menyematkannya di dalam proyek Cordova.

Ini berarti bahwa pertama kita perlu menginstal Cordova CLI (Command Line Interface) secara global menggunakan npm:

1
sudo npm install -g cordova

Untuk membuat sebuah proyek Cordova yang baru, kita dapat menggunakan perintah cordova create. Sebagai argumennya, ia mengharapkan nama direktori tempat proyek Cordova harus dibuat, pengenal nama domain terbalik dari aplikasi, dan nama aplikasi.

Untuk embed proyek web kami dalam proyek Cordova, kita juga perlu menyertakan copy-from pilihan dan menentukan lokasi proyek web.

Perintah berikut membuat proyek Cordova untuk app disebut To-do di dalam direktori yang disebut todo, dan berisi proyek web yang terletak di todoWebApp:

1
cordova create todo com.tutsplus.code.hathi.todoapp "To-do" --copy-from=/home/me/todoWebApp

Proyek Cordova yang baru saja kami buat belum mendukung platform apa pun. Untuk menambahkan dukungan untuk Android platform, navigasikan ke direktori todo dan menggunakan perintah cordova platform.

1
cd todo
2
cordova platform add android

9. Menjalankan Hybrid App

Tanpa harus menulis satu baris kodepun, proyek Cordova kami sudah siap untuk digunakan. Mari buat menggunakan perintah cordova build. Sebelum Anda melanjutkan, pastikan bahwa nilai variabel lingkungan ANDROID_HOME diatur ke lokasi Android SDK.

1
export ANDROID_HOME=/home/me/Android/Sdk/
2
cordova build android

Jika gagal build mengatakan file bernama web-animations.min.js.gz tidak dapat ditambahkan ke APK, cobalah menghapus file dan build proyek lagi.

1
rm -f ./www/bower_components/web-animations-js/web-animations.min.js.gz
2
cordova build android

Setelah berhasil membangun, menyebarkan aplikasi ke perangkat Android Anda menggunakan perintah cordova run.

1
cordova run android

Anda sekarang harus mampu melihat aplikasi yang berjalan pada perangkat Anda.

App running on Android deviceApp running on Android deviceApp running on Android device

Kesimpulan

Dalam tutorial ini, Anda belajar bagaimana menggunakan polimer dan polimer kertas elemen untuk menciptakan sebuah to-do list app web. Anda juga belajar bagaimana meng-embed aplikasi web di dalam sebuah proyek Cordova sehingga berjalan sebagai aplikasi hibrida pada perangkat Android. Meskipun kita berfokus hanya pada Android platform, Anda juga dapat menjalankan aplikasi pada perangkat iOS tanpa perubahan kode. Untuk membuat karya ini, Anda perlu menggunakan perintah cordova platform lagi untuk menambahkan dukungan untuk iOS platform.

Untuk mempelajari cara untuk membangun antarmuka yang lebih kompleks yang menggunakan polimer, saya ingin merujuk Anda ke dokumentasi Polimer.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.