Flutter 颤振-使包含DefaultTabController的页面可滚动

Flutter 颤振-使包含DefaultTabController的页面可滚动,flutter,dart,Flutter,Dart,我正在开发一个应用程序,我有一个页面,其中显示了一块数据,下面显示了包含其他数据的tabbar和tabbar视图。我正在努力解决的问题是,如果我试图用“SingleChildScrollView”包装小部件“DefaultTabController”,它会抛出一个错误,页面无法工作 我需要找到一种方法在页面底部显示tabbar和tabbar视图,并使整个页面可滚动 我把代码放在: 在构建方法中,我在列中放置了4个小部件 _showEventHeader显示带有标题的单个图像 _showUser

我正在开发一个应用程序,我有一个页面,其中显示了一块数据,下面显示了包含其他数据的tabbar和tabbar视图。我正在努力解决的问题是,如果我试图用“SingleChildScrollView”包装小部件“DefaultTabController”,它会抛出一个错误,页面无法工作

我需要找到一种方法在页面底部显示tabbar和tabbar视图,并使整个页面可滚动

我把代码放在:

在构建方法中,我在列中放置了4个小部件

  • _showEventHeader显示带有标题的单个图像
  • _showUserAndEventData显示纯文本
  • _showTabs显示选项卡标题
  • _ShowTabs内容显示选项卡的内容(图像和注释)
@覆盖
小部件构建(构建上下文){
返回DefaultTabController(
长度:2,
孩子:脚手架(
背景色:主题。背景色,
正文:专栏(
儿童:[
…\u showEventHeader(),
容器(
填充:边缘设置。全部(15),
子项:_showUserAndEventData()),
_showTabs(),
_showTabsContent(),
],
)
));
}
列表_showEventHeader(){
返回[
大小盒子(
身高:20,
),
手势检测器(
onTap:(){
if(Val.valStr(widget.evento.bannerUrl.isNotEmpty){
Navigator.of(context.push)(MaterialPageRoute)(生成器:(ctx){
返回flyperfullimage(
imgURL:widget.evento.bannerUrl,
);
}));
}
},
子:堆栈(
对齐:对齐。右下角,
儿童:[
FlypperCustomImageNetWork(
imageURL:widget.evento.bannerUrl,
身高:200,
宽度:200,
showAsRectangle:对,
fillWidth:true,
),
容器(
子:flyperqrimage(
qrData:widget.evento.code,
尺码:65,
),
)
],
),
),
大小盒子(
身高:20,
),
!\u可获得票证
?文本(“$\u NoticeAvailableMessage”,
风格:Theme.of(context.textTheme.headline2)
:SizedBox(
身高:1,,
),
卡片(
颜色:主题。背景。原色,
标高:5,
孩子:填充(
填充:常量边集。全部(5),
子:文本(
Val.valStr(widget.evento.name).isNotEmpty
?Val.valStr(widget.evento.name)
:“罪名”,
textAlign:textAlign.justify,
风格:主题(上下文)
.文本主题
.headline1/*FlypperStyleHelper.eventTitle(上下文)*/,
),
),
大小盒子(
身高:10,
),
];
}
小部件_showUserAndEventData(){
返回SingleChildScrollView(
子:容器(
颜色:主题。背景。原色,
子:列(
儿童:[
尺寸箱(高度:10),
行(mainAxisAlignment:mainAxisAlignment.start,子项:[
this.user!=null
?/*FlypperCustomImageBase64(
imageBase64:this.user.profileImageUrl)*/
FlypperCustomImageNetWork(
imageURL:this.user.profileImageUrl,
keepImageCached:对,
身高:65,
宽度:65,
)
:SizedBox(高度:1),
大小盒子(
身高:10,
),
容器(
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
this.user!=null
?this.user.userName.isEmpty
?此为.user.email
:this.user.userName
: '',
风格:Theme.of(context).textTheme.headline1,
/*eventUserData(上下文,18)*/
),
正文(
this.user!=null
?Val.valInt(this.user.followers).toString()+
“seguidores”
: '',
样式:Theme.of(context).textTheme.bodyText1
/*eventUserData(上下文,15)*/
)
],
),
)
]),
_getEventDetailInfo(),
大小盒子(
身高:20,
),
_showBuyButton(),
大小盒子(
身高:10,
),
FlypperIconButton(
图标:Icons.location_on,
宽度:150,
handlerFunction:()=>\u openMapWithCalculatedRoute(上下文),
),
分隔器(
颜色:颜色。灰色,
厚度:2,
)
],
),
),
);
}
小部件_showTabs(){
返回选项卡(
isScrollable:是的,
标签样式:Theme.of(context).textTheme.headline2,
选项卡:[
标签(
文字:“Fotos,视频…”,
/*图标:图标(Icons.event,颜色:Theme.of(context.buttonColor)*/
),
标签(
文本:“Comentarios”,
/*图标:图标(Icons.attach_文件,颜色:Theme.of(context).buttonColor)*/
),
],
);
}
小部件\u showTabsContent(){
回程灵活(
子项:选项卡视图(
中国
tabs: [

       Tab(

       child: Text('Tab 1'),

       ),

       Tab(

       child: Text('Investment'),

       ),

       Tab(

       child: Text('Your Earning'),

       ),
  height: 20,

  child: ListView(

    shrinkWrap: true,

    scrollDirection: Axis.vertical,

      Column(

        children: [])));}