blob: 9f09998a16e44707ffa3450ef2363723cc72d20a [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 {
TabsPage(this.observer);
final FirebaseAnalyticsObserver observer;
static const String routeName = '/tab';
@override
State<StatefulWidget> createState() => _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 = 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 Scaffold(
appBar: AppBar(
bottom: TabBar(
controller: _controller,
tabs: tabs,
),
),
body: TabBarView(
controller: _controller,
children: tabs.map((Tab tab) {
return Center(child: Text(tab.text));
}).toList(),
),
);
}
@override
void didPush() {
_sendCurrentTabToAnalytics();
}
@override
void didPopNext() {
_sendCurrentTabToAnalytics();
}
void _sendCurrentTabToAnalytics() {
observer.analytics.setCurrentScreen(
screenName: '${TabsPage.routeName}/tab$selectedIndex',
);
}
}