我想制作类似电子书的应用程序,它有很长的页面列表,我可以向左或向右滑动以转到下一页/上一页。因为我们将拥有数千页,并且页数可能会因书的长度而异,所以在开头构建所有页面都没有意义。
我正在尝试使用带有3个初始页面的TabBarView(上一个 - 当前 - 下一页),并在用户向左或向右滑动时动态添加和删除标签。
我在这里做了一个简化版本:
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget { @override Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
home: new MyTabbedPage(),
); } }
class MyTabbedPage extends StatefulWidget { const MyTabbedPage({Key key}) : super(key: key);
@override _MyTabbedPageState createState() => new
_MyTabbedPageState(); }
class _MyTabbedPageState extends State<MyTabbedPage> with SingleTickerProviderStateMixin { int num = 4; final List<Tab> myTabs = <Tab>[
new Tab(text: '1'),
new Tab(text: '2'),
new Tab(text: '3'), ];
TabController _tabController;
@override void initState() {
super.initState();
_tabController = new TabController(vsync: this, length: myTabs.length, initialIndex: 1);
_tabController.addListener(_handleTabChange); }
@override void dispose() {
_tabController.dispose();
super.dispose(); }
void _handleTabChange() {
myTabs.add(new Tab(text: num.toString()));
myTabs.removeAt(0);
_tabController.animateTo(1); }
@override Widget build(BuildContext context) {
return new Scaffold(
body: new TabBarView(
controller: _tabController,
children: myTabs.map((Tab tab) {
return new Center(child: new Text(tab.text));
}).toList(),
),
); } }
我的意图是
但是它没有添加或删除页面,我只有刷卡后只有tab1,2,3。
我的问题是
有没有比TabBarView更好的方法来制作这个电子书滑动UI?
是的,有PageView
小部件。
如果答案是肯定的,我该如何解决这个问题?
PageView
迫使其每个孩子或Pages
扩展以占用所有可用空间,这是你想要通过使用TabView
首先实现的目标。此外,它使您能够使用Pages
动态构建PageView.builder
,ListView.builder
类似于PageView
,通过明确指定页数,以及在需要时构造每个页面的机制。这将显着提高您的app.PageSnapping
类的性能也为您提供像着名的电子书阅读器,如PageView
效果提供的专业效果。
如果你想建立一个自定义的PageView.custom
,你可以使用qazxswpoi构造函数。