From 6503bf9fb5ae97ec04babc49b05d3fa885f39cd3 Mon Sep 17 00:00:00 2001 From: azuma502 Date: Thu, 25 Apr 2024 15:03:31 +0900 Subject: [PATCH] =?UTF-8?q?mypage=E6=8A=95=E7=A8=BF=E8=A8=98=E4=BA=8B?= =?UTF-8?q?=E7=84=A1=E9=99=90=E3=82=B9=E3=82=AF=E3=83=AD=E3=83=BC=E3=83=AB?= =?UTF-8?q?=E3=80=81=E3=83=AA=E3=82=AF=E3=82=A8=E3=82=B9=E3=83=88=E5=9B=9E?= =?UTF-8?q?=E6=95=B0=E5=A2=97=E3=82=84=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/follower_following_list_page.dart | 6 ++- qiita_app/lib/pages/my_page.dart | 21 +++++++-- .../lib/repository/qiita_repository.dart | 46 +++++++++++++------ 3 files changed, 53 insertions(+), 20 deletions(-) diff --git a/qiita_app/lib/pages/follower_following_list_page.dart b/qiita_app/lib/pages/follower_following_list_page.dart index e645cfb..51331d2 100644 --- a/qiita_app/lib/pages/follower_following_list_page.dart +++ b/qiita_app/lib/pages/follower_following_list_page.dart @@ -68,9 +68,11 @@ class _FollowerFollowingListPageState extends State { List fetchedUsers; if (widget.listType == 'following') { - fetchedUsers = await QiitaRepository.fetchFollowingUsers(widget.userId); + fetchedUsers = await QiitaRepository.fetchFollowingUsers( + widget.userId, currentPage); } else { - fetchedUsers = await QiitaRepository.fetchFollowersUsers(widget.userId); + fetchedUsers = await QiitaRepository.fetchFollowersUsers( + widget.userId, currentPage); } debugPrint('${fetchedUsers.length} users loaded successfully'); diff --git a/qiita_app/lib/pages/my_page.dart b/qiita_app/lib/pages/my_page.dart index 4ea8fa7..753c867 100644 --- a/qiita_app/lib/pages/my_page.dart +++ b/qiita_app/lib/pages/my_page.dart @@ -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'; @@ -21,11 +22,24 @@ class _MyPageState extends State { 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 fetchLoggedInUserInfo() async { @@ -94,10 +108,11 @@ class _MyPageState extends State { 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, ); }, diff --git a/qiita_app/lib/repository/qiita_repository.dart b/qiita_app/lib/repository/qiita_repository.dart index dd1b39e..0622a6a 100644 --- a/qiita_app/lib/repository/qiita_repository.dart +++ b/qiita_app/lib/repository/qiita_repository.dart @@ -172,11 +172,15 @@ class QiitaRepository { final accessToken = await _getAccessToken(); // アクセストークンを取得するメソッド debugPrint('Fetched access token: $accessToken'); // ログ出力でトークン確認 - final url = Uri.parse('${Urls.qiitaBaseUrl}/authenticated_user'); + final url = Uri.parse('${Urls.qiitaBaseUrl}/users/yametaro'); debugPrint('Requesting authenticated user info from: $url'); // リクエストURLのログ - final response = - await http.get(url, headers: {'Authorization': 'Bearer $accessToken'}); + final response = await http.get(url); + + // final response = await http.get(url, + // headers: accessToken.isNotEmpty + // ? {'Authorization': 'Bearer $accessToken'} + // : null); debugPrint('Received response: ${response.body}'); // レスポンス内容のログ if (response.statusCode == 200) { @@ -204,10 +208,14 @@ class QiitaRepository { static Future> 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 jsonResponse = jsonDecode(response.body); @@ -220,13 +228,15 @@ class QiitaRepository { } } - static Future> fetchFollowingUsers(String userId) async { + static Future> fetchFollowingUsers(String userId, int page) async { final accessToken = await _getAccessToken(); // アクセストークンを取得 - final url = Uri.parse('${Urls.qiitaBaseUrl}/users/$userId/followees'); + final url = + Uri.parse('${Urls.qiitaBaseUrl}/users/$userId/followees?page=$page'); 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 jsonResponse = jsonDecode(response.body); @@ -239,13 +249,15 @@ class QiitaRepository { } } - static Future> fetchFollowersUsers(String userId) async { + static Future> fetchFollowersUsers(String userId, int page) async { final accessToken = await _getAccessToken(); - final url = Uri.parse('${Urls.qiitaBaseUrl}/users/$userId/followers'); + final url = + Uri.parse('${Urls.qiitaBaseUrl}/users/$userId/followers?page=$page'); 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 jsonResponse = jsonDecode(response.body); @@ -264,9 +276,13 @@ class QiitaRepository { } static Future 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 jsonResponse = jsonDecode(response.body);