flutter:在TabBarView中动态添加/删除选项卡

问题描述 投票:1回答:1

我想制作类似电子书的应用程序,它有很长的页面列表,我可以向左或向右滑动以转到下一页/上一页。因为我们将拥有数千页,并且页数可能会因书的长度而异,所以在开头构建所有页面都没有意义。

我正在尝试使用带有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(),
      ),
    );   } }

我的意图是

  • 初始标签:1,2,3
  • 向右滑动后,_handleTabChange执行,tab4添加,tab1删除,animateTo tab3,所以最终结果是2,3,4 - >当前页面是tab3

但是它没有添加或删除页面,我只有刷卡后只有tab1,2,3。

我的问题是

  • 有没有比TabBarView更好的方法来制作这个电子书滑动UI?
  • 如果答案是肯定的,我该如何解决这个问题?
flutter
1个回答
2
投票

有没有比TabBarView更好的方法来制作这个电子书滑动UI?

是的,有PageView小部件。

如果答案是肯定的,我该如何解决这个问题?

PageView迫使其每个孩子或Pages扩展以占用所有可用空间,这是你想要通过使用TabView首先实现的目标。此外,它使您能够使用Pages动态构建PageView.builderListView.builder类似于PageView,通过明确指定页数,以及在需要时构造每个页面的机制。这将显着提高您的app.PageSnapping类的性能也为您提供像着名的电子书阅读器,如PageView效果提供的专业效果。

如果你想建立一个自定义的PageView.custom,你可以使用qazxswpoi构造函数。

© www.soinside.com 2019 - 2024. All rights reserved.