Skip to main content

8 More Flutter Widgets You’re Probably Not Using (But Should Be)

· 38 min read
Majid Hajian
Developer Advocate

Cover

It never ceases to amaze me how Flutter continues to surprise developers with its depth and versatility. Even after years of working with this framework, there are still widgets hiding in plain sight that solve very specific problems elegantly.

I recently demonstrated a set of 10 widgets in a lightning talk at FlutterCon as a DCM advocate, where I showcased several niche but incredibly useful widgets. After the talk, I decided to turn it into an in-depth and more detailed blog post about these widgets. Like my previous article on 10 Flutter widgets you probably haven't heard of (But you should be using), I went into the source code to understand not just how to use these widgets, but also how they work under the hood.

Before we start, all examples and source code of this blog has been posted to this repo which was created for Navigating the Hard Parts of Testing in Flutter article.

Now, let's uncover these widgets together!

Getting Started with Flutter Lint and Static Analysis

· 16 min read
Majid Hajian
Developer Advocate

Cover

Static analysis in Flutter (and Dart) is the process of examining code for errors and style issues without running the app. It allows you to catch bugs and enforce best practices early, before executing a single line of code.

Adopting static analysis represents a fundamental "shift left" in the software development lifecycle (SDLC). This philosophy advocates for moving quality assurance and testing activities to the earliest possible stages of development.

Linting is a subset of static analysis that focuses on style and best-practice rules. Flutter’s analysis tool (often called the Dart/Flutter analyzer) uses a set of rules (called lints) to ensure your code follows the Dart style guide and Effective Dart recommendations.

This guide will walk you through setting up and mastering Flutter's linting and static analysis capabilities, from the basics to advanced configurations.

What’s new in DCM 1.32.0

· 13 min read

Cover

With a little delay, we are excited to announce the release of DCM 1.32.0!

This release includes 12 new rules, 21 new quick fix, optimized memory consumption for remaining DCM commands, improved support for pubspec rules across all DCM features, new metrics config to pass multiple thresholds for different paths, new "unset" metric threshold, new role for accessing only a selected number of projects in DCM Dashboards and improved UX for adding new seats to your subscription, and more!

Let’s go through the highlights of this release (and the full list of changes is in our changelog)!

Let Your AI Assistant Tame Your Tech Debt (with Dart, Flutter and DCM MCP Servers)

· 24 min read
Majid Hajian
Developer Advocate

Cover

AI code generation is creating technical debt faster than ever before. Every AI-suggested shortcut, style inconsistency, and missed best practice taxes your team weeks later. Quality is no longer just a periodic check; it's a continuous, automated loop needed to keep a codebase sane

AI Assistants and Agents can orchestrate the quality loop end-to-end, which boosts velocity and more importantly consistency. The key is integration: when your assistant can call real, trusted tools through a clean interface, quality becomes a repeatable team habit.

That’s exactly what MCP enables and where DCM’s MCP server and the Dart/Flutter MCP server step in which give agents structured access to analyze, fix, and verify and an ultimate code quality gatekeeper.

In this article, we are going through how you can leverage DCM together with Dart & Flutter MCP server to make your AI assistant a trustworthy code agent. We will introduce reusable and sharable prompts that helps your team to leverage similar workable tasks and boost your productivity.

What’s new in DCM 1.31.0

· 14 min read
Majid Hajian
Developer Advocate

Cover

Today we’re excited to announce the release of DCM 1.31.0!

This release includes 13 new rules, optimized memory consumption for some DCM commands, DCM MCP Server integration, baseline support for check-parameters, more rules in Free and Starter plans, new output formats for dcm init lints-preview and dcm init metrics-preview, and more!

Let’s go through the highlights of this release! (And the full list of changes is in our changelog)

Navigating the Hard Parts of Testing in Flutter

· 29 min read
Majid Hajian
Developer Advocate

Cover

Testing is critical for building quality software and particularly in Flutter apps, especially as they grow and become more complex. Even experienced developers often see tricky scenarios and corner cases in Flutter unit and widget tests. I’ve certainly hit several edge cases myself. When I asked on Linkedin many developers responded with similar experiences.

In this article, you'll find best practices, real-world examples, and ready-to-use sample code addressing common challenges, like handling date/time bugs, platform differences, testing customPainters, asynchronous operations, or tricky plugins.

Our focus is specifically on vanilla Flutter unit and widget tests, not state management libraries such as Riverpod, BLoC or integration tests. I think those deserve articles of their own, maybe for later! One of our goals is also to know how to boost your test coverage, while 100% test coverage is controversial and especially regarding quality of tests for covering everything; it's sometimes a good indication of what and where to test.

Let's get started!

What’s new in DCM 1.30.0

· 19 min read

Cover

Today we’re excited to announce the release of DCM 1.30.0!

This release includes 22 new rules, improvements in ~55 existing rules, baseline for code quality commands (e.g. dcm check-unused-code), a new flag to update the existing baseline, support for different levels of baseline sensitivity, more rules in Free and Starter plans, updated "recommended" preset, better support for baselined issues in DCM Dashboards, optimizations for DCM Dashboards uploaded metadata, and more!

