Флаттер TabBarView не изменяется с помощью TabController, нажав на вкладки / вкладки не меняется при перелистывании, но TabbarView делает - PullRequest
1 голос
/ 10 января 2020

Я пробовал множество решений по изменению заголовка панели приложения с помощью вкладок, и я решил это, но теперь есть небольшая проблема; панель приложений изменяется с вкладками при нажатии вкладок, но не с помощью панели вкладок. Пролистывание влево или вправо в представлении панели вкладок изменяет представление вкладок, но не вкладок (заголовок панели приложений тоже не меняется).

мой код ниже:

final List<Tabs> _tabs = [new Tabs(title: "Registered UAS", icon: new IconData(58826, fontFamily: 'MaterialIcons')),
new Tabs(title: "Registration", icon: IconData(57680, fontFamily: 'MaterialIcons'))
];

Tabs _myHandler ;

void initState() {
super.initState();
_controller = new TabController(length: 2, vsync: this);
_myHandler = _tabs[0];
_controller.addListener(_handleSelected);
}
void _handleSelected() {
setState(() {
  _myHandler= _tabs[_controller.index];
});
}

@override
Widget build(BuildContext context) {
return WillPopScope(
    child: DefaultTabController(
      length: 2,
      child: new Scaffold(
          appBar: AppBar(
            title: Text(_myHandler.title),
            bottom: new TabBar(
              controller: _controller,
              tabs: <Widget>[
                new Tab(icon: new Icon(_tabs[0].icon)),
                new Tab(icon: new Icon(_tabs[1].icon))
              ],
            ),
          ),
          body: new TabBarView(children: [...])

Я следовал это для изменения заголовка панели приложения при смене вкладки, и теперь я застрял в подобной ситуации, как this , за исключением того, что я не думаю, что решение для меня работает (я пробовал)

Ответы [ 2 ]

0 голосов
/ 26 января 2020

Если вы хотите использовать собственный контроллер, то вам не следует использовать виджет DefaultTabController. В примере, который вы используете DefaultTabController, отсутствует.

Если вы хотите использовать собственный контроллер, вы должны использовать этот пример. https://api.flutter.dev/flutter/material/TabController-class.html

Если вы хотите использовать DefaultTabController без собственного контроллера, вам следует этот пример.

import 'package:flutter/material.dart';

void main() {
  runApp(TabBarDemo());
}

class TabBarDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DefaultTabController(
        length: 3,
        child: Scaffold(
          appBar: AppBar(
            bottom: TabBar(
              tabs: [
                Tab(icon: Icon(Icons.directions_car)),
                Tab(icon: Icon(Icons.directions_transit)),
                Tab(icon: Icon(Icons.directions_bike)),
              ],
            ),
            title: Text('Tabs Demo'),
          ),
          body: TabBarView(
            children: [
              Icon(Icons.directions_car),
              Icon(Icons.directions_transit),
              Icon(Icons.directions_bike),
            ],
          ),
        ),
      ),
    );
  }
} 
0 голосов
/ 10 января 2020

решил это, добавив controller: _controller, под TabBarView

...