diff --git a/lib/main.dart b/lib/main.dart index 6616396..6c5355d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -19,6 +19,10 @@ class _HomeState extends State { icon: Icon(Icons.rss_feed), title: Text('News'), ), + BottomNavigationBarItem( + icon: Icon(Icons.search), + title: Text('Search'), + ), BottomNavigationBarItem( icon: StreamBuilder(builder: (context, snapshot) { int count = snapshot.data; @@ -42,10 +46,6 @@ class _HomeState extends State { }), title: Text('Notification'), ), - BottomNavigationBarItem( - icon: Icon(Icons.search), - title: Text('Search'), - ), BottomNavigationBarItem( icon: Icon(Icons.person), title: Text('Me'), @@ -58,9 +58,9 @@ class _HomeState extends State { case 0: return NewsScreen(); case 1: - return NotificationScreen(); - case 2: return SearchScreen(); + case 2: + return NotificationScreen(); case 3: return ProfileScreen(); } diff --git a/lib/screens/news.dart b/lib/screens/news.dart index 316221d..09821f3 100644 --- a/lib/screens/news.dart +++ b/lib/screens/news.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import '../providers/settings.dart'; import '../widgets/event_item.dart'; +import '../widgets/loading.dart'; import '../utils/utils.dart'; class NewsScreen extends StatefulWidget { @@ -53,6 +54,17 @@ class NewsScreenState extends State { }); } + Widget _buildItems(BuildContext context, int index) { + // return Loading(more: false); + if (_events.length == 0) { + return Loading(more: false); + } else if (index == _events.length) { + return Loading(more: true); + } else { + return EventItem(_events[index]); + } + } + @override Widget build(context) { switch (SettingsProvider.of(context).layout) { @@ -66,20 +78,13 @@ class NewsScreenState extends State { SliverSafeArea( top: false, sliver: SliverList( - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - if (index == _events.length) { - return Padding( - padding: EdgeInsets.symmetric(vertical: 15), - child: CupertinoActivityIndicator(radius: 12), - ); - } else { - return EventItem(_events[index]); - } - }, - childCount: _events.length + 1, - ), + delegate: SliverChildBuilderDelegate(_buildItems, + childCount: _events.length + 1), ), + // sliver: SliverList( + // delegate: + // SliverChildBuilderDelegate(_buildItems, childCount: 1), + // ), ), ], ), @@ -100,16 +105,8 @@ class NewsScreenState extends State { child: ListView.builder( controller: _controller, itemCount: _events.length + 1, - itemBuilder: (context, index) { - if (index == _events.length) { - return Padding( - padding: EdgeInsets.symmetric(vertical: 15), - child: CircularProgressIndicator(), - ); - } else { - return EventItem(_events[index]); - } - }, + // itemCount: 1, + itemBuilder: _buildItems, ), ), ); diff --git a/lib/screens/notifications.dart b/lib/screens/notifications.dart index 53e286c..287bb5f 100644 --- a/lib/screens/notifications.dart +++ b/lib/screens/notifications.dart @@ -3,6 +3,7 @@ import 'package:flutter/cupertino.dart' hide Notification; import '../providers/settings.dart'; import '../screens/screens.dart'; import '../widgets/notification_item.dart'; +import '../widgets/loading.dart'; import '../utils/utils.dart'; class NotificationGroup { @@ -116,10 +117,7 @@ class NotificationScreenState extends State { delegate: SliverChildBuilderDelegate( (BuildContext context, int index) { if (index == groups.length) { - return Padding( - padding: EdgeInsets.symmetric(vertical: 15), - child: CupertinoActivityIndicator(radius: 12), - ); + return Loading(more: true); } else { return _buildGroupItem(context, index); } diff --git a/lib/widgets/issue_pull_request.dart b/lib/widgets/issue_pull_request.dart index d93b0a3..06773cd 100644 --- a/lib/widgets/issue_pull_request.dart +++ b/lib/widgets/issue_pull_request.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import '../widgets/widgets.dart'; +import '../widgets/loading.dart'; // Widget of issue screen and pull request screen class IssuePullRequestScreen extends StatefulWidget { @@ -39,7 +40,7 @@ class _IssuePullRequestScreenState extends State { Widget _buildBody(BuildContext context) { if (payload == null) { - return CupertinoActivityIndicator(); + return Loading(); } List items = payload['timeline']['nodes']; diff --git a/lib/widgets/loading.dart b/lib/widgets/loading.dart new file mode 100644 index 0000000..8fa6096 --- /dev/null +++ b/lib/widgets/loading.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/cupertino.dart'; +import '../providers/settings.dart'; + +class Loading extends StatelessWidget { + final bool more; + + Loading({this.more}); + + Widget _buildIndicator(BuildContext context) { + switch (SettingsProvider.of(context).layout) { + case LayoutMap.cupertino: + return CupertinoActivityIndicator(radius: 12); + default: + return Center( + child: SizedBox( + width: 24, + height: 24, + child: CircularProgressIndicator(), + ), + ); + } + } + + @override + Widget build(BuildContext context) { + if (more) { + return Padding( + padding: EdgeInsets.symmetric(vertical: 20), + child: _buildIndicator(context), + ); + } else { + return Padding( + padding: EdgeInsets.symmetric(vertical: 40), + child: _buildIndicator(context), + ); + } + } +}