Skip to content
CAI
Software that uses CAICheck a score

TheAlphamerc/flutter_twitter_clone

66.1

Adequate · 23 September 2026

14.2k

lines of production code

Dart

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Flutter-based social networking application, specifically a Twitter clone, that manages user authentication, content creation, and real-time interactions. It provides features for posting and viewing tweets, direct messaging, and managing user profiles with follow/unfollow capabilities. The application integrates Firebase for backend services, including authentication, database, storage, and push notifications, while utilizing a state management architecture to handle app, feed, and chat states.

How it got here

2019 — Flutter Twitter Clone Implementation

15 changes.

The project was transformed from a default Flutter template into a fully functional Twitter clone application. This involved implementing core features such as authentication, state management, chat, and push notifications using Firebase, while modernizing the Android and iOS build configurations.

2020–2024 — comprehensive feature expansion

22 changes.

This period focused on building out the core social networking features of the application, including user authentication, messaging, and content creation. The work involved implementing new UI pages for feeds, profiles, and notifications, while also refactoring the tweet display logic into reusable components. Additionally, the codebase was stabilized with Android embedding fixes and initial test coverage.

Features

Add Google Sign-In Button to Authentication UI

A new GoogleLoginButton widget has been added to the authentication page, providing a styled button that triggers the Google sign-in flow. This component handles the authentication state, displays a loading indicator during the process, and manages navigation upon successful login.

lib/ui/page/Auth/widget · high confidence

Add QR code scanning and display for user profiles

A new QR code scanning interface has been added to the profile page. Users can now scan a QR code to navigate to another user's profile, or view and share their own QR code. This introduces a two-page view: the first page uses the camera to scan QR codes, while the second page displays the user's personal QR code, with a share option to save or send the image.

lib/ui/page/profile/qrCode · high confidence

Add TweetBaseState for tweet and comment management

A new \TweetBaseState\ class has been introduced in \lib/state/base/tweetBaseState.dart\. This class extends \AppState\ and provides methods for interacting with Firebase, including fetching tweet details, retrieving and sorting comments, deleting tweets, updating tweet data, managing like/unlike actions, creating new posts, and uploading images to Firebase Storage.

lib/state/base · high confidence

Add bookmark feature and app update enforcement

Users can now save and view their favorite tweets in a dedicated 'Bookmarks' section, accessible via the sidebar menu. The app also enforces version updates, redirecting users to an update screen if their installed version is no longer supported, ensuring compatibility with the latest app features and security standards.

lib/ui/page/common · high confidence

Add new messaging UI pages

The app now includes dedicated UI components for the messaging feature, including a chat list, individual chat screens, a new message interface, and conversation settings. Users can now view their message history, start new conversations, and access profile and block options for contacts.

lib/ui/page/message · high confidence

Add notification page to display user activity

A new NotificationPage has been added to the application, providing a dedicated view for user notifications. The page displays a list of notifications, distinguishing between follow notifications and post-like notifications, and handles empty states and loading conditions appropriately.

lib/ui/page/notification · high confidence

Add notification tiles for follows and post likes

The notification page now displays dedicated UI components for different notification types. A new FollowNotificationTile renders a user card with profile picture, display name, bio, and verification status when someone follows you. A new PostLikeTile displays avatars of users who liked your tweet, showing up to five avatars with a count for the rest, and includes a preview of the liked tweet's description. Both widgets are added to the notification widget directory to handle these specific notification events.

lib/ui/page/notification/widget · high confidence

The home page now subscribes to a PushNotificationService to handle incoming push notifications. When a message notification is received, the app navigates to the chat screen. When a mention notification is received, the app navigates to the specific tweet detail page. Additionally, the home page initializes Firebase Dynamic Links to handle deep links, routing users to either a user profile or a tweet detail page based on the link content.

lib/ui/page · medium confidence

Add user list widget for displaying user profiles

A new UserListWidget and UserTile component have been added to the common widget library. This widget renders a scrollable list of user profiles, displaying their avatar, display name, username, and bio. It also includes a follow/unfollow button that updates its state based on the current user's following list, allowing users to manage their connections directly from the list.

lib/ui/page/common/widget · high confidence

Added bottom navigation bar with custom tab icons and animations

A new bottom navigation bar has been introduced to the application, providing a persistent bottom menu for switching between key sections of the app. The implementation includes a custom HalfPainter for unique tab styling, a state-managed BottomMenubar widget that tracks the active page index, and a reusable TabItem component that handles the visual transition between selected and unselected states using animated icon and text alignment.

