我有 3 个选项卡,每个选项卡内部都有一个 PageView。 在 PageView 的末尾,我希望能够滚动到下一个选项卡。
如果没有更多的页面指向该方向,有没有一种方法可以让 TabBar 滚动而不是 PageView 滚动? (仅向左或向右滚动)
这是示例代码。 当我在第一个选项卡的最后一页向右滚动时,我想查看第二个选项卡的第一页。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(home: ScrollableTabsDemo());
}
}
class _Page {
const _Page({ this.icon, this.text });
final IconData icon;
final String text;
}
const List<_Page> _allPages = <_Page>[
_Page(icon: Icons.grade, text: 'TRIUMPH'),
_Page(icon: Icons.playlist_add, text: 'NOTE'),
_Page(icon: Icons.check_circle, text: 'SUCCESS'),
];
class ScrollableTabsDemo extends StatefulWidget {
static const String routeName = '/material/scrollable-tabs';
@override
ScrollableTabsDemoState createState() => ScrollableTabsDemoState();
}
class ScrollableTabsDemoState extends State<ScrollableTabsDemo> with SingleTickerProviderStateMixin {
TabController _controller;
@override
void initState() {
super.initState();
_controller = TabController(vsync: this, length: _allPages.length);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final Color iconColor = Theme.of(context).accentColor;
return Scaffold(
appBar: AppBar(
title: const Text('Scrollable tabs'),
bottom: TabBar(
controller: _controller,
isScrollable: true,
tabs: _allPages.map<Tab>((_Page page) {
return Tab(text: page.text, icon: Icon(page.icon));
}).toList(),
),
),
body: TabBarView(
controller: _controller,
children: _allPages.map<Widget>((_Page page) {
return SafeArea(
top: false,
bottom: false,
child: PageView.builder(
itemBuilder: (context, position)
{
return Container(child: Center(child: Text(position.toString())));
},
itemCount: 5,
),
);
}).toList(),
),
);
}
}
最佳答案
将 onPageChange 参数添加到 pageBuilder。然后检查它是否是最后一页,如果是,则将 tabController 动画到下一页。
onPageChanged: (page) {
if (page == _allPages.length &&
(_controller.index + 1) < _controller.length) {
_controller.animateTo(_controller.index + 1);
}
},
itemCount: _allPages.length + 1,
关于在 TabBarView : scrolling to next tab at the end of page 内 flutter PageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57059844/
我有3个选项卡,每个选项卡内部都有一个PageView。在PageView的末尾,我希望能够滚动到下一个选项卡。如果没有更多的页面指向该方向,有没有一种方法可以让TabBar滚动而不是PageView滚动?(仅向左或向右滚动)这是示例代码。当我在第一个选项卡的最后一页向右滚动时,我想查看第二个选项卡的第一页。import'package:flutter/material.dart';voidmain()=>runApp(MyApp());classMyAppextendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){
我有3个选项卡,每个选项卡内部都有一个PageView。在PageView的末尾,我希望能够滚动到下一个选项卡。如果没有更多的页面指向该方向,有没有一种方法可以让TabBar滚动而不是PageView滚动?(仅向左或向右滚动)这是示例代码。当我在第一个选项卡的最后一页向右滚动时,我想查看第二个选项卡的第一页。import'package:flutter/material.dart';voidmain()=>runApp(MyApp());classMyAppextendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){
在一个选项卡中我有一个TextFormField,而在另一个选项卡中只有一个文本列表。当我选择文本字段时,键盘打开,然后我跳转到第二个选项卡,键盘仍然显示。我什至可以写字,当我回到Tab1时,我明白了我为什么要打字。你知道我怎样才能对第二个选项卡进行操作,以便将焦点从文本字段中移开吗?DefaultTabController(length:2,child:Scaffold(appBar:AppBar(title:Text('ManageProducts'),bottom:TabBar(tabs:[Tab(icon:Icon(Icons.create),text:'CreateProdu
在一个选项卡中我有一个TextFormField,而在另一个选项卡中只有一个文本列表。当我选择文本字段时,键盘打开,然后我跳转到第二个选项卡,键盘仍然显示。我什至可以写字,当我回到Tab1时,我明白了我为什么要打字。你知道我怎样才能对第二个选项卡进行操作,以便将焦点从文本字段中移开吗?DefaultTabController(length:2,child:Scaffold(appBar:AppBar(title:Text('ManageProducts'),bottom:TabBar(tabs:[Tab(icon:Icon(Icons.create),text:'CreateProdu
是否可以在不让用户在页面之间滑动的情况下创建TabBarView或PageView? 最佳答案 尝试使用NeverScrollableScrollPhysics作为您的physics参数。 关于dart-Tabbarview和Pageview无法在页面之间滑动,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/45249881/
是否可以在不让用户在页面之间滑动的情况下创建TabBarView或PageView? 最佳答案 尝试使用NeverScrollableScrollPhysics作为您的physics参数。 关于dart-Tabbarview和Pageview无法在页面之间滑动,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/45249881/
我想制作像应用程序一样的电子书,它有很长的页面列表,我可以向左或向右滑动以转到下一页/上一页。因为我们会有数千页,而且页数会根据书的长度而有所不同,所以在开头构建所有页面没有意义。我正在尝试使用具有3个初始页面(上一页-当前页面-下一页)的TabBarView,并在用户向左或向右滑动时动态添加和删除选项卡。我这里做了一个简化版:import'package:flutter/material.dart';voidmain()=>runApp(newMyApp());classMyAppextendsStatelessWidget{@overrideWidgetbuild(BuildCon
我想制作像应用程序一样的电子书,它有很长的页面列表,我可以向左或向右滑动以转到下一页/上一页。因为我们会有数千页,而且页数会根据书的长度而有所不同,所以在开头构建所有页面没有意义。我正在尝试使用具有3个初始页面(上一页-当前页面-下一页)的TabBarView,并在用户向左或向右滑动时动态添加和删除选项卡。我这里做了一个简化版:import'package:flutter/material.dart';voidmain()=>runApp(newMyApp());classMyAppextendsStatelessWidget{@overrideWidgetbuild(BuildCon
我想在水平PageView中放置一个选项卡,并且能够滑出选项卡。在内容区域内,我可以从一个页面滑入选项卡,但不能从选项卡滑出到另一个页面。如果我在TabBar上滑动,那么我可以离开选项卡并转到相邻的页面。有没有办法允许我从TabView内容区域滑动并将其移动到相邻的PageView页面?这是我的测试代码:import'package:flutter/material.dart';voidmain()=>runApp(MyApp());classMyAppextendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){re
我想在水平PageView中放置一个选项卡,并且能够滑出选项卡。在内容区域内,我可以从一个页面滑入选项卡,但不能从选项卡滑出到另一个页面。如果我在TabBar上滑动,那么我可以离开选项卡并转到相邻的页面。有没有办法允许我从TabView内容区域滑动并将其移动到相邻的PageView页面?这是我的测试代码:import'package:flutter/material.dart';voidmain()=>runApp(MyApp());classMyAppextendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){re