diff --git a/lib/home.dart b/lib/home.dart index 09a66e0..71b3547 100644 --- a/lib/home.dart +++ b/lib/home.dart @@ -3,6 +3,7 @@ import 'package:flutter/cupertino.dart'; import 'package:git_touch/models/auth.dart'; import 'package:git_touch/models/notification.dart'; import 'package:git_touch/models/theme.dart'; +import 'package:git_touch/screens/gitea_orgs.dart'; import 'package:git_touch/screens/gitea_user.dart'; import 'package:git_touch/screens/gitlab_explore.dart'; import 'package:git_touch/screens/gitlab_groups.dart'; @@ -62,7 +63,7 @@ class _HomeState extends State { case PlatformType.gitea: switch (index) { case 0: - return GiteaUserScreen(null); + return GiteaOrgsScreen(); case 1: return GiteaUserScreen(null); } @@ -136,12 +137,8 @@ class _HomeState extends State { case PlatformType.gitea: return [ BottomNavigationBarItem( - icon: Icon(Icons.explore), - title: Text('Explore'), - ), - BottomNavigationBarItem( - icon: Icon(Icons.explore), - title: Text('Groups'), + icon: Icon(Icons.group), + title: Text('Organizations'), ), BottomNavigationBarItem( icon: Icon(Icons.person), diff --git a/lib/models/gitea.dart b/lib/models/gitea.dart index 92a3aad..9590abf 100644 --- a/lib/models/gitea.dart +++ b/lib/models/gitea.dart @@ -14,6 +14,18 @@ class GiteaUser { _$GiteaUserFromJson(json); } +@JsonSerializable(fieldRename: FieldRename.snake) +class GiteaOrg { + int id; + String username; + String fullName; + String avatarUrl; + String description; + GiteaOrg(); + factory GiteaOrg.fromJson(Map json) => + _$GiteaOrgFromJson(json); +} + @JsonSerializable(fieldRename: FieldRename.snake) class GiteaRepository { int id; diff --git a/lib/models/gitea.g.dart b/lib/models/gitea.g.dart index 01777a0..4d2365d 100644 --- a/lib/models/gitea.g.dart +++ b/lib/models/gitea.g.dart @@ -25,6 +25,23 @@ Map _$GiteaUserToJson(GiteaUser instance) => { 'created': instance.created?.toIso8601String(), }; +GiteaOrg _$GiteaOrgFromJson(Map json) { + return GiteaOrg() + ..id = json['id'] as int + ..username = json['username'] as String + ..fullName = json['full_name'] as String + ..avatarUrl = json['avatar_url'] as String + ..description = json['description'] as String; +} + +Map _$GiteaOrgToJson(GiteaOrg instance) => { + 'id': instance.id, + 'username': instance.username, + 'full_name': instance.fullName, + 'avatar_url': instance.avatarUrl, + 'description': instance.description, + }; + GiteaRepository _$GiteaRepositoryFromJson(Map json) { return GiteaRepository() ..id = json['id'] as int diff --git a/lib/screens/gitea_orgs.dart b/lib/screens/gitea_orgs.dart new file mode 100644 index 0000000..48246dc --- /dev/null +++ b/lib/screens/gitea_orgs.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:git_touch/models/auth.dart'; +import 'package:git_touch/models/gitea.dart'; +import 'package:git_touch/scaffolds/list_stateful.dart'; +import 'package:git_touch/widgets/app_bar_title.dart'; +import 'package:git_touch/widgets/user_item.dart'; +import 'package:provider/provider.dart'; + +class GiteaOrgsScreen extends StatelessWidget { + // final String branch; // TODO: + Future> _query(BuildContext context, + [int page = 1]) async { + final auth = Provider.of(context); + final res = await auth.fetchGiteaWithPage('/orgs?limit=20'); + return ListPayload( + cursor: res.cursor, + hasMore: res.hasMore, + items: (res.data as List).map((v) => GiteaOrg.fromJson(v)).toList(), + ); + } + + @override + Widget build(BuildContext context) { + return ListStatefulScaffold( + title: AppBarTitle('Organizations'), + onRefresh: () => _query(context), + onLoadMore: (cursor) => _query(context, cursor), + itemBuilder: (v) { + return UserItem( + avatarUrl: v.avatarUrl, + login: v.username, + bio: Text(v.description ?? ''), + url: '', + ); + }, + ); + } +} diff --git a/lib/screens/gitlab_groups.dart b/lib/screens/gitlab_groups.dart index e561cf6..30c3d32 100644 --- a/lib/screens/gitlab_groups.dart +++ b/lib/screens/gitlab_groups.dart @@ -23,7 +23,7 @@ class GitlabGroups extends StatelessWidget { @override Widget build(BuildContext context) { return ListStatefulScaffold( - title: AppBarTitle('Explore'), + title: AppBarTitle('Groups'), onRefresh: () => _query(context), onLoadMore: (page) => _query(context, page), itemBuilder: (v) {