1. Introduction
The use of mobile devices has become an integral part of daily life for a lot of people. In 2023, over 4.2 billion people worldwide used smartphones. Projections from
Statista suggest that this number will continue rising so that over 6.3 billion people will use smartphones in the next five years [
1].
As smartphone adoption grows, so does the demand for innovative and high-quality mobile applications. Based on
data.ai, users worldwide downloaded over 255 billion mobile applications in 2023, demonstrating a strong interest in installing mobile applications that offer added value to smartphones [
2]. This surge in application downloads has reflected the significant role of mobile applications that are relied upon for various purposes, including entertainment, communication, productivity, and shopping.
Traditionally, developers build applications using
Java and
Kotlin for
Android, and
Swift and
Objective-C for
iOS. These languages stand to be popular due to the fact that a lot of developers have been acquainted with these platforms [
3]. Native development allows developers to fully utilize the exclusive capabilities and features of each operating system. However, one major drawback is developers need to build and manage different source codes depending on platforms even for the same applications.
To address this challenge,
cross-platform application development [
4] has emerged as a way to create applications for developers to write code once and deploy it on multiple platforms. This approach saves time, effort, and costs while reaching wider audiences.
Cross-platform application development has gained great popularity in recent years.
Among the most prominent frameworks for
cross-platform application development is
Flutter, which has been developed by
Google.
Flutter is an open-source UI development toolkit that enables developers to build natively compiled applications for mobile, including
Android and
iOS, web, and desktop platforms from a single codebase. It provides a rich set of
prebuilt widgets and tools that help developers create attractive, responsive, and flexible user interfaces [
5].
The following advantages can be observed in learning and using the cross-platform application development with Flutter:
A single source code using one language, Dart, can run on various platforms.
An attractive, responsive, and flexible user interface can be easily made using prebuilt widgets and tools.
Real-time code changes become possible by the hot-reload feature.
Comprehensive documentation and a supportive community make Flutter particularly suitable for self-learners, enabling individuals to independently tackle and resolve code modification problems.
As a result,
Flutter has become favored by many well-known companies due to its numerous advantages, and
Flutter has been adopted at well-known companies such as
Cryptograph,
Postmuse,
Hamilton,
Apptree, and
Google [
6].
However, this rapid growth in the popularity of Flutter has not been accompanied by a proportional increase in classroom instruction and lectures in universities. Many universities still lack sufficient resources in terms of teachers and/or time to deliver comprehensive lectures on Flutter development. As a result, there is a growing need for independent learning environments for new developers and students to learn Flutter with Dart programming on their own.
In response to this gap, we previously developed a web-based Programming Learning Assistant System (PLAS) for self-study of programming languages through practicing code reading and code writing. Currently, PLAS covers familiar programming languages such as C, C++, Java, JavaScript, Python, Scratch, and Verilog. PLAS provides various types of programming exercises to enhance the programming learning experience.
Building on this foundation, we have also studied the use of
Grammar Understanding Problem (GUP) for learning
cross-platform application development with
Flutter in
PLAS. Each question in
GUP relates to a fundamental grammar concept of the
Flutter [
7]. Additionally, the
Learning Environment for Initiating Flutter App Development Using Docker has been implemented for
Code Writing Problem (CWP). This environment makes it easier for novice students to set up the
Flutter environment on their computers and independently modify the source code in the projects by following instructions [
8].
In this paper, we present a system for independent learning using Code Modification Problem (CMP) for Flutter/Dart programming in cross-platform application development. A CMP instance asks to modify the given source code to generate the user interface as shown in the given screenshot. The correctness of any student answer is verified through string matching with the correct answer. A screenshot will help a student to understand the source code and answer the CMP instance. Novice students can learn the basics of Flutter/Dart programming through analyzing the screenshot of the user interface.
In this study, we explore the following Research Questions (RQs):
Can a student who has studied a major programming language such as C or Java but not Flutter/Dart programming modify its source codes without taking formal classes?
Can such a student develop a basic knowledge of Flutter/Dart programming by solving CMP instances?
To explore the answers to these RQs, we generated CMP instances covering various topics and widgets in Flutter/Dart programming, and assigned them to students with no Flutter/Dart programming experience. In the CMP instances, it is requested to alter only the parameters, such as color, alignment, and other widget properties. Solving CMP instances helps students become familiar with Dart coding patterns and build a fundamental understanding of the Flutter framework.
For evaluations of the proposal, we generated 20 CMP instances for basic topics and 18 CMP instances for advanced topics of Flutter/Dart programming. We assigned them to 21 master’s students at Okayama University, Japan, who have never studied it. Their solution results indicate that the students effectively fulfilled the assignments and delivered sufficient outcomes.
This paper’s structure is outlined as follows:
Section 2 contains a review of relevant research on the approach.
Section 3 provides an overview of
Flutter and
Dart Language.
Section 4 addresses the
code modification problem (CMP) for Flutter.
Section 5 presents experimental results.
Section 6 concludes this paper with future works.
2. Literature Review
In this section, we explore a comprehensive review of the literature related to the topic of our paper. We examine several studies that have focused on the development of learning platforms for mobile applications.
In [
9], Al-Hakim et al. presented an
Android-based application for teaching algorithms and data structures. This application is implemented using
Java and
Android Studio for
Android 6.0 and above, containing 13 learning modules covering topics, such as introductions to algorithms and programming, data structures, and linked lists. The application is freely available for learning purposes. It uses
UML diagrams that are similar to
activity diagrams and
use case diagrams for system processing and user interactions. It adopts
black-box testing to check the answer. The authors conclude that this application can replace textbooks, enabling both independent and lecturer-assisted learning using mobile technology.
In [
10], Septiana et al. presented a learning application on
Android Studio for building
Android applications. The authors used various components within
Android Studio, including manifest files,
Java source code, and resource files to build the core functionality of the mobile application.
Blender was used for
3D development and integrations. It is an
open-source 3D computer graphics software tool that allows creating 3D models, animations, and visualizations. The integrated 3D contents from
Blender enhanced biology learning experiences on
Android devices with interactive features and multimedia presentations.
In [
11], Tung presented a flashcard mobile application called
Memoa using the
Flutter framework,
Dart, and
Google Firebase services. This project aims to create gamified learning experiences for users struggling to retain knowledge from online courses. It covers flashcards, spaced repetitions, and gamification principles. The project follows an
Agile Kanban methodology for developments. Key features include user authentication, cloud storage, the
Leitner algorithm for spaced repetitions, and a virtual pet for gamification.
In [
12], Yassine et al. presented a mobile application that teaches programming fundamentals by incorporating the
multi-agent system,
domain ontology,
checkpoint system, and
Xamarin.Forms for cross-platform developments. The goal is to appeal to wide audiences, reduce development and maintenance efforts, and offer versatile and engaging learning experiences.
In [
13], Hu et al. discussed improving the teaching of
Mobile Application Development (MAD) for students with diverse programming backgrounds using online and blended learning approaches. The study addresses the challenges posed by traditional lecture-based methods and text-based lab instructions, which did not adequately cater to students with differing programming experiences.
This literature review provides insights into advancements in the development of learning platforms for mobile application programming. It explores various methodologies, tools, and technologies that have been implemented to enhance the learning of mobile application programming.
To better understand and compare the features of these platforms,
Table 1 summarizes their key attributes, advantages, and limitations.
4. Code Modification Problem for Flutter/Dart Programming
In this section, we present a code modification problem (CMP) for self-study of Flutter/Dart programming in PLAS.