Extract headers into a separate widget

This commit is contained in:
Vishnu Mohandas 2021-02-06 00:34:15 +05:30
parent b1d5d9169c
commit 458b9550c0

View file

@ -44,11 +44,10 @@ class _HomeWidgetState extends State<HomeWidget> {
final _deviceFolderGalleryWidget = CollectionsGalleryWidget();
final _sharedCollectionGallery = SharedCollectionGallery();
final _selectedFiles = SelectedFiles();
final _memoriesWidget = MemoriesWidget();
final _signInHeader = SignInHeader();
final _syncIndicator = SyncIndicator();
final _settingsButton = SettingsButton();
static const _headerWidget = HeaderWidget();
final PageController _pageController = PageController();
final _future = FileRepository.instance.loadFiles();
GlobalKey<ConvexAppBarState> _appBarKey = GlobalKey<ConvexAppBarState>();
StreamSubscription<LocalPhotosUpdatedEvent> _photosUpdatedEvent;
@ -56,8 +55,10 @@ class _HomeWidgetState extends State<HomeWidget> {
@override
void initState() {
_logger.info("Building initstate");
_photosUpdatedEvent =
Bus.instance.on<LocalPhotosUpdatedEvent>().listen((event) {
_logger.info("Building because local photos updated");
setState(() {});
});
_tabChangedEventSubscription =
@ -74,6 +75,7 @@ class _HomeWidgetState extends State<HomeWidget> {
}
});
_selectedFiles.addListener(() {
_logger.info("Building because selected files updated");
setState(() {});
});
_initDeepLinks();
@ -82,6 +84,7 @@ class _HomeWidgetState extends State<HomeWidget> {
@override
Widget build(BuildContext context) {
_logger.info("Building home_Widget");
return Scaffold(
appBar: _selectedFiles.files.isEmpty
? PreferredSize(
@ -152,26 +155,20 @@ class _HomeWidgetState extends State<HomeWidget> {
Widget _getMainGalleryWidget() {
return FutureBuilder(
future: FileRepository.instance.loadFiles(),
future: _future,
builder: (context, snapshot) {
if (snapshot.hasData) {
final headerWidgets = List<Widget>();
headerWidgets.addAll([
_syncIndicator,
_signInHeader,
_memoriesWidget,
]);
var header;
if (_selectedFiles.files.isEmpty &&
Configuration.instance.hasConfiguredAccount()) {
header = Container(
margin: EdgeInsets.only(top: 12),
child: Stack(
children: [_settingsButton, Column(children: headerWidgets)],
children: [_settingsButton, _headerWidget],
),
);
} else {
header = Column(children: headerWidgets);
header = _headerWidget;
}
return Gallery(
syncLoader: () {
@ -244,6 +241,27 @@ class _HomeWidgetState extends State<HomeWidget> {
}
}
class HeaderWidget extends StatelessWidget {
static const _memoriesWidget = const MemoriesWidget();
static const _signInHeader = const SignInHeader();
static const _syncIndicator = const SyncIndicator();
const HeaderWidget({
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
Logger("Header").info("Building header widget");
const list = [
_syncIndicator,
_signInHeader,
_memoriesWidget,
];
return Column(children: list);
}
}
class BottomNavBarStyle extends StyleHook {
@override
double get activeIconSize => 32;