Skip to main content
RapidDev - Software Development Agency
flutterflow-tutorials

How to Build a Pet Care App with Reminders and Records in FlutterFlow

Build a pet management app where each user can register multiple pets with profiles including species, breed, birth date, and weight. Each pet has a medical_records subcollection for vaccinations, checkups, and medications displayed as a timeline ListView. A reminders subcollection tracks feeding, medication, vet visits, and grooming with recurring schedules. A Cloud Function checks due reminders daily and sends push notifications. Multi-pet support uses a TabBar or horizontal scroll to switch between pets.

What you'll learn

  • How to model pets with medical records and reminders as Firestore subcollections
  • How to display medical history as a timeline ListView with document attachments
  • How to schedule recurring reminders with Cloud Function push notifications
  • How to support multiple pets with a TabBar selector interface
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Beginner8 min read30-40 minFlutterFlow Free+March 2026RapidDev Engineering Team
TL;DR

Build a pet management app where each user can register multiple pets with profiles including species, breed, birth date, and weight. Each pet has a medical_records subcollection for vaccinations, checkups, and medications displayed as a timeline ListView. A reminders subcollection tracks feeding, medication, vet visits, and grooming with recurring schedules. A Cloud Function checks due reminders daily and sends push notifications. Multi-pet support uses a TabBar or horizontal scroll to switch between pets.

Building a Pet Care Management App in FlutterFlow

This tutorial creates a comprehensive pet care app for pet owners to track their animals' health, schedule reminders, and maintain medical records. Each pet has a profile with calculated age, a weight history chart, and a medical timeline. Reminders ensure owners never miss feeding times, medications, or vet appointments. The app supports multiple pets per user. This pattern is useful for pet care businesses, veterinary clinics, and individual pet owners.

Prerequisites

  • A FlutterFlow project with Firestore and Firebase Cloud Messaging configured
  • Basic understanding of subcollections and Backend Queries in FlutterFlow
  • A Firebase project with Cloud Functions enabled (Blaze plan) for notifications
  • Familiarity with TabBar and ListView in FlutterFlow

Step-by-step guide

1

Create the Firestore data model for pets, medical records, and reminders

Create a pets collection with fields: userId (String), name (String), species (String: dog, cat, bird, other), breed (String), birthDate (Timestamp), weight (double), photoUrl (String). Under each pet, create a medical_records subcollection with fields: type (String: vaccination, checkup, surgery, medication), title (String), date (Timestamp), vetName (String), notes (String), documentUrl (String, for PDF or image attachments). Create a reminders subcollection with fields: title (String), type (String: feeding, medication, vet_visit, grooming), recurringSchedule (String: daily, weekly, monthly), nextDueDate (Timestamp), isActive (bool). Add 2-3 sample pets with varied records.

Expected result: Firestore has pets with medical_records and reminders subcollections ready for the app.

2

Build the multi-pet selector and pet profile page

Create a PetsPage. Query the pets collection filtered by userId equals current user. Display pets in a horizontal ScrollView or TabBar at the top, each tab showing the pet photo and name. Below, show the selected pet's profile: CircleImage for the photo with a camera overlay icon for updating via FlutterFlowUploadButton, the pet name, species and breed Text, calculated age using a Custom Function that returns 'X years Y months' from birthDate (handling pets under 1 year as 'X months'), and current weight. Add an Edit button that toggles between display Text and editable TextFields for name, breed, and weight. Include an Add Pet button in the TabBar that opens a form for registering a new pet.

Expected result: Users can switch between pets via tabs and view or edit each pet's profile with calculated age.

3

Display medical records as a timeline ListView

Below the pet profile, add a Medical Records section. Query the medical_records subcollection for the selected pet, ordered by date descending. Display records in a ListView styled as a timeline: each item shows a vertical line on the left with a colored dot (green for vaccination, blue for checkup, red for surgery, orange for medication), the date, title, vet name, and a truncated notes preview. Tap a record to expand or navigate to a detail view showing full notes and an attached document (Image or PDF viewer). Add a floating action button to create a new medical record with fields for type DropDown, title, date DateTimePicker, vet name, notes, and a FlutterFlowUploadButton for document attachments.

