Learn Flutterflow - 10 Code Examples & CST Typing Practice Test
FlutterFlow is a low-code visual app builder that enables users to create native iOS, Android, and web applications using a drag-and-drop interface, powered by Google’s Flutter framework.
Learn FLUTTERFLOW with Real Code Examples
Updated Nov 23, 2025
Code Sample Descriptions
FlutterFlow Simple Todo App
// Dart code example generated by FlutterFlow
import 'package:flutter/material.dart';
class TodoApp extends StatefulWidget {
@override
_TodoAppState createState() => _TodoAppState();
}
class _TodoAppState extends State<TodoApp> {
final List<String> todos = [];
final TextEditingController controller = TextEditingController();
void addTodo() {
if(controller.text.trim().isNotEmpty) {
setState(() { todos.add(controller.text.trim()); });
controller.clear();
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Todo App')),
body: Column(
children: [
TextField(controller: controller, decoration: InputDecoration(hintText: 'New Todo')),
ElevatedButton(onPressed: addTodo, child: Text('Add')),
Expanded(
child: ListView.builder(
itemCount: todos.length,
itemBuilder: (context, index) => ListTile(title: Text(todos[index])),
),
),
],
),
);
}
}
Demonstrates a simple FlutterFlow app with a Todo list, adding tasks, and displaying them using visual components with optional custom Dart logic.
FlutterFlow Expense Tracker
import 'package:flutter/material.dart';
class ExpenseTracker extends StatefulWidget {
@override
_ExpenseTrackerState createState() => _ExpenseTrackerState();
}
class _ExpenseTrackerState extends State<ExpenseTracker> {
final List<Map<String, dynamic>> expenses = [];
final TextEditingController desc = TextEditingController();
final TextEditingController amount = TextEditingController();
double get total => expenses.fold(0, (sum, e) => sum + e['amount']);
void addExpense() {
if(desc.text.isNotEmpty && amount.text.isNotEmpty) {
setState(() {
expenses.add({'desc': desc.text, 'amount': double.parse(amount.text)});
desc.clear();
amount.clear();
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Expense Tracker')),
body: Column(
children: [
TextField(controller: desc, decoration: InputDecoration(hintText: 'Description')),
TextField(controller: amount, keyboardType: TextInputType.number, decoration: InputDecoration(hintText: 'Amount')),
ElevatedButton(onPressed: addExpense, child: Text('Add Expense')),
Text('Total: $' + total.toStringAsFixed(2)),
Expanded(
child: ListView.builder(
itemCount: expenses.length,
itemBuilder: (context, index) => ListTile(title: Text(expenses[index]['desc']), trailing: Text('$' + expenses[index]['amount'].toString())),
),
),
],
),
);
}
}
Tracks expenses with visual input fields and lists in FlutterFlow, enhanced with custom Dart code for managing total sums.
FlutterFlow Notes App
import 'package:flutter/material.dart';
class NotesApp extends StatefulWidget {
@override
_NotesAppState createState() => _NotesAppState();
}
class _NotesAppState extends State<NotesApp> {
final List<String> notes = [];
final controller = TextEditingController();
void addNote() {
if(controller.text.isNotEmpty){
setState(() => notes.add(controller.text));
controller.clear();
}
}
@override
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(title: Text('Notes')),
body: Column(
children:[
TextField(controller: controller, decoration: InputDecoration(hintText: 'Write note')),
ElevatedButton(onPressed: addNote, child: Text('Add')),
Expanded(child: ListView(children: notes.map((n)=>ListTile(title: Text(n))).toList())),
]
)
);
}
}
A simple note-taking app using FlutterFlow's visual ListView and custom Dart state logic.
FlutterFlow Habit Tracker
import 'package:flutter/material.dart';
class HabitTracker extends StatefulWidget {
@override
_HabitTrackerState createState() => _HabitTrackerState();
}
class _HabitTrackerState extends State<HabitTracker> {
List<Map<String, dynamic>> habits = [
{'title': 'Drink Water', 'done': false},
{'title': 'Exercise', 'done': false}
];
void toggleHabit(int i){
setState(()=> habits[i]['done'] = !habits[i]['done']);
}
@override
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(title: Text('Habit Tracker')),
body: ListView.builder(
itemCount: habits.length,
itemBuilder: (c,i)=>CheckboxListTile(
title: Text(habits[i]['title']),
value: habits[i]['done'],
onChanged: (_) => toggleHabit(i),
)
)
);
}
}
Tracks daily habits with checkboxes and FlutterFlow toggle widgets, combined with custom Dart logic.
FlutterFlow Weather App
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
class WeatherApp extends StatefulWidget {
@override
_WeatherAppState createState() => _WeatherAppState();
}
class _WeatherAppState extends State<WeatherApp> {
final controller = TextEditingController();
Map<String, dynamic>? weather;
Future<void> fetchWeather() async {
final res = await http.get(Uri.parse('https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=${controller.text}'));
setState(()=>weather=jsonDecode(res.body));
}
@override
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(title: Text('Weather App')),
body: Column(children:[
TextField(controller: controller, decoration: InputDecoration(hintText:'Enter City')),
ElevatedButton(onPressed: fetchWeather, child: Text('Search')),
if(weather!=null) Text('Temp: '+weather!['current']['temp_c'].toString()+'°C')
])
);
}
}
Fetches weather data using an API and displays it using FlutterFlow visual widgets.
FlutterFlow Recipe App
import 'package:flutter/material.dart';
class RecipeApp extends StatefulWidget {
@override
_RecipeAppState createState() => _RecipeAppState();
}
class _RecipeAppState extends State<RecipeApp> {
final recipes = <String>[];
final controller = TextEditingController();
void addRecipe(){
if(controller.text.isNotEmpty){
setState(()=>recipes.add(controller.text));
controller.clear();
}
}
@override
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(title: Text('Recipe App')),
body: Column(children:[
TextField(controller: controller, decoration: InputDecoration(hintText:'Recipe name')),
ElevatedButton(onPressed: addRecipe, child: Text('Add')),
Expanded(child: ListView(children: recipes.map((r)=>Card(child:ListTile(title:Text(r)))).toList())),
])
);
}
}
Manages a list of favorite recipes and displays them using FlutterFlow's ListView and Cards.
FlutterFlow Login Screen
import 'package:flutter/material.dart';
class LoginScreen extends StatefulWidget {
@override
_LoginScreenState createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
final email = TextEditingController();
final pass = TextEditingController();
void login(){
if(email.text.isEmpty || pass.text.isEmpty){
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Fill all fields')));
}else{
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Login Success')));
}
}
@override
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(title: Text('Login')),
body: Padding(
padding: EdgeInsets.all(16),
child: Column(children:[
TextField(controller: email, decoration: InputDecoration(labelText:'Email')),
TextField(controller: pass, obscureText: true, decoration: InputDecoration(labelText:'Password')),
ElevatedButton(onPressed: login, child: Text('Login')),
])
)
);
}
}
Demonstrates a simple login UI in FlutterFlow with custom Dart validation logic.
FlutterFlow Counter App
import 'package:flutter/material.dart';
class CounterApp extends StatefulWidget {
@override
_CounterAppState createState() => _CounterAppState();
}
class _CounterAppState extends State<CounterApp> {
int count = 0;
@override
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(title: Text('Counter')),
body: Center(
child: Column(mainAxisAlignment: MainAxisAlignment.center, children:[
Text('Count: '+count.toString(), style: TextStyle(fontSize: 24)),
ElevatedButton(onPressed: ()=>setState(()=>count++), child: Text('Increment')),
ElevatedButton(onPressed: ()=>setState(()=>count--), child: Text('Decrement')),
])
)
);
}
}
A basic counter app example using FlutterFlow and custom Dart state logic.
FlutterFlow Chat Screen
import 'package:flutter/material.dart';
class ChatScreen extends StatefulWidget {
@override
_ChatScreenState createState() => _ChatScreenState();
}
class _ChatScreenState extends State<ChatScreen> {
final List<String> messages = [];
final controller = TextEditingController();
void sendMessage(){
if(controller.text.isNotEmpty){
setState(()=>messages.add(controller.text));
controller.clear();
}
}
@override
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(title: Text('Chat')),
body: Column(children:[
Expanded(child: ListView(children: messages.map((m)=>ListTile(title:Text(m))).toList())),
Row(children:[
Expanded(child: TextField(controller: controller, decoration: InputDecoration(hintText:'Message'))),
IconButton(icon: Icon(Icons.send), onPressed: sendMessage)
])
])
);
}
}
Simple chat UI showing how to send and display messages using FlutterFlow visual components.
FlutterFlow Shopping Cart
import 'package:flutter/material.dart';
class ShoppingCart extends StatefulWidget {
@override
_ShoppingCartState createState() => _ShoppingCartState();
}
class _ShoppingCartState extends State<ShoppingCart> {
final List<String> cart = [];
final TextEditingController controller = TextEditingController();
void addItem(){
if(controller.text.isNotEmpty){
setState(()=>cart.add(controller.text));
controller.clear();
}
}
void removeItem(int i){
setState(()=>cart.removeAt(i));
}
@override
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(title: Text('Shopping Cart')),
body: Column(children:[
TextField(controller: controller, decoration: InputDecoration(hintText:'Add Item')),
ElevatedButton(onPressed: addItem, child: Text('Add')),
Expanded(child: ListView.builder(
itemCount: cart.length,
itemBuilder: (c,i)=>ListTile(title:Text(cart[i]), trailing: IconButton(icon:Icon(Icons.delete), onPressed:()=>removeItem(i)))
))
])
);
}
}
Demonstrates adding and removing items in a shopping cart using FlutterFlow visual elements and Dart state.
Frequently Asked Questions about Flutterflow
What is Flutterflow?
FlutterFlow is a low-code visual app builder that enables users to create native iOS, Android, and web applications using a drag-and-drop interface, powered by Google’s Flutter framework.
What are the primary use cases for Flutterflow?
Cross-platform mobile apps. Startup MVPs and prototypes. SaaS and dashboard apps. Internal tools and admin panels. Apps with Firebase or API-based backends
What are the strengths of Flutterflow?
Generates production-ready Flutter code. Full cross-platform support. Easy Firebase & API integration. Fast prototyping with real-time preview. Supports custom code when needed
What are the limitations of Flutterflow?
Advanced logic may require custom code. Complex UI might become cluttered in visual editor. Some Flutter plugins are unsupported. Performance depends on widget tree complexity. Higher-tier features require paid plans
How can I practice Flutterflow typing speed?
CodeSpeedTest offers 10+ real Flutterflow code examples for typing practice. You can measure your WPM, track accuracy, and improve your coding speed with guided exercises.