warning

❗️ With the next release we plan to discontinue all DCM versions prior to 1.24.0.

If you're still using one of those, consider upgrading to a newer version.

Let’s go through the highlights of this release! (And you can find the full list of changes in our changelog)

Practical Accessibility in Flutter (and Code You’ll Actually Use)

· 30 min read
Majid Hajian
Developer Advocate

Cover

I still remember the day a colleague turned on VoiceOver to try our Flutter app, then we found large parts of the UI were silent or confusing. No crashes or errors, just buttons with no labels, images announced only as "image," and custom widgets invisible to accessibility tools.

It's easy to forget about these during development, and they can silently exclude a group of our users and before you realize it, you might get a user complaint or a poor accessibility audit. Accessibility is crucial for inclusive apps, and thankfully Flutter’s latest updates are making it easier and faster to do the right thing.

In this post, I’ll share what I learned about building accessible Flutter apps with real examples, best practices, and leveraging Flutter 3.32’s new features to fix common pitfalls. We’ll explore mistakes like missing alt text on images or ignoring large font settings and how to fix them.

The Hidden Cost of Async Misuse in Flutter (And How to Fix It)

· 20 min read
Majid Hajian
Developer Advocate

Cover

I still remember the week I hunted a mysterious Flutter performance issue which had no crashes or error logs; just a sluggish app and somehow an increase usage of memory. Guess what? The issue was a missing await here, an unguarded setState() there.

These bugs don’t crash your app or shout errors; they silently cause memory leaks, UI glitches, and race conditions that surface only after extended use. Problem is that when you spot these behaviors or degraded performance, the damage is done.

In this post, I’ll share what I learned about async misuse’s hidden costs in Flutter, with real examples and fixes. We’ll explore common pitfalls (some of which I’ve embarrassingly written myself), see their sneaky production impacts, and how to use tools like DCM to catch them early.

Announcing General Availability of DCM Dashboards

· 6 min read
Majid Hajian
Developer Advocate

Cover

Two months ago, we announced DCM Dashboards (Closed Beta), a solid new way to monitor your issues, metrics, and code quality trends over time for your entire organization' projects.

Since then, we've worked closely with many of early adopters and refined the experience based on their feedback as well as adding new features and functionalities.

Today, we’re excited to announce that DCM Dashboards is now generally available to all Teams and Enterprise customers.

What’s new in DCM 1.28.0

· 10 min read

Cover

Today we’re excited to announce the release of DCM 1.28.0!

This release includes 11 new rules, general availability of DCM Dashboards, configurable estimated effort for rules and metrics, printable HTML reports, support for the old Dart formatter, and more! 🚀

Let’s go through the highlights of this release! (And you can find the full list of changes in our changelog)

15 Common Mistakes in Flutter and Dart Development (and How to Avoid Them)

· 41 min read
Majid Hajian
Developer Advocate

Cover

As Flutter projects grow, mistakes that didn’t matter early on can start affecting performance, stability, and maintainability. Some are easy to miss. Others are misunderstood or handled inconsistently across teams.

In this article, I am going to focus on mistakes that are common in Flutter and Dart apps, especially in larger codebases or long-running apps which I have often seen in the last 6-7 years of being in the field. They range from memory leaks and rebuild issues to state misuse, testing gaps, and architectural problems. All of them are avoidable. Most can be detected with static analysis such as DCM. Some require deeper architectural decisions.

Let's get started and see which of these issues are familiar to you and which of them you already have done! I bet you can resonate with many of the following issues.

10 Lesser-Known Dart and Flutter Functionalities You Should Start Using

· 44 min read
Majid Hajian
Developer Advocate

Cover

I started writing Dart code in 2019, and since then, I've been learning something new every day. It’s fascinating to see what this framework and language have to offer.

In this article, I want to share some of those hidden gems I’ve discovered—lesser-known functionalities that can simplify your development process and add a unique touch to your apps. Moreover, we will go deeper into the implementation and explore how they are implemented to learn more about the patterns.

Let’s uncover some of these functions and methods together!

What’s new in DCM 1.27.0

· 5 min read

Cover

Today we’re excited to announce the release of DCM 1.27.0!

This release includes 4 new rules, new built-in presets, reworked metrics console reporter, support for disabling ignore comments for particular rules, closed beta for DCM Dashboards, and more! 🚀

Let's go through the highlights of this release! (And you can find the full list of changes in our changelog)

Announcing DCM Dashboards (Closed Beta)

· 7 min read
Majid Hajian
Developer Advocate

Cover

For the past two years we were focusing on a various parts of the product, and added:

While all those features help you maintain your codebase and be more productive, there was still one problem that the tool was not helping you with: getting an overview of all your issues and metrics, and how they change over time.

Today we are excited to announce DCM Dashboards that will help exactly with that! 🚀