# Appwriters > Learn to build apps for mobile, web and desktop with Flutter, Dart and Appwrite: practical tutorials, a free Flutter and Appwrite course, and project-based challenges. Appwriters (https://www.appwriters.dev) is written by Damodar Lohani. It has a blog, a free Flutter and Appwrite course, the #30DaysMasterFlutter challenge and a series of Dart projects. Each link below ending in .md is a Markdown version of that page; drop the .md for the HTML page. ## Blog posts - [Flutter JNIgen in practice: replacing platform channels in an Android launcher](https://www.appwriters.dev/blog/flutter-jnigen-direct-native-interop-android-launcher.md): Flutter 3.50 made direct native interop stable. We moved the Aakar launcher's plugin from platform channels to JNIgen. Here is the setup, the real code, what we measured, and the gotchas. (2026-11-15) - [Upgrading to Flutter 3.50, and the accessibility bugs our tests found](https://www.appwriters.dev/blog/flutter-3-50-upgrade-and-accessibility-tests.md): An Android build break in Flutter 3.50, a contrast bug left behind by the wide-gamut Color change, and a text-size cap hiding in plain sight. What broke, why, and the tests that now guard it. (2026-11-14) - [Build interactive maps in Flutter with SVG](https://www.appwriters.dev/blog/flutter-interactive-svg-maps.md): Use SVG to build interactive maps in Flutter. This can be used for various purposes including games, educational apps, and more. (2024-12-02) - [Google generative AI with Flutter using the official Dart SDK](https://www.appwriters.dev/blog/google-generative-ai-with-flutter.md): Use the official Dart SDK to access Google's generative AI models in Flutter and build badass apps powered by Gemini. (2024-02-15) - [Dart mixins for everyone](https://www.appwriters.dev/blog/dart-mixins-for-everyone.md): Mixins in Dart are a way of reusing a class's code in multiple class hierarchies. Mixins can be added to different classes to extend their capabilities, without the need for complex inheritance structures. (2023-10-14) - [Asynchronous programming with streams in Dart and Flutter](https://www.appwriters.dev/blog/asynchronous-programming-with-streams-in-dart-and-flutter.md): Learn how to leverage Streams, StreamController, and StreamBuilder in Dart and Flutter for efficient asynchronous programming. Explore code examples and step-by-step explanations to master working with streams and building dynamic widgets. (2023-07-01) - [Achiving effective separation of UI and business logic in Flutter](https://www.appwriters.dev/blog/achiving-effective-separation-of-ui-and-business-logic-in-flutter.md): Learn the most valuable tip in Flutter to maintain a clear separation between UI and business logic. Enhance codebase, improve development process, and enjoy benefits like modularity, collaboration, and better code organization. (2023-06-28) - [Using the url_launcher Plugin in Flutter - A Comprehensive Guide](https://www.appwriters.dev/blog/using-the-url-launcher-plugin-in-flutter-a-comprehensive-guide.md): Explore our comprehensive guide on using the url_launcher plugin in Flutter. Learn how to install it, launch various types of URLs including web, phone call, SMS, and email, plus its pros, cons, and alternatives. Perfect for Flutter developers! (2023-06-07) - [A Beginner's Guide to Persisting Data with Shared Preferences in Flutter](https://www.appwriters.dev/blog/a-beginners-guide-to-persisting-data-with-shared-preferences-in-flutter.md): Explore how to use the shared_preferences plugin in Flutter for local data storage. Learn the ins and outs of saving, reading, and removing data for a smooth user experience. (2023-05-24) - [A Beginner's Guide to the HTTP Package in Flutter](https://www.appwriters.dev/blog/a-beginners-guide-to-the-http-package-in-flutter.md): Learn to leverage the power of Flutter's http package for your app development needs. Our guide covers everything from basic GET and POST requests to advanced error handling and interceptors. Ideal for beginners, it includes comprehensive code examples for a hands-on learning experience. (2023-05-18) - [Diving Deeper into Asynchronous Programming with Futures in Flutter](https://www.appwriters.dev/blog/diving-deeper-int-asynchronous-programming-with-futures-in-flutter.md): Boost your Flutter skills with this comprehensive guide on asynchronous programming. Learn about Dart Futures, chaining, FutureBuilder, and error handling with real-world examples. (2023-05-15) - [Making Friends with Asynchronous Programming and Futures in Flutter](https://www.appwriters.dev/blog/making-friends-with-asynchronous-programming-and-futures-in-flutter.md): Unleash the power of Asynchronous Programming in your Flutter apps. Learn how to implement Futures and handle errors for a seamless user experience. (2023-05-14) - [Flutter Password Less Authentication with Appwrite Magic URL](https://www.appwriters.dev/blog/flutter-password-less-authentication-with-appwrite-magic-url.md): Let us explore how to set up password less, Magic URL based authentication in your Flutter app using Appwrite. We'll also explore how to setup Android and iOS apps to handle the redirect URL so that you will not have to host a web app just for this purpose. (2023-05-10) - [The #30DaysMasterFlutter Journey Has Begun! šŸš€](https://www.appwriters.dev/blog/30daysmasterflutter-journey-has-begun.md): We're thrilled to announce that the journey to mastering Flutter and Dart begins today with our #30DaysMasterFlutter course! This free, easy to follow, project-based journey šŸ“š is your ticket to learning one of the most exciting technologies in the world of app development. (2023-05-04) - [Get Started with Testing in Flutter](https://www.appwriters.dev/blog/get-started-with-testing-in-flutter.md): Testing is a crucial part of the software development process. Writing and running automated tests make sure our application remains robust with every change. (2023-03-25) - [Let's Build an Android Launcher Application with Flutter](https://www.appwriters.dev/blog/lets-build-an-android-launcher-application-with-flutter.md): Launcher app is one of the most important application for android mobile users. In this article we are going to learn to build Android launcher application using Flutter framework. (2023-03-17) - [Recommended Flutter Plugins and Packages for Every Project](https://www.appwriters.dev/blog/recommended-flutter-plugins-and-packages-for-every-project.md): What makes Flutter great are it's ecosystem of packages and plugins that make it possible to build complex integrations and functionalities in a fraction of seconds. Lets look at some of the plugins and plackages that are recommended for every Flutter project you create. (2023-03-06) - [Gears I Use Every Day for Work and Personal Projects](https://www.appwriters.dev/blog/gears-i-use-every-day-for-work-and-personal-life.md): As a programmer and content creator I use various gears to complete my day to day tasks. Though advance gears are not the most important things, they most certainly help. In this article I will share the gears I use everyday. (2023-03-02) - [Demystifying Dart Extension Methods](https://www.appwriters.dev/blog/demystifying-dart-extension-methods.md): Dart extension methods provide us with a easy and clean way to extend external libraies to our specific needs without touching their source code. Let's learn what they are and how to use them. (2023-02-19) - [Testing Docker Images](https://www.appwriters.dev/blog/testing-docker-images.md): Docker containers have become standards for containarized development and deployment. It is very important to make sure that the docker image we build are not missing anything and are working properly. In this article we will learn how we can write tests for docker images to make sure it is built properly. (2023-02-12) - [Integrating with REST API in Flutter](https://www.appwriters.dev/blog/integrating-with-rest-api-in-flutter.md): In this article we will introduce REST API briefly and then learn to integrate external service into our Flutter application using REST API. We will be using the official http package however after learning the fundamentals you will be able to use any other library to make a http request in Flutter. (2023-02-11) - [My Favorite Development Tools and Tech Stack for 2023](https://www.appwriters.dev/blog/my-favorite-development-tools-and-tech-stack-for-2023.md): I am a full-stack developer currently working as a Software Engineer at Appwrite. In addition to office work, I have many different side projects. I build web applications and mobile applications, and I am an enthusiast who tests and tries many different technology stacks. During my 19-year journey in programming, I have worked with many different technologies. In this article, I will discuss my recent tech stack and development tools for both work and personal projects. (2023-01-29) - [Flutter Calendar App Optimizing Query and Managing Events](https://www.appwriters.dev/blog/2023-01-22-flutter-calendar-part-3.md): In previous two parts we learned to setup calendar and load and display events from Firestore. In this third and final part in the series, we will optimize the Firestore query so that we will only load the events necessary for the visible days in the calendar. Then we will also setup CRUD to allow to add, update and delete the events. (2023-01-22) - [Loading and Displaying Events from Firestore in Flutter Calendar App](https://www.appwriters.dev/blog/2023-01-19-flutter-calendar-part-2.md): In this second part of Flutter Calendar App tutorial, learn to integrate Firebase and then load and display event markers in calendar from Firestore database. (2023-01-19) - [An Open Source Back-End as a Service for All Your Needs](https://www.appwriters.dev/blog/2023-01-18-appwrites-service-map.md): Appwrite is an open-source back-end service that can help you quickly set up back-end APIs for your projects. It provides robust and reliable databases, storage, authentication, and other services that are essential for application development. This article will discuss the different services and features of Appwrite that empower application developers. (2023-01-18) - [I Do These 5 Things Every Morning and You Should Too](https://www.appwriters.dev/blog/2023-01-17-my-morning-routine.md): How we spend our morning signifies how we will spend the rest of the day. That is why, lately I’m focused to make my morning as fruitful as possible. And for that I wanted to spent the first hour of morning for personal improvements. In this article I will talk about how my latest morning routine looks like and why I have adopted those specific habits. (2023-01-17) - [Building Calendar App with Flutter](https://www.appwriters.dev/blog/2023-01-15-flutter-calendar-part-1.md): Calendar is integral to various types of applications. From a simple scheduling application to complex management systems, calendar plays important role. In this tutorial we will learn to display and customize a calendar in our Flutter application. (2023-01-15) ## Course: Flutter & Appwrite - [Course overview and curriculum](https://www.appwriters.dev/courses/flutter-appwrite): build a time tracking app with Flutter and Appwrite, 16 lessons planned. - [01. Getting started with Appwrite](https://www.appwriters.dev/courses/flutter-appwrite/getting-started-with-appwrite.md): Sign up to Appwrite cloud and create a Appwrite project that will host data for your application. - [02. Getting started with Flutter](https://www.appwriters.dev/courses/flutter-appwrite/getting-started-with-flutter.md): Create new Flutter project and push to GitHub. Setup basic GitHub action to help maintain code quality. - [03. Flutter and Appwrite integration](https://www.appwriters.dev/courses/flutter-appwrite/flutter-and-appwrite-integration.md): Integrate Flutter and Appwrite projects so that they can communicate with each other. - [04. Dependency injection](https://www.appwriters.dev/courses/flutter-appwrite/dependency-injection.md): Set up dependency injection in Flutter using get it. - [05. State management](https://www.appwriters.dev/courses/flutter-appwrite/state-management.md): Set up state management in Flutter using riverpod. - [06. Routing](https://www.appwriters.dev/courses/flutter-appwrite/routing.md): Set up routing in Flutter application using Go router package. - [07. Creating account for your user](https://www.appwriters.dev/courses/flutter-appwrite/creating-account-for-your-user.md): We will create a form that will allow users to create an account in our application. Appwrite will handle the user management for us. - [08. Authenticate user - login](https://www.appwriters.dev/courses/flutter-appwrite/authenticate-user.md): Allow user to login using their email and password. - [09. Authentication state manager](https://www.appwriters.dev/courses/flutter-appwrite/auth-state.md): Setup authentication state manager using riverpod. - [10. Authenticated routes](https://www.appwriters.dev/courses/flutter-appwrite/authenticated-routes.md): Update routing logic to check user authentication status before allowing access to certain routes. ## #30DaysMasterFlutter - [Challenge overview](https://www.appwriters.dev/30days/flutter): 30 days of Dart and Flutter, a project each day. - [Day 1: Setting up the Environment](https://www.appwriters.dev/30days/flutter/day1.md): Learn how to set up the environment for Flutter and Dart development, including installation, IDE configuration, and running your first app. - [Day 2: First Dart App](https://www.appwriters.dev/30days/flutter/day2.md): Get started with Dart programming by learning the basic syntax, writing and running programs, and solving simple problems. - [Day 3: Variables, Data Types, Operators and Expressions](https://www.appwriters.dev/30days/flutter/day3.md): Explore the fundamental concepts of Dart, including variables, data types, operators, and expressions, and learn how to use them in statements. - [Day 4: Dart Functions](https://www.appwriters.dev/30days/flutter/day4.md): Dive into Dart functions, including their syntax, parameters, return types, and how to use them in your Flutter app. - [Day 5: Asynchronous Programming](https://www.appwriters.dev/30days/flutter/day5.md): Explore the basics of asynchronous programming in Dart, including async, await, Future, and how to handle errors and timeouts when working with Future objects. - [Day 6: Exceptions and Error Handling](https://www.appwriters.dev/30days/flutter/day6.md): Understand the importance of exception handling and error management in Dart, and learn how to use try, catch, and finally blocks to handle exceptions in your Flutter app. - [Day 7: Dart Classes](https://www.appwriters.dev/30days/flutter/day7.md): Get introduced to object-oriented programming in Dart, including classes, objects, and inheritance, and learn how to use them in your Flutter app. - [Day 8: Dependency Management](https://www.appwriters.dev/30days/flutter/day8.md): Explore how to manage dependencies in your Flutter app using packages in Dart, including how to use the pubspec.yaml file and existing packages. - [Day 9: Networking in Dart](https://www.appwriters.dev/30days/flutter/day9.md): Learn the basics of networking in Dart, including how to make HTTP requests and parse JSON data in your Flutter app. - [Day 10: Hello Flutter](https://www.appwriters.dev/30days/flutter/day10.md): Get started with Flutter by understanding the basic structure of a Flutter app, learning about widgets, and creating a simple Flutter app. - [Day 11: User Interface Design - Part 1](https://www.appwriters.dev/30days/flutter/day11.md): Learn the basics of UI design in Flutter, including simple widgets like Text, Container, Row, and Column, and create a simple UI in your Flutter app. - [Day 12: User Interface Design - Part 2](https://www.appwriters.dev/30days/flutter/day12.md): Continue learning about UI design in Flutter by building a scrollable layout and exploring scrolling widgets like SingleChildScrollView, ListView, GridView and more. - [Day 13: Assets: Images and Fonts](https://www.appwriters.dev/30days/flutter/day13.md): Discover how to add images and fonts to your Flutter app, and learn how to use the pubspec.yaml file to manage your assets. - [Day 14: Interactive UI](https://www.appwriters.dev/30days/flutter/day14.md): Understand the concepts of state and StatefulWidget in Flutter, and learn how to implement stateful widgets using setState() in your Flutter app. - [Day 15: Forms and User Input](https://www.appwriters.dev/30days/flutter/day15.md): Discover the importance of forms and user input in Flutter, and learn how to use text fields and text editing controllers to implement forms and accept user input in your Flutter app. - [Day 16: Styling and Validating Forms](https://www.appwriters.dev/30days/flutter/day16.md): Explore how to style and validate forms in Flutter, including matching your app's theme and validating user input. - [Day 17: Alerts, Dialogs and Snackbar](https://www.appwriters.dev/30days/flutter/day17.md): Learn about when to use alerts, dialogs, and snackbar to show meaningful messages to users, and discover how to implement them in your Flutter app using the showDialog() method. - [Day 18: Introduction to Navigation](https://www.appwriters.dev/30days/flutter/day18.md): Get an introduction to navigating between screens in Flutter, including using the Navigator widget and routes, and implement navigation in your Flutter app. - [Day 19: Navigator 2.0 and the Go Router](https://www.appwriters.dev/30days/flutter/day19.md): Take a deeper dive into navigation in Flutter with Navigator 2.0 and the Go Router, and learn how to implement declarative navigation in your Flutter app using the Go Router. - [Day 20: Flutter Packages to Rescue](https://www.appwriters.dev/30days/flutter/day20.md): Discover the world of Flutter packages and libraries, including how to use existing packages and how to create your own, and learn how to implement them in your Flutter app. - [Day 21: HTTP request in Flutter](https://www.appwriters.dev/30days/flutter/day21.md): Explore how to make HTTP requests in Flutter to get data from remote servers, including using the http package, and learn how to implement HTTP requests in your Flutter app. - [Day 22: JSON Parsing](https://www.appwriters.dev/30days/flutter/day22.md): Learn how to parse JSON data in Flutter using the dart:convert package, and implement JSON parsing in your Flutter app. - [Day 23: Understanding State Management](https://www.appwriters.dev/30days/flutter/day23.md): Learn about the different types of state in Flutter and the importance of managing state. Choose the right state management solution for your Flutter app. - [Day 24: Implementing State Management](https://www.appwriters.dev/30days/flutter/day24.md): Learn how to implement state management in Flutter using setState() and streams. Implement a state management solution in your Flutter app. - [Day 25: Introduction to Persistence](https://www.appwriters.dev/30days/flutter/day25.md): Learn about data persistence in Flutter and different persistence options. Implement basic data persistence in your Flutter app. - [Day 26: Advanced Persistence](https://www.appwriters.dev/30days/flutter/day26.md): Learn about advanced persistence concepts in Flutter, such as databases and key-value stores. Implement advanced data persistence in your Flutter app. - [Day 27: Flutter Plugins](https://www.appwriters.dev/30days/flutter/day27.md): Learn how to use plugins in Flutter and how to create and use them. Implement plugins in your Flutter app. - [Day 28: Testing in Flutter](https://www.appwriters.dev/30days/flutter/day28.md): This tutorial will teach you about testing in Flutter, including how to write and run tests, and how to implement tests in your Flutter app. - [Day 29: Debugging and Dev Tools](https://www.appwriters.dev/30days/flutter/day29.md): Learn to debug and fix issues in your application. Learn to use the DevTools to debug your Flutter app. Understand the need to use DevTools and debugging. - [Day 30: Building and Publishing](https://www.appwriters.dev/30days/flutter/day30.md): Learn how to build and publish your Flutter app to the various platform app stores. Understand how to prepare your app for release, build your Flutter app for production, and prepare and publish your app. - [Before you begin](https://www.appwriters.dev/30days/flutter/before-you-begin.md): What to install and how to follow the challenge before day 1. - [What's next](https://www.appwriters.dev/30days/flutter/whats-next.md): Where to go after finishing the 30 days. ## Dart projects - [Projects overview](https://www.appwriters.dev/projects/dart): small command-line projects to learn Dart. - [Project 1: Temperature Converter](https://www.appwriters.dev/projects/dart/project1.md): Simple command line temperature converter in dart. This application, converts Celsius to Fahrenheit and vice versa. Dive into the breakdown of this fundamental coding project! - [Project 2: Calculator](https://www.appwriters.dev/projects/dart/project2.md): Discover how to build a simple arithmetic calculator with Dart. This step-by-step guide breaks down code into simple English, explaining user input, basic data types, and control structures in Dart. Suitable for beginners! - [Project 3: TODO List App](https://www.appwriters.dev/projects/dart/project3.md): Learn how to build a to-do list application in Dart. This step-by-step guide teaches you how to interact with the file system in Dart using dart:io, and manage a task list by adding, deleting, and viewing tasks. - [Project 4: Number guessing game](https://www.appwriters.dev/projects/dart/project4.md): Uncover the magic of Dart as we build a simple yet fun Number Guessing Game in our '30 projects in 30 days' challenge. We break down the code, explaining each section in plain English and using engaging analogies. Step into the world of user input, random number generation, and conditional statements! - [Project 5: Text Analyzer](https://www.appwriters.dev/projects/dart/project5.md): Join us on Day 5 of our "Building 30 Projects in Dart" series. In this post, we walk you through creating a Text Analyzer in Dart that counts the number of words, sentences, and paragraphs in a given text file, using simple English and illustrative analogies. - [Project 6: Password Generator](https://www.appwriters.dev/projects/dart/project6.md): Learn to build a simple yet powerful password generator in Dart. This step-by-step guide teaches you how to work with user input, generate random numbers, and manipulate strings in Dart. - [Project 7: Tic-Tac-Toe Game](https://www.appwriters.dev/projects/dart/project7.md): Join us in Day 7 of our Dart Projects series as we build a console-based Tic-Tac-Toe game using Dart. Learn about multi-dimensional lists, loops, conditionals, and user input through a fun, classic game. - [Project 8: Countdown Timer](https://www.appwriters.dev/projects/dart/project8.md): Dive into our guide on creating a countdown timer in Dart. This step-by-step tutorial simplifies the process and uses analogies to explain the code. Ideal for beginners and those looking to build practical Dart projects. - [Project 9: Hangman Game](https://www.appwriters.dev/projects/dart/project9.md): Learn to code a console-based Hangman game in Dart in our 9th day of the 30-day Dart programming challenge. This post breaks down the game development process into simple steps, perfect for beginners and intermediate learners alike. - [Project 10: File organizer](https://www.appwriters.dev/projects/dart/project10.md): Learn to write a script to organize your files automatically based on their types. This post breaks down the process into simple steps, perfect for beginners and intermediate learners alike. - [Project 11: Simple HTTP server](https://www.appwriters.dev/projects/dart/project11.md): Explore the basics of building a simple HTTP server in Dart. Perfect for beginners, this project of our 30-day coding challenge covers handling GET and POST requests, setting up a server, and testing it. Enhance your Dart skills and dive into web server development! - [Project 12: File size calculator](https://www.appwriters.dev/projects/dart/project12.md): Explore our step-by-step guide on creating a File Size Calculator in Dart. Perfect for junior developers, this blog post simplifies file system operations in Dart, covering everything from reading input to calculating file and directory sizes. - [Project 13: Password strength checker](https://www.appwriters.dev/projects/dart/project13.md): Explore our detailed blog post on creating a Password Strength Checker in Dart. Learn about Dart programming, regular expressions, and secure password practices step by step. - [Project 14: Typing speed test](https://www.appwriters.dev/projects/dart/project14.md): Explore our in-depth guide on creating a Dart program to test typing speed and accuracy. Perfect for beginners and experienced developers, this article breaks down each step of the program, offering insights into Dart syntax and functionality. - [Project 15: Fetch system information](https://www.appwriters.dev/projects/dart/project15.md): Discover how to fetch and display system information using Dart in our latest blog post. Ideal for Flutter developers, this guide breaks down a simple Dart program to understand system-level interactions and enhance your coding skills. ## Optional - [RSS feed](https://www.appwriters.dev/api/rss.xml): every blog post, newest first. - [Posts as JSON](https://www.appwriters.dev/api/posts.json): title, slug, excerpt, date and categories of recent posts. - [Sitemap](https://www.appwriters.dev/sitemap.xml) - [YouTube channel](https://youtube.com/@appwriters): videos for the course lessons and tutorials. - [GitHub](https://github.com/appwriters-dev): code for the courses and projects.