Skip to content

Commit

Permalink
Merge pull request #43 from shinonome-inc/feature/request_available
Browse files Browse the repository at this point in the history
リクエスト回数を増やす、マイページ投稿ページネーション
  • Loading branch information
MiyuSato authored Apr 30, 2024
2 parents 74ee002 + a7cc76e commit 89a868a
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 16 deletions.
21 changes: 18 additions & 3 deletions qiita_app/lib/pages/my_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'package:qiita_app/models/article.dart';
import 'package:qiita_app/models/user.dart';
import 'package:qiita_app/pages/my_page_notlogin.dart';
import 'package:qiita_app/repository/qiita_repository.dart';
import 'package:qiita_app/services/articles_paginator.dart';
import 'package:qiita_app/widgets/app_title.dart';
import 'package:qiita_app/widgets/article_container.dart';
import 'package:qiita_app/widgets/network_error.dart';
Expand All @@ -21,11 +22,24 @@ class _MyPageState extends State<MyPage> {
User? loggedInUser;
bool isLoading = true;
bool hasNetworkError = false;
late final ArticlesPaginator articlesPaginator;

@override
void initState() {
super.initState();
fetchLoggedInUserInfo();
fetchLoggedInUserInfo().then((_) {
articlesPaginator = ArticlesPaginator(
fetchArticlesCallback: (page) =>
QiitaRepository.fetchUserArticles(loggedInUser!.id, page: page),
onDataUpdated: () => setState(() {}));
articlesPaginator.fetchArticles();
});
}

@override
void dispose() {
articlesPaginator.dispose();
super.dispose();
}

Future<void> fetchLoggedInUserInfo() async {
Expand Down Expand Up @@ -94,10 +108,11 @@ class _MyPageState extends State<MyPage> {
const SectionDivider(text: '投稿記事'),
Expanded(
child: ListView.builder(
itemCount: articles.length,
controller: articlesPaginator.scrollController,
itemCount: articlesPaginator.articles.length,
itemBuilder: (context, index) {
return ArticleContainer(
article: articles[index],
article: articlesPaginator.articles[index],
showAvatar: false,
);
},
Expand Down
50 changes: 37 additions & 13 deletions qiita_app/lib/repository/qiita_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,13 @@ class QiitaRepository {
// 検索クエリが空の場合、クエリパラメータを含まないURLを構築
url = Uri.parse('${Urls.qiitaBaseUrl}/items?page=$page');
}
final accessToken = await _getAccessToken();

try {
final response = await http.get(url);
final response = await http.get(url,
headers: accessToken.isNotEmpty
? {'Authorization': 'Bearer $accessToken'}
: null);

if (response.statusCode == 200) {
final List<dynamic> jsonResponse = jsonDecode(response.body);
Expand Down Expand Up @@ -88,7 +92,11 @@ class QiitaRepository {
static Future<List<Tag>> fetchQiitaTags() async {
final url =
Uri.parse('${Urls.qiitaBaseUrl}/tags?page=1&per_page=20&sort=count');
final response = await http.get(url);
final accessToken = await _getAccessToken();
final response = await http.get(url,
headers: accessToken.isNotEmpty
? {'Authorization': 'Bearer $accessToken'}
: null);

if (response.statusCode == 200) {
final List<dynamic> jsonResponse = jsonDecode(response.body);
Expand All @@ -106,8 +114,12 @@ class QiitaRepository {
String tagId, int page) async {
final url = Uri.parse(
'${Urls.qiitaBaseUrl}/tags/$tagId/items?page=$page&per_page=20');
final accessToken = await _getAccessToken();
try {
final response = await http.get(url);
final response = await http.get(url,
headers: accessToken.isNotEmpty
? {'Authorization': 'Bearer $accessToken'}
: null);

if (response.statusCode == 200) {
final List<dynamic> jsonResponse = jsonDecode(response.body);
Expand Down Expand Up @@ -163,8 +175,10 @@ class QiitaRepository {
final url = Uri.parse('${Urls.qiitaBaseUrl}/authenticated_user');
debugPrint('Requesting authenticated user info from: $url'); // リクエストURLのログ

final response =
await http.get(url, headers: {'Authorization': 'Bearer $accessToken'});
final response = await http.get(url,
headers: accessToken.isNotEmpty
? {'Authorization': 'Bearer $accessToken'}
: null);
debugPrint('Received response: ${response.body}'); // レスポンス内容のログ

if (response.statusCode == 200) {
Expand Down Expand Up @@ -192,10 +206,14 @@ class QiitaRepository {

static Future<List<Article>> fetchUserArticles(String userId,
{int page = 1}) async {
final accessToken = await _getAccessToken();
final url =
Uri.parse('${Urls.qiitaBaseUrl}/users/$userId/items?page=$page');
try {
final response = await http.get(url);
final response = await http.get(url,
headers: accessToken.isNotEmpty
? {'Authorization': 'Bearer $accessToken'}
: null);

if (response.statusCode == 200) {
final List<dynamic> jsonResponse = jsonDecode(response.body);
Expand All @@ -212,9 +230,10 @@ class QiitaRepository {
final accessToken = await _getAccessToken(); // アクセストークンを取得
final url = Uri.parse('${Urls.qiitaBaseUrl}/users/$userId/followees');
try {
final response = await http.get(url, headers: {
'Authorization': 'Bearer $accessToken', // 認証ヘッダーにアクセストークンを設定
});
final response = await http.get(url,
headers: accessToken.isNotEmpty
? {'Authorization': 'Bearer $accessToken'}
: null);

if (response.statusCode == 200) {
final List<dynamic> jsonResponse = jsonDecode(response.body);
Expand All @@ -231,9 +250,10 @@ class QiitaRepository {
final accessToken = await _getAccessToken();
final url = Uri.parse('${Urls.qiitaBaseUrl}/users/$userId/followers');
try {
final response = await http.get(url, headers: {
'Authorization': 'Bearer $accessToken',
});
final response = await http.get(url,
headers: accessToken.isNotEmpty
? {'Authorization': 'Bearer $accessToken'}
: null);

if (response.statusCode == 200) {
final List<dynamic> jsonResponse = jsonDecode(response.body);
Expand All @@ -252,9 +272,13 @@ class QiitaRepository {
}

static Future<User> fetchUserInfo(String userId) async {
final accessToken = await _getAccessToken();
final url = Uri.parse('${Urls.qiitaBaseUrl}/users/$userId');
try {
final response = await http.get(url);
final response = await http.get(url,
headers: accessToken.isNotEmpty
? {'Authorization': 'Bearer $accessToken'}
: null);

if (response.statusCode == 200) {
final Map<String, dynamic> jsonResponse = jsonDecode(response.body);
Expand Down

0 comments on commit 89a868a

Please sign in to comment.