Repository navigation
Open
Labels
P3Issues that are less important to the Flutter projectIssues that are less important to the Flutter projectc: new featureNothing broken; request for a new capabilityNothing broken; request for a new capabilityc: proposalA detailed proposal for a change to FlutterA detailed proposal for a change to Flutterp: material_uimaterial_ui package in flutter/packagesmaterial_ui package in flutter/packagespackageflutter/packages repository. See also p: labels.flutter/packages repository. See also p: labels.refactorImproving readability/efficiency without behavioral changesImproving readability/efficiency without behavioral changesteam-designOwned by Design Languages teamOwned by Design Languages teamtriaged-designTriaged by Design Languages teamTriaged by Design Languages team
Description
This can be classified as part of #53059.
The TabBar widget is strictly Material design.
But! The TabBarView and a few of the more technical classes/widgets like DefaultTabController or TabController have nothing in common with Material design. These could be safely kept in flutter/widgets.dart so that we can retain the behavior of changing tabs while skipping the in-between ones with either a Material TabBar (from flutter/material.dart) or with a 3rd party/custom tab bar implementation.
Reacted by Kostia Sokolovskyi, Lakshyajeet Jalal, Piotr Rogulski, Piotr Maszota, Nikodem Bernat, Szymon Kwiatek, Kamil Sztandur and Victor Sanni
Metadata
Metadata
Assignees
Labels
P3Issues that are less important to the Flutter projectIssues that are less important to the Flutter projectc: new featureNothing broken; request for a new capabilityNothing broken; request for a new capabilityc: proposalA detailed proposal for a change to FlutterA detailed proposal for a change to Flutterp: material_uimaterial_ui package in flutter/packagesmaterial_ui package in flutter/packagespackageflutter/packages repository. See also p: labels.flutter/packages repository. See also p: labels.refactorImproving readability/efficiency without behavioral changesImproving readability/efficiency without behavioral changesteam-designOwned by Design Languages teamOwned by Design Languages teamtriaged-designTriaged by Design Languages teamTriaged by Design Languages team
Type
Projects
- StatusShow more project fieldsNo status
Activity
dkwingsmt commentedon Sep 24, 2025
Tab bars are indeed common design patterns. Cupertino also has its own tab bar widget. I think in general having some form of a tab bar widget in the widgets library is reasonable, although the exact form still needs more discussion. For example, an alternative way would be to introduce a
RawTabBar. Anyway, this should not be executed at least until material and cupertino have been moved to their individual packages.Also related: #97496
justinmc commentedon Aug 7, 2026
I agree with this. We should investigate a RawTabBar abstraction between TabBar and CupertinoTabBar as @dkwingsmt said, and move over other related classes that are not specific to Material.
navaronbracke commentedon Oct 1, 2026
I think I'll look into this, since it partially blocks decoupling
test/widgets/navigator_test.dart, for the decoupling project.Maybe I can move some things over already.
navaronbracke commentedon Oct 2, 2026
TabController & TabBarView seem easy to move out of Material. (no real dependency on Material) Cupertino does not yet use a TabController, so there's a bit of friction there.
The Tab class can also be moved out of Material fairly easily. (we can probably provide parameters for the things like tab height)
TabBar on the other hand is quite complex, because it has a bunch of Material specific things baked in.