lib/widgets/bottomMenuBar · high confidence

Added compose tweet page with image upload and notification support

The app now includes a new ComposeTweetPage component that allows users to create new tweets, retweets, or comments. This feature supports attaching images which are uploaded to Firebase storage before the tweet is saved to the database. It also automatically detects and notifies users mentioned via @username tags. The implementation handles the full lifecycle of creating and posting tweets, including state management for scroll direction and image selection.

lib/ui/page/feed/composeTweet · medium confidence

Initialize Flutter Twitter Clone app with Firebase and state management

The application entry point has been completely refactored to support the Twitter clone functionality. The previous default Flutter counter app was replaced with a full application setup that initializes Firebase, sets up dependency injection via a locator, and configures a Material app with multiple state management providers (AppState, AuthState, FeedState, ChatState, SearchState, NotificationState, and SuggestionsState). The app now uses custom routes and a splash screen as the initial page, integrating Google Fonts for the UI theme.

lib · high confidence

Introduce chat state management and messaging logic

Added the \ChatState\ class to manage chat-related data and logic, including fetching and sorting the list of users with chat history, retrieving chat messages, and handling the submission of new messages to the database.

lib/state/chats · high confidence

Added three new widgets in the \lib/widgets/url\_text\ directory: \customUrlText.dart\ parses text to render clickable hashtags and URLs; \custom\_link\_media\_info.dart\ fetches and displays link metadata (title, thumbnail) from an external API, with special handling for YouTube thumbnails; \link\_preview.dart\ provides a placeholder for link previews, with the original \link\_preview\_generator\ implementation commented out.

_lib/widgets/url\text · high confidence

Introduce helper utilities and routing infrastructure

The application now includes a new \lib/helper\ directory containing core support files. \customRoute.dart\ defines \CustomRoute\ and \SlideLeftRoute\ classes to provide fade and slide transition effects for page navigation. \routes.dart\ establishes the application's navigation map, linking named routes to their respective UI pages. \utility.dart\ provides shared functions for date formatting, URL launching, and logging. \shared\_prefrence\_helper.dart\ manages local storage of user profiles and media info. \enum.dart\ defines status and type enumerations, while \constant.dart\ and \validator.dart\ provide static assets and form validation logic.

lib/helper · high confidence

Introduce new compose tweet UI components

Added three new widgets to the feed compose screen: ComposeBottomIconWidget, which provides the bottom toolbar with image/camera selection and a 280-character limit indicator; ComposeTweetImage, which displays a selected image with a close button; and WidgetView, a generic base class for widget views.

lib/ui/page/feed/composeTweet/widget · high confidence

Introduce state management classes for app, auth, feed, notifications, profile, search, and bookmarks

The application now uses dedicated state management classes (AppState, AuthState, FeedState, NotificationState, ProfileState, SearchState, and BookmarkState) to handle data and logic for each feature area. This change introduces a new state management architecture where each feature has its own state class responsible for interacting with the Firebase database and managing local data. For example, AuthState handles login, logout, and Google sign-in; FeedState manages the tweet feed and comments; NotificationState handles real-time updates for notifications; and ProfileState manages user profile data and follow/unfollow logic. This separation of concerns allows for better organization and scalability of the application's state.

lib/state · high confidence

Introduced new authentication and account management screens

Added new UI pages for user authentication and account management, including a welcome/landing page, sign-in and sign-up forms, an email verification screen, and a password recovery flow. These components provide the complete front-end interface for user onboarding, login, and account security.

lib/ui/page/Auth · high confidence

Introduces new data models and a push notification service

Adds new model classes for bookmarks, chat messages, feed items, link media info, notifications, push notifications, and users, each providing JSON serialization and deserialization. Introduces a new PushNotificationService that manages Firebase Cloud Messaging events, exposing a stream of PushNotificationModel objects for handling foreground, background, and launch-time notifications.

lib/model · high confidence

New feed and user suggestion pages

The app introduces new UI components for the main feed and user discovery. The FeedPage now displays a scrollable list of tweets with a floating action button to create new posts, while the FeedPostDetail page handles the display of individual tweet threads and replies. Additionally, a SuggestedUsers page has been added to allow users to browse and follow recommended accounts, featuring a bottom bar to confirm selections. These changes implement the core social networking features of viewing and interacting with content and other users.

lib/ui/page/feed · high confidence

New profile management screens and follow/unfollow logic

