/
app.dart
79 lines (73 loc) · 2.33 KB
/
app.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import 'package:flews/github/repos_page.dart';
import 'package:flews/hackernews/stories_page.dart';
import 'package:flews/imgur/images_page.dart';
import 'package:flews/reddit/posts_page.dart';
import 'package:flews/services.dart';
import 'package:flutter/material.dart';
class FlewsApp extends StatefulWidget {
@override
FlewsAppState createState() => FlewsAppState();
}
class FlewsAppState extends State<FlewsApp>
with SingleTickerProviderStateMixin {
TabController _controller;
Page _currentTab;
@override
void initState() {
super.initState();
_controller = TabController(vsync: this, length: PAGES.length);
_controller.addListener(() {
setState(() {
_currentTab = PAGES[_controller.index];
});
});
_currentTab = PAGES[_controller.index];
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
ThemeData themeData = ThemeData(
primarySwatch: _currentTab.color,
primaryColor: _currentTab.color,
accentColor: _currentTab.color,
brightness: Brightness.dark);
return MaterialApp(
title: _currentTab.text,
theme: themeData,
home: Scaffold(
appBar: AppBar(
title: Text(_currentTab.text),
bottom: TabBar(
controller: _controller,
isScrollable: false,
indicatorColor: themeData.textTheme.title.color,
tabs: PAGES.map((Page page) {
return Tab(
icon: ImageIcon(AssetImage('images/icons/${page.icon}')));
}).toList(),
),
),
body: TabBarView(
controller: _controller,
children: PAGES.map((Page page) {
switch (page.service) {
case Service.HACKER_NEWS:
return StoriesPage();
break;
case Service.REDDIT:
return PostsPage();
break;
case Service.IMGUR:
return ImagesPage();
break;
case Service.GITHUB:
return ReposPage();
break;
}
}).toList())));
}
}