Expected result: Medical records display as a color-coded timeline with expandable details and document attachments.

4

Build the reminders system with recurring schedules

Add a Reminders tab or section on the pet profile page. Query the reminders subcollection where isActive equals true, ordered by nextDueDate ascending. Display each reminder in a Card showing the title, type icon (food bowl for feeding, pill for medication, stethoscope for vet_visit, scissors for grooming), next due date, and recurring schedule label. Color the card amber if the due date is today, red if overdue. Add a Switch to toggle isActive. To create a new reminder, open a form with title TextField, type DropDown, recurringSchedule DropDown (daily, weekly, monthly), and starting date DateTimePicker.

Expected result: Active reminders display sorted by due date with visual indicators for overdue and due-today items.

5

Set up Cloud Function push notifications for due reminders

Create a scheduled Cloud Function that runs daily at 8 AM. The function queries all reminders where nextDueDate is today or earlier and isActive is true. For each due reminder, it looks up the pet name and owner's FCM token, sends a push notification with the message 'Time for [pet name]'s [reminder title]', and then updates nextDueDate based on the recurringSchedule: for daily add 1 day, for weekly add 7 days, for monthly add 1 month. In FlutterFlow, ensure push notifications are enabled in Settings and the user's FCM token is stored on their user document.

checkPetReminders.js
1// Cloud Function: checkPetReminders (scheduled daily)
2const functions = require('firebase-functions');
3const admin = require('firebase-admin');
4admin.initializeApp();
5
6exports.checkPetReminders = functions.pubsub
7 .schedule('0 8 * * *')
8 .onRun(async () => {
9 const now = admin.firestore.Timestamp.now();
10 const petsSnap = await admin.firestore().collection('pets').get();
11
12 for (const petDoc of petsSnap.docs) {
13 const reminders = await petDoc.ref
14 .collection('reminders')
15 .where('isActive', '==', true)
16 .where('nextDueDate', '<=', now)
17 .get();
18
19 for (const rem of reminders.docs) {
20 const pet = petDoc.data();
21 const userDoc = await admin.firestore()
22 .collection('users').doc(pet.userId).get();
23 const fcmToken = userDoc.data().fcmToken;
24
25 if (fcmToken) {
26 await admin.messaging().send({
27 token: fcmToken,
28 notification: {
29 title: `${pet.name} Reminder`,
30 body: `Time for ${pet.name}'s ${rem.data().title}`,
31 },
32 });
33 }
34
35 // Update nextDueDate based on schedule
36 const schedule = rem.data().recurringSchedule;
37 const next = rem.data().nextDueDate.toDate();
38 if (schedule === 'daily') next.setDate(next.getDate() + 1);
39 else if (schedule === 'weekly') next.setDate(next.getDate() + 7);
40 else if (schedule === 'monthly') next.setMonth(next.getMonth() + 1);
41 await rem.ref.update({ nextDueDate: admin.firestore.Timestamp.fromDate(next) });
42 }
43 }
44 });

Expected result: Pet owners receive daily push notifications for due reminders, and next due dates auto-advance.

Complete working example

