blob: 172fc501d5074012c8bb035590bd75f8abd3f640 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/material.dart';
import 'package:firebase_analytics/observer.dart';
class TabsPage extends StatefulWidget {
static const String routeName = '/tab';
TabsPage(this.observer);
final FirebaseAnalyticsObserver observer;
@override
State<StatefulWidget> createState() => new _TabsPageState(observer);
}
class _TabsPageState extends State<TabsPage>
with SingleTickerProviderStateMixin, RouteAware {
_TabsPageState(this.observer);
final FirebaseAnalyticsObserver observer;
TabController _controller;
int selectedIndex = 0;
final List<Tab> tabs = <Tab>[
const Tab(text: 'LEFT'),
const Tab(text: 'RIGHT'),
];
@override
void didChangeDependencies() {
super.didChangeDependencies();
observer.subscribe(this, ModalRoute.of(context));
}
@override
void dispose() {
observer.unsubscribe(this);
super.dispose();
}
@override
void initState() {
super.initState();
_controller = new TabController(
vsync: this,
length: tabs.length,
initialIndex: selectedIndex,
);
_controller.addListener(() {
setState(() {
if (selectedIndex != _controller.index) {
selectedIndex = _controller.index;
_sendCurrentTabToAnalytics();
}
});
});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
bottom: new TabBar(
controller: _controller,
tabs: tabs,
),
),
body: new TabBarView(
controller: _controller,
children: tabs.map((Tab tab) {
return new Center(child: new Text(tab.text));
}).toList(),
),
);
}
@override
void didPush() {
_sendCurrentTabToAnalytics();
}
@override
void didPopNext() {
_sendCurrentTabToAnalytics();
}
void _sendCurrentTabToAnalytics() {
observer.analytics.setCurrentScreen(
screenName: '${TabsPage.routeName}/tab$selectedIndex',
);
}
}