从另一个类调用TabController.animate

如何解决从另一个类调用TabController.animate

所以我有4个标签标签栏类,
,这是标签2类别标签
,我想要的是显示在主主页标签中的横幅
,当我单击横幅时,它转到类别选项卡
不在类别页面上,但是如果您知道有人知道的话不知道该怎么做,请告诉我我知道tabcontroller animate方法,但是不知道如何从不同的类调用

    const int tabCount = 3;
    const int turnsToRotateRight = 1;
    const int turnsToRotateLeft = 3;
    
    class MainTabControlDelegate {
      int index;
      Function(String naMetab) changeTab;
      Function(int index) tabAnimateto;
    
      static MainTabControlDelegate _instance;
      static MainTabControlDelegate getInstance() {
        return _instance ??= MainTabControlDelegate._();
      }
    
      MainTabControlDelegate._();
    }
    
    class MainTabs extends StatefulWidget {
      MainTabs({Key key}) : super(key: key);
    
      @override
      MainTabsstate createState() => MainTabsstate();
    }
    class MainTabsstate extends State<MainTabs>
        with
            WidgetsBindingObserver,SingleTickerProviderStateMixin,AfterLayoutMixin {
      final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
    
      final PageStorageBucket bucket = PageStorageBucket();
    
      final StreamController<String> _controllerRouteWeb =
          StreamController<String>.broadcast();
    
      final _auth = FirebaseAuth.instance;
      var tabData;
      Map saveIndexTab = Map();
    
      FirebaseUser loggedInUser;
      bool isAdmin = false;
    
      final List<Widget> _tabView = [];
      TabController tabController;
    
      @override
      void afterFirstLayout(BuildContext context) {
        loadTabBar(context);
      }
    
      Widget tabView(Map<String,dynamic> data) {
        switch (data['layout']) {
          case 'category':
            return CategoriesScreen(
              key: Key("category"),layout: data['categoryLayout'],categories: data['categories'],images: data['images'],showChat: data['showChat'],);case 'search':
        return SearchScreen(key: Key("search"),showChat: data['showChat']);
      case 'cart':
        return CartScreen(showChat: data['showChat']);
      case 'profile':
        return UserScreen(
            settings: data['settings'],background: data['background'],showChat: data['showChat']);
      case 'blog':
        return HorizontalSliderList(config: data);
      case 'wishlist':
        return screen.WishList(canPop: false,showChat: data['showChat']);
      case 'page':
        return WebViewScreen(
            title: data['title'],url: data['url'],showChat: data['showChat']);
      case 'html':
        return StaticSite(data: data['data'],showChat: data['showChat']);
      case 'static':
        return StaticPage(data: data['data'],showChat: data['showChat']);
      case 'postScreen':
        return PostScreen(
            pageId: data['pageId'],pageTitle: data['pageTitle'],isLocatedInTabbar: true,showChat: data['showChat']);
      case 'dynamic':
      default:
        return HomeScreen();
    }
  }

  void changeTab(String naMetab) {
    if (kLayoutWeb) {
      _controllerRouteWeb.sink
          .add(naMetab.contains("/") ? naMetab : '/$naMetab');
    } else {
      tabController?.animateto(saveIndexTab[naMetab] ?? 0);
    }
  }

  void loadTabBar(context) {
    tabData = Provider.of<AppModel>(context,listen: false).appConfig['TabBar']
        as List;

    for (var i = 0; i < tabData.length; i++) {
      Map<String,dynamic> _dataOfTab = Map.from(tabData[i]);

      saveIndexTab[_dataOfTab['layout']] = i;
      _tabView.add(tabView(_dataOfTab));
    }

    setState(() {
      tabController = TabController(length: _tabView.length,vsync: this);
    });

    if (MainTabControlDelegate.getInstance().index != null) {
      tabController.animateto(MainTabControlDelegate.getInstance().index);
    } else {
      MainTabControlDelegate.getInstance().index = 0;
    }

    // Load the Design from FluxBuilder
    tabController.addListener(() {
      eventBus.fire('tab_${tabController.index}');
      if (_tabView[tabController.index] is SearchScreen) {
        eventBus.fire(UpdateSearchFilterEvent());
      }
      MainTabControlDelegate.getInstance().index = tabController.index;
    });
  }

这是横幅项目dart,我要在其中打开选项卡2,这里有一个onTap方法,如何在此处调用tabcontroller动画选项

    class BannerImageItem extends StatefulWidget {
  @override
  final Key key;
  final dynamic config;
  final double width;
  final double padding;
  final BoxFit BoxFit;
  final double radius;

  BannerImageItem({
    this.key,this.config,this.padding,this.width,this.BoxFit,this.radius,}) : super(key: key);

  @override
  _BannerImageItemState createState() => _BannerImageItemState();
}

class _BannerImageItemState extends State<BannerImageItem>
    with AfterLayoutMixin {
  List<Product> _products;

  @override
  void afterFirstLayout(BuildContext context) {
    /// for pre-load the list product
    if (widget.config['data'] != null) {
      print(widget.config['data']);
      _products = widget.config['data'];
    }
  }

  @override
  Widget build(BuildContext context) {
    double _padding =
        Tools.formatDouble(widget.config["padding"] ?? widget.padding ?? 10.0);
    double _radius = Tools.formatDouble(widget.config['radius'] ??
        (widget.radius != null ? widget.radius : 0.0));

    final screenSize = MediaQuery.of(context).size;
    final screenWidth =
        screenSize.width / (2 / (screenSize.height / screenSize.width));
    final itemWidth = widget.width ?? screenWidth;

    return GestureDetector(
      onTap: () { Navigator.of(context).pushNamed("/category");},child: Container(
        width: itemWidth,child: Padding(
          padding: EdgeInsets.only(left: _padding,right: _padding),child: ClipRRect(
            borderRadius: BorderRadius.circular(_radius),child: Tools.image(
              fit: widget.BoxFit ?? BoxFit.fitWidth,url: widget.config["image"],),);
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?