質問編集履歴

5

文章の修正

2023/08/17 03:47

投稿

Jedda
Jedda

スコア80

test CHANGED
File without changes
test CHANGED
@@ -135,7 +135,7 @@
135
135
 
136
136
  ### 試したこと
137
137
 
138
- 1、like_button.dartの51~70行目をコメントアウトしてisLikedの状態を確認したところ、正常な挙動だったので、try~catchで問題が発生していることを特定。
138
+ 1、like_button.dartの51から70行目をコメントアウトしてisLikedの状態を確認したところ、正常な挙動だったので、trycatchで問題が発生していることを特定。
139
139
 
140
140
  2、likedUserIdsはその投稿にいいねをしたユーザーのIDを格納している変数だが、現在その投稿の投稿ユーザーのIDが格納されるようになっており、それが原因?という過程をしていますが、有識者の方々にアドバイスをいただきたいと考えています。
141
141
 

4

修正

2023/08/17 03:02

投稿

Jedda
Jedda

スコア80

test CHANGED
File without changes
test CHANGED
@@ -135,7 +135,7 @@
135
135
 
136
136
  ### 試したこと
137
137
 
138
- 1、like_button.dartの51~70行目をコメントアウトしてisLikedの状態を確認したところ、正常な挙動だったので、47行目から67行目で問題が発生していることを特定。
138
+ 1、like_button.dartの51~70行目をコメントアウトしてisLikedの状態を確認したところ、正常な挙動だったので、try~catchで問題が発生していることを特定。
139
139
 
140
140
  2、likedUserIdsはその投稿にいいねをしたユーザーのIDを格納している変数だが、現在その投稿の投稿ユーザーのIDが格納されるようになっており、それが原因?という過程をしていますが、有識者の方々にアドバイスをいただきたいと考えています。
141
141
 

3

参照先の追加

2023/08/16 14:46

投稿

Jedda
Jedda

スコア80

test CHANGED
File without changes
test CHANGED
@@ -140,6 +140,7 @@
140
140
  2、likedUserIdsはその投稿にいいねをしたユーザーのIDを格納している変数だが、現在その投稿の投稿ユーザーのIDが格納されるようになっており、それが原因?という過程をしていますが、有識者の方々にアドバイスをいただきたいと考えています。
141
141
 
142
142
  3、有識者の方にfireStoreのfieldValueを使用すればDBの値に齟齬が出ないのでは?というアドバイスを受けて、コードを変更中です。
143
+ https://skill-upupup-future.com/?p=1114
143
144
 
144
145
  4、常にtrueの状態に入っていることが問題なのでは?と考えているが、何をどうすれば良いかが考えつきそうで考えつかない状態です。
145
146
 

2

コードの修正

2023/08/16 14:33

投稿

Jedda
Jedda

スコア80

test CHANGED
File without changes
test CHANGED
@@ -37,6 +37,11 @@
37
37
  void initState() {
38
38
  super.initState();
39
39
  isLiked = widget.post.likedUserIds.contains(widget.post.postAccountId);
40
+ if (kDebugMode) {
41
+ print("isLiked: $isLiked");
42
+ print("widget.post.postAccountId: ${widget.post.postAccountId}");
43
+ print("widget.post.likedUserIds: ${widget.post.likedUserIds}");
44
+ }
40
45
  }
41
46
 
42
47
  void toggleLike() async {
@@ -66,8 +71,10 @@
66
71
  FirebaseFirestore.instance.collection('posts').doc(widget.post.id);
67
72
 
68
73
  final updateData = {
69
- 'liked_count': widget.post.likedCount,
74
+ 'liked_count': FieldValue.increment(isLiked ? -1 : 1),
70
- 'liked_user_ids': widget.post.likedUserIds,
75
+ 'liked_user_ids': isLiked
76
+ ? FieldValue.arrayRemove([widget.post.postAccountId])
77
+ : FieldValue.arrayUnion([widget.post.postAccountId]),
71
78
  };
72
79
 
73
80
  await ref.update(updateData);
@@ -94,6 +101,7 @@
94
101
  );
95
102
  }
96
103
  }
104
+
97
105
 
98
106
  ```
99
107
 
@@ -127,9 +135,15 @@
127
135
 
128
136
  ### 試したこと
129
137
 
130
- 1、like_button.dartの47行目から67行目をコメントアウトしてisLikedの状態を確認したところ、正常な挙動だったので、47行目から67行目で問題が発生していることを特定。
138
+ 1、like_button.dartの51~70行目をコメントアウトしてisLikedの状態を確認したところ、正常な挙動だったので、47行目から67行目で問題が発生していることを特定。
131
139
 
132
140
  2、likedUserIdsはその投稿にいいねをしたユーザーのIDを格納している変数だが、現在その投稿の投稿ユーザーのIDが格納されるようになっており、それが原因?という過程をしていますが、有識者の方々にアドバイスをいただきたいと考えています。
141
+
142
+ 3、有識者の方にfireStoreのfieldValueを使用すればDBの値に齟齬が出ないのでは?というアドバイスを受けて、コードを変更中です。
143
+
144
+ 4、常にtrueの状態に入っていることが問題なのでは?と考えているが、何をどうすれば良いかが考えつきそうで考えつかない状態です。
145
+
146
+ 5、30~49行目をコメントアウトして再実行すると、常にfalse状態に入ることを確認。
133
147
 
134
148
 
135
149
  ### 補足情報(FW/ツールのバージョンなど)

1

変更

2023/08/14 05:05

投稿

Jedda
Jedda

スコア80

test CHANGED
File without changes
test CHANGED
@@ -53,7 +53,6 @@
53
53
  widget.post.likedUserIds.add(widget.post.postAccountId);
54
54
  widget.post.likedCount++;
55
55
  }
56
-
57
56
  widget.post.likedCount = widget.post.likedUserIds.length;
58
57
  if (kDebugMode) {
59
58
  print("updatedLikedUserIds: $updatedLikedUserIds");
@@ -75,12 +74,9 @@
75
74
  if (kDebugMode) {
76
75
  print("Firestore data updated successfully");
77
76
  }
78
- } catch (e) {
77
+ } on FirebaseException catch (e) {
79
78
  if (kDebugMode) {
80
79
  print("Firestore update error: $e");
81
- }
82
- if (kDebugMode) {
83
- print("Firestore data updated successfully");
84
80
  }
85
81
  }
86
82
  }