frosty/lib/screens/home/home.dart

120 lines
3.9 KiB
Dart
Raw Normal View History

2021-08-25 00:47:01 -04:00
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
2021-10-01 00:10:50 -04:00
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:frosty/screens/home/home_store.dart';
import 'package:frosty/screens/home/search/search.dart';
import 'package:frosty/screens/home/stream_list/stream_list_store.dart';
import 'package:frosty/screens/home/stream_list/streams_list.dart';
import 'package:frosty/screens/home/top/top.dart';
import 'package:frosty/screens/settings/settings.dart';
import 'package:frosty/screens/settings/stores/auth_store.dart';
import 'package:frosty/screens/settings/stores/settings_store.dart';
import 'package:provider/provider.dart';
2021-11-14 23:18:43 -05:00
class Home extends StatefulWidget {
2022-01-25 16:38:43 -05:00
const Home({Key? key}) : super(key: key);
2021-08-25 00:47:01 -04:00
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
late final _authStore = context.read<AuthStore>();
2021-12-28 03:14:08 -05:00
late final _homeStore = HomeStore(authStore: _authStore);
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([]);
return GestureDetector(
onTap: FocusScope.of(context).unfocus,
child: Scaffold(
appBar: AppBar(
centerTitle: false,
title: Observer(
builder: (_) {
final titles = [
if (_authStore.isLoggedIn) 'Following',
'Top',
'Search',
];
2022-03-30 19:29:51 -04:00
return Text(titles[_homeStore.selectedIndex]);
},
),
actions: [
IconButton(
tooltip: 'Settings',
icon: const Icon(Icons.settings_rounded),
onPressed: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
Settings(settingsStore: context.read<SettingsStore>()),
),
),
)
],
),
body: SafeArea(
child: Observer(
builder: (_) => IndexedStack(
index: _homeStore.selectedIndex,
children: [
if (_authStore.isLoggedIn)
StreamsList(
listType: ListType.followed,
scrollController: _homeStore.followedScrollController,
),
TopSection(
homeStore: _homeStore,
),
Search(
scrollController: _homeStore.searchScrollController,
),
],
),
),
),
bottomNavigationBar: Observer(
builder: (_) => BottomNavigationBar(
selectedFontSize: 12.0,
type: BottomNavigationBarType.fixed,
selectedLabelStyle: const TextStyle(fontWeight: FontWeight.w500),
unselectedLabelStyle: const TextStyle(fontWeight: FontWeight.w500),
items: [
if (_authStore.isLoggedIn)
BottomNavigationBarItem(
icon: _homeStore.selectedIndex == 0
? const Icon(Icons.favorite_rounded)
: const Icon(Icons.favorite_border_rounded),
label: 'Following',
tooltip: 'Followed streams',
),
const BottomNavigationBarItem(
icon: Icon(Icons.arrow_upward_rounded),
label: 'Top',
tooltip: 'Top streams and categories',
),
const BottomNavigationBarItem(
icon: Icon(Icons.search_rounded),
label: 'Search',
tooltip: 'Search for channels and categories',
),
],
currentIndex: _homeStore.selectedIndex,
onTap: _homeStore.handleTap,
),
),
),
2021-08-25 00:47:01 -04:00
);
}
@override
void dispose() {
_homeStore.dispose();
super.dispose();
}
2021-08-25 00:47:01 -04:00
}