In this case study, we will walk through the process of building a simple To-Do List app using Apache Cordova. This project will help you understand how to apply the concepts learned in previous modules to create a functional mobile application.
Objectives
- Create a new Cordova project.
- Implement a user interface for the To-Do List app.
- Use Cordova plugins to interact with device storage.
- Add, display, and delete to-do items.
- Test the app on a mobile device.
Step 1: Create a New Cordova Project
1.1 Setting Up the Project
First, ensure that you have Cordova installed. If not, you can install it using npm:
Next, create a new Cordova project:
Navigate to the project directory:
1.2 Adding Platforms
Add the platforms you want to build for. For this example, we'll add Android and iOS:
Step 2: Implementing the User Interface
2.1 Basic HTML Structure
Create an index.html
file in the www
directory with the following content:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>To-Do List App</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <div class="container"> <h1>To-Do List</h1> <input type="text" id="new-todo" placeholder="Enter a new to-do"> <button id="add-todo">Add</button> <ul id="todo-list"></ul> </div> <script src="js/index.js"></script> </body> </html>
2.2 Styling the App
Create a styles.css
file in the www/css
directory:
body { font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 0; } .container { width: 300px; margin: 50px auto; background: #fff; padding: 20px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } h1 { text-align: center; } input[type="text"] { width: calc(100% - 22px); padding: 10px; margin-bottom: 10px; border: 1px solid #ccc; } button { width: 100%; padding: 10px; background: #28a745; color: #fff; border: none; cursor: pointer; } button:hover { background: #218838; } ul { list-style: none; padding: 0; } li { padding: 10px; background: #f9f9f9; border-bottom: 1px solid #ddd; display: flex; justify-content: space-between; } li:last-child { border-bottom: none; } .delete { color: #dc3545; cursor: pointer; }
Step 3: Adding Functionality with JavaScript
3.1 Basic JavaScript
Create an index.js
file in the www/js
directory:
document.addEventListener('deviceready', function() { const newTodoInput = document.getElementById('new-todo'); const addTodoButton = document.getElementById('add-todo'); const todoList = document.getElementById('todo-list'); addTodoButton.addEventListener('click', function() { const todoText = newTodoInput.value.trim(); if (todoText) { addTodoItem(todoText); newTodoInput.value = ''; } }); function addTodoItem(text) { const li = document.createElement('li'); li.textContent = text; const deleteButton = document.createElement('span'); deleteButton.textContent = 'Delete'; deleteButton.classList.add('delete'); deleteButton.addEventListener('click', function() { todoList.removeChild(li); }); li.appendChild(deleteButton); todoList.appendChild(li); } });
Step 4: Using Cordova Plugins for Storage
4.1 Installing the Storage Plugin
Install the Cordova Storage plugin:
4.2 Modifying JavaScript for Storage
Update index.js
to save and load to-do items from the device storage:
document.addEventListener('deviceready', function() { const newTodoInput = document.getElementById('new-todo'); const addTodoButton = document.getElementById('add-todo'); const todoList = document.getElementById('todo-list'); let db; // Open or create the database db = window.sqlitePlugin.openDatabase({name: 'todo.db', location: 'default'}); // Create the table if it doesn't exist db.transaction(function(tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS todos (id INTEGER PRIMARY KEY, text TEXT)'); }, function(error) { console.log('Transaction ERROR: ' + error.message); }, function() { console.log('Database and table ready'); loadTodos(); }); addTodoButton.addEventListener('click', function() { const todoText = newTodoInput.value.trim(); if (todoText) { addTodoItem(todoText); newTodoInput.value = ''; } }); function addTodoItem(text) { db.transaction(function(tx) { tx.executeSql('INSERT INTO todos (text) VALUES (?)', [text], function(tx, res) { const li = document.createElement('li'); li.textContent = text; li.setAttribute('data-id', res.insertId); const deleteButton = document.createElement('span'); deleteButton.textContent = 'Delete'; deleteButton.classList.add('delete'); deleteButton.addEventListener('click', function() { deleteTodoItem(res.insertId, li); }); li.appendChild(deleteButton); todoList.appendChild(li); }); }); } function loadTodos() { db.transaction(function(tx) { tx.executeSql('SELECT * FROM todos', [], function(tx, res) { for (let i = 0; i < res.rows.length; i++) { const row = res.rows.item(i); const li = document.createElement('li'); li.textContent = row.text; li.setAttribute('data-id', row.id); const deleteButton = document.createElement('span'); deleteButton.textContent = 'Delete'; deleteButton.classList.add('delete'); deleteButton.addEventListener('click', function() { deleteTodoItem(row.id, li); }); li.appendChild(deleteButton); todoList.appendChild(li); } }); }); } function deleteTodoItem(id, li) { db.transaction(function(tx) { tx.executeSql('DELETE FROM todos WHERE id = ?', [id], function(tx, res) { todoList.removeChild(li); }); }); } });
Step 5: Testing the App
5.1 Building the App
Build the app for the desired platform:
5.2 Running the App
Run the app on an emulator or a physical device:
Conclusion
In this case study, we have built a simple To-Do List app using Apache Cordova. We covered the following steps:
- Setting up a new Cordova project.
- Creating a user interface with HTML and CSS.
- Adding functionality with JavaScript.
- Using Cordova plugins to interact with device storage.
- Testing the app on a mobile device.
This project demonstrates how to apply the core concepts of Cordova to create a functional mobile application. In the next case study, we will build a Weather App, which will introduce additional Cordova features and APIs.
Apache Cordova Course
Module 1: Introduction to Apache Cordova
- What is Apache Cordova?
- Setting Up Your Development Environment
- Creating Your First Cordova Project
- Understanding the Project Structure
Module 2: Core Concepts and APIs
- Cordova Plugins
- Using the Device API
- Accessing Device Storage
- Handling Network Information
- Interacting with the Camera
Module 3: User Interface and User Experience
- Building a Responsive UI
- Using Cordova with Frameworks (e.g., Angular, React)
- Managing User Input
- Implementing Navigation
Module 4: Advanced Cordova Features
Module 5: Deployment and Distribution
- Building for Different Platforms
- Signing and Publishing Apps
- App Store Guidelines and Best Practices
- Continuous Integration and Deployment
Module 6: Case Studies and Real-World Applications
- Case Study: Building a To-Do List App
- Case Study: Building a Weather App
- Case Study: Building a Social Media App
- Lessons Learned and Best Practices