флаттер TabBarView не изменяется с помощью TabController - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь программно переключаться между вкладками внутри приложения. tabController.animateTo () изменяет только TabBar, но не TabBarView.

Вот мой пример, и он должен animateTo LEFT всякий раз, когда я перемещаюсь вправо, потому что слушатель изменения вкладки автоматически вызывает animateTo (0). Но только TabBar изменяется на ВЛЕВО (как и ожидалось), а не 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 {
  final List<Tab> myTabs = <Tab>[
    new Tab(text: 'LEFT'),
    new Tab(text: 'RIGHT'),
  ];

  TabController _tabController;

  @override
  void initState() {
    super.initState();
    _tabController = new TabController(vsync: this, length: myTabs.length);
    _tabController.addListener(_handleTabChange);
  }

  @override
  void dispose() {
    _tabController.dispose();
    super.dispose();
  }

  void _handleTabChange() {
    _tabController.animateTo(0);
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Tab demo"),
        bottom: new TabBar(
          controller: _tabController,
          tabs: myTabs,
        ),
      ),
      body: new TabBarView(
        controller: _tabController,
        children: myTabs.map((Tab tab) {
          return new Center(child: new Text(tab.text));
        }).toList(),
      ),
      floatingActionButton: new FloatingActionButton(
        onPressed: () => _tabController.animateTo((_tabController.index + 1) % 2), // Switch tabs
        child: new Icon(Icons.swap_horiz),
      ),
    );
  }
}

enter image description here

1 Ответ

1 голос
/ 01 мая 2019

Это потому, что у вас есть слушатель при каждом изменении _tabController.addListener(_handleTabChange);, и каждый раз, когда вы вызываете _tabController.animateTo, выполняется метод _handleTabChange, а затем он просто анимируется на первую вкладку.

Удалить или прокомментировать эту строку

 _tabController.addListener(_handleTabChange);

И это должно работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...