Skip to content

Commit

Permalink
minor
Browse files Browse the repository at this point in the history
  • Loading branch information
felipebueno committed Jun 12, 2024
1 parent 17bf6c5 commit fe318cd
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 94 deletions.
95 changes: 1 addition & 94 deletions lib/views/pages/home_page.dart
Original file line number Diff line number Diff line change
@@ -1,17 +1,9 @@
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:stacker_news/data/models/post_type.dart';
import 'package:stacker_news/data/models/session.dart';
import 'package:stacker_news/data/sn_api_client.dart';
import 'package:stacker_news/main.dart';
import 'package:stacker_news/utils.dart';
import 'package:stacker_news/views/pages/auth/sign_in_page.dart';
import 'package:stacker_news/views/pages/notifications/notifications_page.dart';
import 'package:stacker_news/views/pages/profile/profile_page.dart';
import 'package:stacker_news/views/widgets/base_tab.dart';
import 'package:stacker_news/views/widgets/generic_page_scaffold.dart';
import 'package:stacker_news/views/widgets/maybe_new_post_button.dart';
import 'package:stacker_news/views/widgets/maybe_notifications_button.dart';
import 'package:stacker_news/views/widgets/sn_logo.dart';

class HomePage extends StatelessWidget {
Expand Down Expand Up @@ -56,88 +48,3 @@ class HomePage extends StatelessWidget {
);
}
}

class MaybeNotificationsButton extends StatefulWidget {
const MaybeNotificationsButton({super.key});

@override
State<MaybeNotificationsButton> createState() =>
_MaybeNotificationsButtonState();
}

class _MaybeNotificationsButtonState extends State<MaybeNotificationsButton> {
bool _hasNewNotes = false;
Timer? _timer;

void _startFetchingNewNotes() {
_timer?.cancel();

_timer = Timer.periodic(const Duration(seconds: 30), (timer) async {
final ret = await locator<SNApiClient>().hasNewNotes();

if (mounted) {
setState(() {
_hasNewNotes = ret;
});
}
});
}

@override
void dispose() {
_timer?.cancel();

super.dispose();
}

@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Utils.getSession(),
builder: (context, snapshot) {
if (snapshot.hasData && snapshot.data is Session) {
_startFetchingNewNotes();

final session = snapshot.data as Session;

return Row(
children: [
IconButton(
onPressed: () {
Navigator.pushNamed(
context,
NotificationsPage.id,
arguments: session.user?.name,
);
},
icon: Icon(
_hasNewNotes
? Icons.notifications_active
: Icons.notifications,
color: _hasNewNotes ? Colors.green : null,
),
),
TextButton(
child: Text('@${session.user?.name}'),
onPressed: () async {
Navigator.pushNamed(
context,
ProfilePage.id,
arguments: session.user?.name,
);
},
),
],
);
}

return IconButton(
icon: const Icon(Icons.login),
onPressed: () async {
Navigator.pushNamed(context, SignInPage.id);
},
);
},
);
}
}
95 changes: 95 additions & 0 deletions lib/views/widgets/maybe_notifications_button.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:stacker_news/data/models/session.dart';
import 'package:stacker_news/data/sn_api_client.dart';
import 'package:stacker_news/main.dart';
import 'package:stacker_news/utils.dart';
import 'package:stacker_news/views/pages/auth/sign_in_page.dart';
import 'package:stacker_news/views/pages/notifications/notifications_page.dart';
import 'package:stacker_news/views/pages/profile/profile_page.dart';

class MaybeNotificationsButton extends StatefulWidget {
const MaybeNotificationsButton({super.key});

@override
State<MaybeNotificationsButton> createState() =>
_MaybeNotificationsButtonState();
}

class _MaybeNotificationsButtonState extends State<MaybeNotificationsButton> {
bool _hasNewNotes = false;
Timer? _timer;

void _startFetchingNewNotes() {
_timer?.cancel();

_timer = Timer.periodic(const Duration(seconds: 30), (timer) async {
final ret = await locator<SNApiClient>().hasNewNotes();

if (mounted) {
setState(() {
_hasNewNotes = ret;
});
}
});
}

@override
void dispose() {
_timer?.cancel();

super.dispose();
}

@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Utils.getSession(),
builder: (context, snapshot) {
if (snapshot.hasData && snapshot.data is Session) {
_startFetchingNewNotes();

final session = snapshot.data as Session;

return Row(
children: [
IconButton(
onPressed: () {
Navigator.pushNamed(
context,
NotificationsPage.id,
arguments: session.user?.name,
);
},
icon: Icon(
_hasNewNotes
? Icons.notifications_active
: Icons.notifications,
color: _hasNewNotes ? Colors.green : null,
),
),
TextButton(
child: Text('@${session.user?.name}'),
onPressed: () async {
Navigator.pushNamed(
context,
ProfilePage.id,
arguments: session.user?.name,
);
},
),
],
);
}

return IconButton(
icon: const Icon(Icons.login),
onPressed: () async {
Navigator.pushNamed(context, SignInPage.id);
},
);
},
);
}
}

0 comments on commit fe318cd

Please sign in to comment.