The app introduces dedicated pages for editing a user's profile (name, bio, location, date of birth, and profile/banner images) and viewing followers and following lists. A new state management class handles the logic for following and unfollowing users, updating the local state and database accordingly. Additionally, a new screen allows users to view profile images in full size with options to share, open in a browser, or save the image.

lib/ui/page/profile · high confidence

New reusable UI components for the app interface

Added several new widget classes to the lib/widgets directory to standardize the user interface. This includes a custom app bar with search and action button support, a flat button component with loading state handling, a share widget for capturing and sharing content as images, and utility widgets for text, icons, and loading indicators.

lib/widgets · high confidence

New reusable UI widget components

Added a set of new reusable widgets in lib/widgets/newWidget: a custom checkbox/switch, a wavy header clipper, a screen loader overlay, a rounded progress bar, an empty list placeholder, a ripple-effect button, and a title text widget. These components provide consistent styling and interaction patterns across the app.

lib/widgets/newWidget · high confidence

New settings and privacy management screens

The app introduces a comprehensive set of new settings pages, including Account, Privacy and Safety, Notifications, Content Preferences, Display and Sound, Data Usage, Accessibility, and Proxy configurations. These screens allow users to manage their profile information, control content visibility, adjust display and sound preferences, manage data usage and sync, configure notification filters, and set up network proxies.

lib/ui/page/settings · high confidence

Updated project documentation and configuration files

The repository's README has been significantly expanded to include a feature list, download links, dependency information, and extensive UI screenshots. Additionally, new files have been added to the project root: a CHANGELOG.md documenting version history, a CONTRIBUTING.md guide for open-source contributors, an MIT LICENSE file, and an analysis\_options.yaml for Dart/Flutter static analysis. The .gitignore file has also been updated to exclude sensitive configuration files like google-services.json and key.jks.

(repo-wide) · high confidence

iOS app configured for Firebase and camera access

The iOS application now initializes Firebase via FirebaseApp.configure() in the AppDelegate, enabling Firebase services on the platform. Additionally, Info.plist has been updated with usage descriptions for the photo library, microphone, and camera, and includes a URL scheme configuration for Google services, allowing the app to request necessary permissions and handle deep links.

ios/Runner · high confidence

Behavioural changes

Centralized UI theme, iconography, and text styles

The UI theme has been reorganized into a dedicated \lib/ui/theme\ directory, consolidating color definitions, icon mappings, and text styles into separate, modular files. This change introduces a unified \AppTheme\ configuration for the light theme, defines a comprehensive set of \AppIcon\ glyphs for the 'TwitterIcon' font family, and standardizes typography via \TextStyles\. These components are now part of a cohesive theme system that controls the visual appearance of the application's user interface.

lib/ui/theme · high confidence

Refactor tweet UI into dedicated widget components

The tweet display logic has been refactored into separate, reusable widgets: \ParentTweetWidget\ for displaying parent tweets, \RetweetWidget\ for retweets, \TweetBottomSheet\ for the tweet action menu, \TweetIconsRow\ for engagement buttons, \TweetImage\ for media, \TweetTranslation\ for automatic translations, and \UnavailableTweet\ for missing content. This modularizes the tweet interface, separating concerns for better maintainability and consistent rendering across the feed and detail views.

lib/widgets/tweet/widgets · high confidence

Refactored Tweet widget into a reusable component

The tweet display logic has been consolidated into a new, dedicated \Tweet\ widget located at \lib/widgets/tweet/tweet.dart\. This change replaces the previous scattered implementation with a single, reusable component that handles the rendering of tweet content, user profiles, and associated actions. Users will experience a more consistent and maintainable tweet display across the application, with improved code structure for features like retweets, image previews, and interaction handling.

lib/widgets/tweet · high confidence

Removed deprecated Android MainActivity boilerplate

The custom Android MainActivity class, which extended FlutterActivity and manually registered plugins, has been removed. This change aligns the Android project with modern Flutter standards, eliminating the need for manual plugin registration and resolving issues related to deprecated Gradle plugins.

android/app/src/main/java · medium confidence

Upgraded Gradle wrapper to version 7.6.3

The Android build system now uses Gradle 7.6.3 instead of the previous 4.10.2. This update aligns the project with modern Android/Flutter tooling requirements and resolves compatibility issues with newer versions of the Flutter Gradle plugin.

android/gradle · high confidence

iOS build system updated to support CocoaPods and Firebase