FlutterFlow Pet Care App Setup
1FIRESTORE DATA MODEL:
2 pets/{petId}
3 userId: String
4 name: String
5 species: String (dog / cat / bird / other)
6 breed: String
7 birthDate: Timestamp
8 weight: double
9 photoUrl: String
10 medical_records/{recordId}
11 type: String (vaccination / checkup / surgery / medication)
12 title: String
13 date: Timestamp
14 vetName: String
15 notes: String
16 documentUrl: String
17 reminders/{reminderId}
18 title: String
19 type: String (feeding / medication / vet_visit / grooming)
20 recurringSchedule: String (daily / weekly / monthly)
21 nextDueDate: Timestamp
22 isActive: bool
23
24PAGE: PetsPage
25 Backend Query: pets where userId == currentUser
26 Page State: selectedPetIndex (int)
27
28 WIDGET TREE:
29 Column
30 TabBar / Horizontal ScrollView (pet selector)
31 Per pet: CircleImage (photo) + Text (name)
32 Pet Profile Card
33 CircleImage (photo, tap upload new)
34 Text (name, species, breed)
35 Text (age: Custom Function from birthDate)
36 Text (weight: "12.5 kg")
37 Section: Medical Records
38 Text ("Medical History")
39 ListView (medical_records, orderBy date desc)
40 Timeline item:
41 Row
42 Column (vertical line + colored dot)
43 Column (date, title, vet, notes preview)
44 Section: Reminders
45 Text ("Reminders")
46 ListView (reminders, where isActive, orderBy nextDueDate)
47 Card (type icon + title + due date + schedule)
48 Amber if due today, Red if overdue
49 FAB (+) Add Record / Add Reminder bottom sheet
50
51CUSTOM FUNCTION: calculatePetAge(birthDate)
52 diff = now - birthDate
53 years = diff.inDays ~/ 365
54 months = (diff.inDays % 365) ~/ 30
55 if years == 0: return "$months months"
56 return "$years years $months months"

Common mistakes when building a Pet Care App with Reminders and Records in FlutterFlow

Why it's a problem: Calculating pet age as a simple year difference from birthDate

How to avoid: Use a Custom Function that returns 'X years Y months' for older pets and 'X months' for pets under one year.

Why it's a problem: Storing all medical records as fields on the pet document instead of a subcollection

How to avoid: Use a medical_records subcollection under each pet document for scalable, queryable storage.

Why it's a problem: Not updating nextDueDate after sending a reminder notification

How to avoid: After sending the notification, always update nextDueDate by adding the appropriate interval based on recurringSchedule.

Best practices

  • Use subcollections for medical records and reminders to keep pet documents lightweight
  • Calculate pet age with a Custom Function that handles both months and years
  • Color-code medical record types in the timeline for quick visual scanning
  • Sort reminders by nextDueDate ascending so the most urgent items appear first
  • Store medical document attachments in Firebase Storage with download URLs in Firestore
  • Run reminder checks via a scheduled Cloud Function rather than client-side timers
  • Support multiple pets per user with a clear tab-based or scroll-based selector

Still stuck?

Copy one of these prompts to get a personalized, step-by-step explanation.

ChatGPT Prompt

I want to build a pet care management app in FlutterFlow with multi-pet support, pet profiles with calculated age, a medical records timeline using Firestore subcollections, and recurring reminders with push notifications via Cloud Functions. Give me the data model, widget tree, age calculation function, and notification Cloud Function.

FlutterFlow Prompt

Create a pet profile page with a horizontal pet selector at the top showing pet photos and names, a profile card below with photo, name, species, breed, age, and weight, a medical records timeline section with colored dots and dates, and a reminders section with due date cards.

Frequently asked questions

Can I track weight history with a chart?

Yes. Add a weight_history subcollection with weight and date fields. Each time the owner updates weight, create a new entry. Display the history as a LineChart Custom Widget using the fl_chart package.

How do I handle pets with unknown birth dates?

Make birthDate optional. When it is empty, display 'Age unknown' instead of calculating. Allow the owner to enter an estimated birth year instead of an exact date.

Can I share a pet profile with a veterinarian?

Yes. Generate a read-only share link using a Cloud Function that creates a temporary access token. The vet can view the pet profile and medical records without needing an account.

How do I attach PDF documents to medical records?

Use a FlutterFlowUploadButton configured for file upload. Upload the PDF to Firebase Storage and save the download URL in the documentUrl field. Display it with a Custom Widget PDF viewer or Launch URL to open externally.

Can the app support exotic pets like reptiles or fish?

Yes. The species field is a String, so you can add any value. Consider adding species-specific reminder types like 'tank cleaning' for fish or 'heat lamp check' for reptiles as custom options.

Can RapidDev help build a veterinary practice management system?

Yes. RapidDev can build complete vet practice platforms with patient records, appointment scheduling, billing, prescription management, and multi-clinic support.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Need help with your project?

Our experts have built 600+ apps and can accelerate your development. Book a free consultation — no strings attached.

Book a free consultation

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.