Die Strategie von Flutter „Alles ist ein Widget“ setzt objektorientierte Programmierung konsequent bis in die Benutzeroberfläche um: Die Oberfläche eines Programms besteht aus verschiedenen Widgets, die ineinander geschachtelt sein können. Jeder Button und angezeigte Textual content ist ein Widget. Diese Widgets haben unterschiedliche Eigenschaften, die sich verändern lassen. Sie können sich gegenseitig beeinflussen und auf Statusänderungen von außen mit eingebauten Funktionen reagieren. Für alle wichtigen Elemente der Benutzeroberfläche werden Widgets mitgeliefert, die den Designvorgaben von Android und iOS bzw. gewöhnlichen Webanwendungen entsprechen. Bei Bedarf lassen sich diese um zusätzliche Funktionen erweitern oder man erstellt eigene Widgets, die sich mit den vorhandenen nahtlos kombinieren lassen.
Die Widgets bieten im Vergleich zu den Konzepten anderer SDKs wesentlich mehr Flexibilität, haben aber den Nachteil, dass sie alle im Quellcode des Programms liegen, was diesen stark verschachtelt und schnell unübersichtlich macht.