fix: mark all as read

This commit is contained in:
Rongjian Zhang 2019-09-30 17:37:51 +08:00
parent e7b01a0c23
commit 0d164904f1
4 changed files with 26 additions and 50 deletions

View File

@ -4,6 +4,7 @@ import 'package:git_touch/models/code.dart';
import 'package:git_touch/models/auth.dart';
import 'package:git_touch/models/theme.dart';
import 'package:git_touch/screens/issues.dart';
import 'package:git_touch/screens/notification.dart';
import 'package:git_touch/screens/repository.dart';
import 'package:git_touch/screens/repositories.dart';
import 'package:git_touch/screens/user.dart';
@ -11,7 +12,6 @@ import 'package:primer/primer.dart';
import 'package:provider/provider.dart';
import 'package:git_touch/models/notification.dart';
import 'screens/news.dart';
import 'screens/notifications.dart';
import 'screens/search.dart';
import 'screens/login.dart';
import 'screens/issue.dart';
@ -154,8 +154,8 @@ class _HomeState extends State<Home> {
home: Scaffold(
body: _buildScreen(active),
bottomNavigationBar: BottomNavigationBar(
backgroundColor: Colors.white,
selectedItemColor: PrimerColors.blue500,
// unselectedItemColor: PrimerColors.gray500,
items: _buildNavigationItems(),
currentIndex: active,
type: BottomNavigationBarType.fixed,

View File

@ -6,16 +6,16 @@ import 'package:git_touch/scaffolds/utils.dart';
class TabStatefulScaffold<T> extends StatefulWidget {
final Widget title;
final Widget Function(T payload, int activeTab) bodyBuilder;
final Future<T> Function(int activeTab) onRefresh;
final Future<T> Function(int activeTab) fetchData;
final List<String> tabs;
final Widget Function(T payload) trailingBuilder;
final Widget Function(T payload, void Function() refresh) actionBuilder;
TabStatefulScaffold({
@required this.title,
@required this.bodyBuilder,
@required this.onRefresh,
@required this.fetchData,
@required this.tabs,
this.trailingBuilder,
this.actionBuilder,
});
@override
@ -71,7 +71,7 @@ class _TabStatefulScaffoldState<T> extends State<TabStatefulScaffold<T>> {
_error = '';
_loading = true;
});
_payload = await widget.onRefresh(_activeTab);
_payload = await widget.fetchData(_activeTab);
} catch (err) {
_error = err.toString();
throw err;
@ -95,16 +95,13 @@ class _TabStatefulScaffoldState<T> extends State<TabStatefulScaffold<T>> {
}
}
Widget _buildTrailing() {
if (_payload == null || widget.trailingBuilder == null) return null;
return widget.trailingBuilder(_payload);
}
@override
Widget build(BuildContext context) {
return TabScaffold(
title: widget.title,
trailing: _buildTrailing(),
trailing: widget.actionBuilder == null
? null
: widget.actionBuilder(_payload, _refresh),
tabs: widget.tabs,
activeTab: _activeTab,
onTabSwitch: _switch,

View File

@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:git_touch/models/theme.dart';
import 'package:git_touch/scaffolds/tab_stateful.dart';
import 'package:git_touch/widgets/action_entry.dart';
import 'package:git_touch/widgets/app_bar_title.dart';
import 'package:provider/provider.dart';
import 'package:git_touch/models/notification.dart';
@ -143,42 +145,7 @@ $key: pullRequest(number: ${item.number}) {
return TabStatefulScaffold(
title: AppBarTitle('Notifications'),
tabs: ['Unread', 'Paticipating', 'All'],
// trailing: GestureDetector(
// child: Icon(Icons.more_vert, size: 20),
// onTap: () async {
// int value = await showCupertinoDialog(
// context: context,
// builder: (context) {
// return CupertinoAlertDialog(
// title: Text('Select filter'),
// actions: textMap.entries.map((entry) {
// return CupertinoDialogAction(
// child: Text(entry.value),
// onPressed: () {
// Navigator.pop(context, entry.key);
// },
// );
// }).toList(),
// );
// },
// );
// _onSwitchTab(value);
// },
// ),
// trailingBuilder: (_) => IconButton(
// icon: Icon(Icons.done_all),
// onPressed: () async {
// // TODO:
// // var value = await Provider.of<ThemeModel>(context)
// // .showConfirm(context, 'Mark all as read?');
// // if (value) {
// // await Provider.of<SettingsModel>(context)
// // .putWithCredentials('/notifications');
// // await fetchNotifications(0);
// // }
// },
// ),
onRefresh: fetchNotifications,
fetchData: fetchNotifications,
bodyBuilder: (groupMap, activeTab) {
if (groupMap.isEmpty) return EmptyWidget();
@ -191,6 +158,18 @@ $key: pullRequest(number: ${item.number}) {
],
);
},
actionBuilder: (_, refresh) => ActionEntry(
iconData: Icons.done_all,
onTap: () async {
var value = await Provider.of<ThemeModel>(context)
.showConfirm(context, 'Mark all as read?');
if (value) {
await Provider.of<AuthModel>(context)
.putWithCredentials('/notifications');
refresh();
}
},
),
);
}
}

View File

@ -12,7 +12,7 @@ class TrendingScreen extends StatelessWidget {
return TabStatefulScaffold(
title: AppBarTitle('Trending'),
tabs: ['Repositories', 'Users'],
onRefresh: (tabIndex) async {
fetchData: (tabIndex) async {
var uri = Uri.parse('https://github-trending-api.now.sh')
.resolve(tabIndex == 1 ? '/developers' : '/');
var res = await http.get(uri);