我想防止标签移动,即使我点击TabBar。
TabBar(
controller: this._controller,
tabs: <Widget>[
new Tab(
text: "A",
),
new Tab(
text: "B",
),
new Tab(
text: "C",
),
])
Run Code Online (Sandbox Code Playgroud)
如果您将 嵌入 的TabBar底部AppBar,则需要实现PreferredSizeWidget. 这很容易实现:
class ReadOnlyTabBar extends StatelessWidget implements PreferredSizeWidget {
final TabBar child;
const ReadOnlyTabBar({Key key, @required this.child}) : super(key: key);
@override
Widget build(BuildContext context) {
return IgnorePointer(child: child);
}
@override Size get preferredSize => this.child.preferredSize;
}
Run Code Online (Sandbox Code Playgroud)
小智 8
我有一个更优雅的解决方案:
TabBar(
onTap: (index){
_controller.index = _controller.previousIndex;
},
Run Code Online (Sandbox Code Playgroud)
我认为你必须将侦听器添加到选项卡单击,然后再次将索引更改为 0。在这里我们需要添加控制器,我们可以通过它设置索引。
class TabBarDemoWidget extends State<TabBarDemo> with TickerProviderStateMixin{
@override
Widget build(BuildContext context) {
int _tabIndex = 0;
var tab = TabController(
initialIndex: 0,
length: 3,
vsync: this
);
void _handleTabSelection(){
setState(() {
tab.index = _tabIndex;
});
}
tab.addListener(_handleTabSelection);
return DefaultTabController(
length: 3,
initialIndex: 0,
child: TabBar(
labelColor: Colors.teal,
controller: tab,
tabs: [
GestureDetector(
child:Tab(
icon:
Icon(
Icons.directions_car)) ,
onTap: (){
_tabIndex = 0;
},
),GestureDetector(
child:Tab(
icon: Icon(Icons.directions_car)) ,
onTap: (){
_tabIndex = 0;
},
),GestureDetector(
child:Tab(
icon: Icon(Icons.directions_car)) ,
onTap: (){
_tabIndex = 0;
},
)
],
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2608 次 |
| 最近记录: |