mirror of
https://github.com/pd4d10/git-touch.git
synced 2026-04-28 18:39:26 -05:00
feat: extract provider, add android news screen
This commit is contained in:
@@ -68,6 +68,10 @@ class EventItem extends StatelessWidget {
|
||||
case 'ForkEvent':
|
||||
return TextSpan(children: [
|
||||
TextSpan(text: ' forked '),
|
||||
createRepoLinkSpan(context, event.payload['forkee']['owner']['login'],
|
||||
event.payload['forkee']['name']),
|
||||
TextSpan(text: ' from '),
|
||||
_buildRepo(context),
|
||||
]);
|
||||
default:
|
||||
return TextSpan(
|
||||
@@ -116,7 +120,7 @@ class EventItem extends StatelessWidget {
|
||||
TextSpan _buildRepo(BuildContext context) {
|
||||
String name = event.repo.name;
|
||||
var arr = name.split('/');
|
||||
return _buildLink(context, name, () => RepoScreen(arr[0], arr[1]));
|
||||
return createRepoLinkSpan(context, arr[0], arr[1]);
|
||||
}
|
||||
|
||||
TextSpan _buildIssue(BuildContext context) {
|
||||
|
||||
66
lib/widgets/news_provider.dart
Normal file
66
lib/widgets/news_provider.dart
Normal file
@@ -0,0 +1,66 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:git_flux/utils/utils.dart';
|
||||
|
||||
typedef Future<void> Refresh();
|
||||
typedef Widget BuildWithContent(
|
||||
{List<Event> events, ScrollController controller, Refresh refresh});
|
||||
|
||||
class NewsProvider extends StatefulWidget {
|
||||
final BuildWithContent build;
|
||||
|
||||
NewsProvider(this.build);
|
||||
|
||||
@override
|
||||
NewsProviderState createState() => NewsProviderState();
|
||||
}
|
||||
|
||||
class NewsProviderState extends State<NewsProvider> {
|
||||
int page = 1;
|
||||
bool loading = false;
|
||||
List<Event> _events = [];
|
||||
ScrollController _controller = ScrollController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_refresh();
|
||||
_controller.addListener(() {
|
||||
if (_controller.offset + 100 > _controller.position.maxScrollExtent &&
|
||||
!_controller.position.outOfRange &&
|
||||
!loading) {
|
||||
_loadMore();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> _refresh() async {
|
||||
setState(() {
|
||||
loading = true;
|
||||
});
|
||||
page = 1;
|
||||
var items = await fetchEvents(page);
|
||||
setState(() {
|
||||
loading = false;
|
||||
_events = items;
|
||||
});
|
||||
}
|
||||
|
||||
_loadMore() async {
|
||||
print('more');
|
||||
setState(() {
|
||||
loading = true;
|
||||
});
|
||||
page = page + 1;
|
||||
var items = await fetchEvents(page);
|
||||
setState(() {
|
||||
loading = false;
|
||||
_events.addAll(items);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(context) {
|
||||
return widget.build(
|
||||
events: _events, controller: _controller, refresh: _refresh);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
export 'avatar.dart';
|
||||
export 'event_item.dart';
|
||||
export 'user_name.dart';
|
||||
export 'timeline_item.dart';
|
||||
export 'comment_item.dart';
|
||||
|
||||
Reference in New Issue
Block a user