Flutter 如何在Flatter中创建自定义选项卡栏
我想在我的主体中实现一个自定义的可滚动选项卡栏,而不是在appBar中Flutter 如何在Flatter中创建自定义选项卡栏,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我想在我的主体中实现一个自定义的可滚动选项卡栏,而不是在appBar中 我会从一个水平滚动的列表视图开始,然后构建数千个列表块元素,并使它们可以单击。如果要滑动,请添加一个手势检测器,您可以创建一个具有相同视图的自定义列表。下面是示例代码 ListView.builder( itemBuilder: (_, count) { return Container( decoration: BoxDecor
我会从一个水平滚动的
列表视图开始,然后构建数千个列表块
元素,并使它们可以单击。如果要滑动,请添加一个手势检测器
,您可以创建一个具有相同视图的自定义列表。下面是示例代码
ListView.builder(
itemBuilder: (_, count) {
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
color: Colors.green),
child: GestureDetector(
onTap: (){
print("You clicked");
},
child: Text(
list[count],
style: TextStyle(color: Colors.white, fontSize: 12),textAlign: TextAlign.center,
),
),
);
},
itemCount: list.length,
scrollDirection: Axis.horizontal,
)
尝试使用“NestedScrollView”并将信息放在选项卡栏外的“flexibleSpace”中
所以这并不是你想要的,你可以用水平滚动(scrollView)来代替底部的滚动条,但我希望这能把你推向正确的方向。这段代码基本上使用pageView
来显示页面,由于有一个页面控制器,您可以将任何按钮或onPress
设置为特定页面的动画
如果你有任何问题,请告诉我
import 'package:flutter/material.dart';
class TestWidget extends StatefulWidget {
TestWidget({Key key}) : super(key: key);
@override
_TestWidgetState createState() => _TestWidgetState();
}
class _TestWidgetState extends State<TestWidget> {
int _selectedIndex = 0;
PageController _pageController;
@override
void initState() {
super.initState();
_pageController = PageController();
}
@override
void dispose() {
_pageController.dispose();
super.dispose();
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Tab Bar"),
),
body: Center(
child: Column(
children: <Widget>[
Expanded(
flex: 10,
child: ButtonBar(
alignment: MainAxisAlignment.center,
children: <Widget>[
FlatButton(
splashColor: Colors.blueAccent,
color: Colors.blue,
onPressed: () {
_pageController.animateToPage(0, duration: Duration(milliseconds: 500), curve: Curves.ease);
},
child: Text("One",),
),
FlatButton(
splashColor: Colors.blueAccent,
color: Colors.blue,
onPressed: () {
_pageController.animateToPage(1, duration: Duration(milliseconds: 500), curve: Curves.ease);
},
child: Text("Two",),
),
FlatButton(
splashColor: Colors.blueAccent,
color: Colors.blue,
onPressed: () {
_pageController.animateToPage(2, duration: Duration(milliseconds: 500), curve: Curves.ease);
},
child: Text("Three",),
)
],
),
),
Expanded(
flex: 40,
child: PageView(
controller: _pageController,
children: [
Text("Page One"),
Text("Page Two"),
Text("Page Three")
],
),
),
],
),
),
);
}
}
导入“包装:颤振/材料.省道”;
类TestWidget扩展了StatefulWidget{
TestWidget({Key}):超级(Key:Key);
@凌驾
_TestWidgetState createState();
}
类_TestWidgetState扩展了状态{
int _selectedIndex=0;
页面控制器_页面控制器;
@凌驾
void initState(){
super.initState();
_pageController=pageController();
}
@凌驾
无效处置(){
_pageController.dispose();
super.dispose();
}
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“选项卡栏”),
),
正文:中(
子:列(
儿童:[
扩大(
弹性:10,
孩子:巴顿巴(
对齐:MainAxisAlignment.center,
儿童:[
扁平按钮(
splashColor:Colors.blueAccent,
颜色:颜色,蓝色,
已按下:(){
_pageController.animateToPage(0,持续时间:持续时间(毫秒:500),曲线:Curves.ease);
},
子项:文本(“一”),
),
扁平按钮(
splashColor:Colors.blueAccent,
颜色:颜色,蓝色,
已按下:(){
_pageController.animateToPage(1,持续时间:持续时间(毫秒:500),曲线:Curves.ease);
},
子项:文本(“两个”),
),
扁平按钮(
splashColor:Colors.blueAccent,
颜色:颜色,蓝色,
已按下:(){
_pageController.animateToPage(2,持续时间:持续时间(毫秒:500),曲线:Curves.ease);
},
子:文本(“三”),
)
],
),
),
扩大(
弹性:40,
子:页面视图(
控制器:_pageController,
儿童:[
正文(“第一页”),
正文(“第二页”),
正文(“第三页”)
],
),
),
],
),
),
);
}
}
这基本上允许您使用任何选项卡栏或按钮来切换页面,同时保持滑动功能:-)您尝试了什么?我尝试了一些解决方案,但找不到解决方案|我想我将在本周晚些时候为您想要的东西制作一个包,因为我也需要它,但请使用下面的pageView查看我的解决方案!另外,我认为这值得一看:TabController呢??我想要一个自定义选项卡栏而不仅仅是列表视图如果你指的是带有“TabController”的可拖动功能,那么你可以使用GestureDragStartCallback看到这一点,当指针水平拖动时,你可以添加一个函数来更改页面。如果可能,我更喜欢使用颤振选项卡控制器和选项卡栏