The iOS project configuration has been updated to integrate Firebase, as evidenced by the addition of GoogleService-Info.plist and related build references. The Xcode project file (project.pbxproj) has been upgraded to object version 54 (corresponding to Xcode 13), and the workspace has been configured to include the Pods directory, enabling CocoaPods dependency management. Additionally, build phases now include scripts for checking and embedding Pods frameworks, replacing the previous manual framework embedding approach.

ios/Runner.xcodeproj · high confidence

iOS minimum deployment target raised and build configuration updated

The iOS minimum OS version requirement has been increased from 8.0 to 11.0, meaning the app will no longer support devices running older iOS versions. Additionally, the build configuration files (Debug.xcconfig and Release.xcconfig) have been updated to include the generated Pods support files, which is necessary for managing CocoaPods dependencies.

ios/Flutter · high confidence

Fixes

Add Android MainActivity for Flutter embedding

The Android application now includes a new MainActivity class that extends FlutterActivity, which is required for the Flutter engine to properly host the Flutter view on Android. This change aligns the Android side of the app with modern Flutter embedding requirements, ensuring the app launches correctly on Android devices.

android/app/src/main/kotlin · high confidence

Test coverage

Added initial iOS unit test scaffold; Added unit tests for utility functions.

Dependencies

Updated iOS and Android build configurations and dependencies

The project's build system has been modernized to use the new Android Gradle plugin (AGP) 7.3.0 and the Flutter Gradle plugin, replacing the legacy \apply plugin\ syntax with the \plugins {}\ block. The Android \build.gradle\ file now uses the namespace property and references Flutter's compile SDK and NDK versions, while the \settings.gradle\ file has been updated to include the Flutter plugin loader and Google Services plugin. On the iOS side, a new \Podfile\ has been added to configure CocoaPods with the Flutter SDK and enable modular headers. Additionally, the \pubspec.yaml\ has been updated to include a wide range of new dependencies (such as Firebase, provider, and image\_picker) and assets, and the Dart SDK constraint has been raised to \\>=2.12.0\ to support null safety.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 55 → 66 (+11.2)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 92 (-7.8)
  • Architecture 100 → 99 (-0.8)
  • Maturity 38 → 50 (+12.3)
  • Readiness 47 → 64 (+16.9)
  • Security 81 → 95 (+14.3)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (10)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • High CVE: [GHSA redacted] (pubspec.lock)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No exposed public API
  • Test reliability not included
  • complexity unreadable for .dart — churn × complexity hotspots could not be measured
  • dormant codebase — no living knowledge left to concentrate

New (66)

  • AuthState.getProfileUser (cognitive 20) (lib/state/authState.dart)
  • BookmarkState.getDataFromDatabase (cognitive 20) (lib/state/bookmarkState.dart)
  • ChatState.getUserChatList (cognitive 17) (lib/state/chats/chatState.dart)
  • ClassTooLong: FeedState (lib/state/feedState.dart)
  • ClassTooLong: TweetBottomSheet (lib/widgets/tweet/widgets/tweetBottomSheet.dart)
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no contributor guidance (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (12 lines × 2) (lib/ui/page/feed/composeTweet/composeTweet.dart)
  • Duplicated block (12 lines × 3) (lib/ui/page/settings/accountSettings/accessibility/accessibility.dart)
  • Duplicated block (12–13 lines × 3) (lib/ui/page/settings/accountSettings/contentPrefrences/contentPreference.dart)
  • Duplicated block (12–14 lines × 3) (lib/widgets/tweet/widgets/tweetBottomSheet.dart)
  • Duplicated block (13–14 lines × 2) (lib/ui/page/Auth/forgetPasswordPage.dart)
  • Duplicated block (14–15 lines × 2) (lib/ui/page/feed/composeTweet/composeTweet.dart)
  • Duplicated block (15 lines × 2) (lib/ui/page/common/sidebar.dart)
  • Duplicated block (15 lines × 2) (lib/widgets/tweet/widgets/tweetBottomSheet.dart)
  • Duplicated block (15–16 lines × 2) (lib/ui/page/profile/follow/followerListPage.dart)
  • Duplicated block (15–16 lines × 2) (lib/widgets/tweet/widgets/parentTweet.dart)
  • Duplicated block (16 lines × 2) (lib/ui/page/bookmark/bookmarkPage.dart)
  • …and 46 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

TheAlphamerc/flutter_twitter_clone was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 23 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 9e8defdebefa10590b0ac305ec1d9aac936f0d4c — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-955b9cee9818.