#dart #flutter
#dart #флаттер
Вопрос:
есть ли способ отключить определенную вкладку на панели вкладок? чтобы ее нельзя было щелкнуть, если она не будет включена снова? любая помощь приветствуется, спасибо!
Редактировать: код с указателем поглощения / игнорирования не работает:
class MyTabbedPage extends StatefulWidget {
const MyTabbedPage({Key key}) : super(key: key);
@override
_MyTabbedPageState createState() => new _MyTabbedPageState();
}
class _MyTabbedPageState extends State<MyTabbedPage>
with SingleTickerProviderStateMixin {
final List<Tab> myTabs = <Widget>[
Tab(text: 'LEFT'),
AbsorbPointer(
child: Tab(text: 'RIGHT')), //not working
];
TabController _tabController;
@override
void initState() {
super.initState();
_tabController = new TabController(vsync: this, length: myTabs.length);
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
bottom: new TabBar(
controller: _tabController,
tabs: myTabs,
),
),
body: new TabBarView(
controller: _tabController,
children: myTabs.map((Tab tab) {
return new Center(child: new Text(tab.text));
}).toList(),
),
);
}
}
Комментарии:
1. Попробуйте использовать AbsorbPointer
2. это не работает, когда я оборачиваю указатель поглощения вокруг виджета вкладки, возможно, жесты на вкладках доступны из любого другого места?
3. Пожалуйста, добавьте свой код.
4. @MangaldeepPannu готово, пожалуйста, ознакомьтесь с обновленным вопросом.
Ответ №1:
Вот и все:
Добавьте список, чтобы указать, какая вкладка отключена
List<bool> _isDisabled = [false, true];
Добавьте слушателя в _tabController
_tabController.addListener(onTap);
onTap()
метод. Если выбранная вкладка отключена, мы вернемся к предыдущей выбранной вкладке.
onTap() {
if (_isDisabled[_tabController.index]) {
int index = _tabController.previousIndex;
setState(() {
_tabController.index = index;
});
}
}
Ниже приведен полный код:
import 'package:flutter/material.dart';
class MyTabbedPage extends StatefulWidget {
const MyTabbedPage({Key key}) : super(key: key);
@override
_MyTabbedPageState createState() => _MyTabbedPageState();
}
class _MyTabbedPageState extends State<MyTabbedPage>
with SingleTickerProviderStateMixin {
List<bool> _isDisabled = [false, true];
final List<Tab> myTabs = <Tab>[
Tab(text: 'LEFT'),
Tab(text: 'RIGHT'),
];
TabController _tabController;
onTap() {
if (_isDisabled[_tabController.index]) {
int index = _tabController.previousIndex;
setState(() {
_tabController.index = index;
});
}
}
@override
void initState() {
super.initState();
_tabController = TabController(vsync: this, length: myTabs.length);
_tabController.addListener(onTap);
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
bottom: TabBar(
controller: _tabController,
tabs: myTabs,
),
),
body: TabBarView(
controller: _tabController,
children: myTabs.map((Tab tab) {
return Center(child: new Text(tab.text));
}).toList(),
),
);
}
}
Комментарии:
1. большое спасибо за ответ, я скоро попробую его, чтобы посмотреть, работает ли он.
2. Не торопитесь, если у вас есть какие-либо сомнения, пожалуйста, спросите.
3. большое вам спасибо, все сработало, как ожидалось, я хотел спросить, можно ли также использовать эту логику для отключения прокрутки? например, если следующая вкладка указана как отключенная, мы не можем провести пальцем вперед к следующей отключенной вкладке, но мы можем провести пальцем назад?
4. Попробуйте использовать pub.dartlang.org/packages/swipedetector , Я обновлю свой ответ позже, в настоящее время сдаю экзамены
5. Это решение действительно работало для нажатия. Для прокрутки я устанавливаю физику на
TabBarView
NeverScrollableScrollPhysics()
Ответ №2:
TabBar(
tabs: [
Tab(icon: Icon(Icons.directions_car)), //enabled
Tab(icon: Icon(Icons.directions_transit), onTap: null), //disabled
Tab(icon: Icon(Icons.directions_bike)),
],
),
Комментарии:
1. Привет, пожалуйста, добавьте некоторое объяснение, почему это решение. Спасибо
2. на вкладке нет такого свойства, как «onTap».
3.
onTap
является параметром дляTabBar
.