Flutter 在颤振选项卡ViewController中,平移和轻触手势不起作用
我使用了一个放置在TabViewController中的手势检测器。其中,手势检测器的平移和点击事件不起作用,而TabViewController的拖动和点击事件起作用。如何使手势检测器的事件工作 我已经提到了这一点,但只有解决方案可以避免覆盖相应小部件的点击手势Flutter 在颤振选项卡ViewController中,平移和轻触手势不起作用,flutter,flutter-layout,gesture,tabview,Flutter,Flutter Layout,Gesture,Tabview,我使用了一个放置在TabViewController中的手势检测器。其中,手势检测器的平移和点击事件不起作用,而TabViewController的拖动和点击事件起作用。如何使手势检测器的事件工作 我已经提到了这一点,但只有解决方案可以避免覆盖相应小部件的点击手势 import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget {
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: DefaultTabController(length: 3, child: MyHomePage()),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _value = 10;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
bottom: TabBar(
tabs: [
Tab(icon: Icon(Icons.directions_car)),
Tab(icon: Icon(Icons.directions_transit)),
Tab(icon: Icon(Icons.directions_bike)),
],
),
title: Text('Tabs Demo'),
),
body: TabBarView(
children: <Widget>[
SingleChildScrollView(
child: Card(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
ConstrainedBox(
constraints: BoxConstraints.loose(Size(200, 200)),
child: AspectRatio(
aspectRatio: 1,
child: GestureDetector(
onPanStart: (DragStartDetails details) =>
{print('pan start')},
onPanUpdate: (DragUpdateDetails details) =>
{print('pan update')},
onPanEnd: (DragEndDetails details) =>
{print('pan end')},
onTapUp: (TapUpDetails details) =>
{print('tap up')},
child: Container(
color: Colors.green,
),
))),
Padding(
padding: EdgeInsets.all(10),
child: Container(
height: 200,
width: 200,
color: Colors.lightBlue,
),
),
Container(
height: 200,
child: Slider(
value: _value.toDouble(),
min: 1.0,
max: 10.0,
divisions: 10,
activeColor: Colors.red,
inactiveColor: Colors.black,
label: 'Set a value',
onChanged: (double newValue) {
setState(() {
_value = newValue.round();
});
}),
),
Padding(
padding: EdgeInsets.all(10),
child: Container(
height: 200,
width: 200,
color: Colors.lightBlue,
),
),
Container(
height: 200,
child: Slider(
value: _value.toDouble(),
min: 1.0,
max: 10.0,
divisions: 10,
activeColor: Colors.red,
inactiveColor: Colors.black,
label: 'Set a value',
onChanged: (double newValue) {
setState(() {
_value = newValue.round();
});
}),
)
],
),
),
),
Container(
color: Colors.yellow,
),
Container(
color: Colors.red,
)
],
),
);
}
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
视觉密度:视觉密度。自适应平台密度,
),
主页:DefaultTabController(长度:3,子项:MyHomePage()),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
int _值=10;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
底部:选项卡栏(
选项卡:[
选项卡(图标:图标(图标方向车)),
选项卡(图标:图标(图标方向和交通)),
选项卡(图标:图标(图标方向)),
],
),
标题:文本(“选项卡演示”),
),
正文:选项卡视图(
儿童:[
SingleChildScrollView(
孩子:卡片(
子:列(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
约束盒(
约束:BoxConstraints.loose(大小(200200)),
孩子:AspectRatio(
方面:1,
儿童:手势检测器(
onPanStart:(DragStartDetails)=>
{print('pan start')},
onPanUpdate:(DragUpdateDetails)=>
{print('pan update')},
onPanEnd:(DragEndDetails)=>
{print('pan end')},
onTapUp:(tappdetails细节)=>
{print('tap up')},
子:容器(
颜色:颜色。绿色,
),
))),
填充物(
填充:边缘设置。全部(10),
子:容器(
身高:200,
宽度:200,
颜色:颜色。浅蓝色,
),
),
容器(
身高:200,
子:滑块(
值:_value.toDouble(),
最低:1.0,
最高:10.0,
分部:10,
activeColor:Colors.red,
不活动颜色:颜色。黑色,
标签:“设置值”,
一旦更改:(双新值){
设置状态(){
_value=newValue.round();
});
}),
),
填充物(
填充:边缘设置。全部(10),
子:容器(
身高:200,
宽度:200,
颜色:颜色。浅蓝色,
),
),
容器(
身高:200,
子:滑块(
值:_value.toDouble(),
最低:1.0,
最高:10.0,
分部:10,
activeColor:Colors.red,
不活动颜色:颜色。黑色,
标签:“设置值”,
一旦更改:(双新值){
设置状态(){
_value=newValue.round();
});
}),
)
],
),
),
),
容器(
颜色:颜色,黄色,
),
容器(
颜色:颜色,红色,
)
],
),
);
}
}
是否希望选项卡视图的滚动保持不变?您将在平移开始
、平移更新
和平移结束
上执行什么操作?@Darshan:在TabBarView中添加TabBarView时,我们不需要TabBarView像滑块一样交互。我们将在GestureDetector下添加自定义画师,并使用“平移开始”、“平移更新”进行一些交互,如拖动。是否仍希望TabBarView
的滚动保持不变?您将在平移开始
、平移更新
和平移结束
上执行什么操作?@Darshan:在TabBarView中添加TabBarView时,我们不需要TabBarView像滑块一样交互。我们将在GestureDetector下添加自定义画师,并使用“平移开始”、“平移更新”进行一些交互,如拖动。