Skip to content

Commit 01b02cf

Browse files
authored
Merge a831537 into 31568fa
2 parents 31568fa + a831537 commit 01b02cf

File tree

24 files changed

+611
-303
lines changed

24 files changed

+611
-303
lines changed

.github/workflows/build.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ jobs:
6868
- uses: VeryGoodOpenSource/very_good_coverage@v1.2.0
6969
with:
7070
path: packages/faye_dart/coverage/lcov.info
71-
min_coverage: 49
71+
min_coverage: 48
7272
- uses: VeryGoodOpenSource/very_good_coverage@v1.2.0
7373
with:
7474
path: packages/stream_feed_flutter_core/coverage/lcov.info

example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
archiveVersion = 1;
44
classes = {
55
};
6-
objectVersion = 46;
6+
objectVersion = 50;
77
objects = {
88

99
/* Begin PBXBuildFile section */
@@ -127,7 +127,7 @@
127127
97C146E61CF9000F007C117D /* Project object */ = {
128128
isa = PBXProject;
129129
attributes = {
130-
LastUpgradeCheck = 1020;
130+
LastUpgradeCheck = 1300;
131131
ORGANIZATIONNAME = "";
132132
TargetAttributes = {
133133
97C146ED1CF9000F007C117D = {

example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1020"
3+
LastUpgradeVersion = "1300"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

packages/stream_feed/lib/src/client/stream_feed_client_impl.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -318,9 +318,6 @@ class StreamFeedClientImpl implements StreamFeedClient {
318318
@override
319319
Future<User> getUser(String id, {bool withFollowCounts = false}) {
320320
assert(_ensureCredentials(), '');
321-
if (runner == Runner.client) {
322-
_logger.warning('We advice using `client.getUser` only server-side');
323-
}
324321

325322
final token =
326323
userToken ?? TokenHelper.buildUsersToken(secret!, TokenAction.read);

packages/stream_feed_flutter/example/lib/main.dart

Lines changed: 4 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ class _MyHomePageState extends State<MyHomePage> with StreamFeedMixin {
397397
child: const Icon(Icons.edit_outlined),
398398
onPressed: () => Navigator.of(context).push(
399399
MaterialPageRoute(
400-
builder: (_) => ComposeView(
400+
builder: (_) => ComposeScreen(
401401
textEditingController: TextEditingController(),
402402
),
403403
fullscreenDialog: true,
@@ -552,67 +552,15 @@ class _ProfileScreenState extends State<ProfileScreen> with StreamFeedMixin {
552552
style: Theme.of(context).textTheme.headline6,
553553
),
554554
const SizedBox(height: 8),
555-
Row(
556-
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
557-
children: [
558-
Column(
559-
mainAxisSize: MainAxisSize.min,
560-
children: [
561-
Text(
562-
'${widget.user?.followersCount ?? bloc.currentUser!.followersCount}',
563-
style: Theme.of(context).textTheme.headline6,
564-
),
565-
Text(
566-
'Followers',
567-
style: Theme.of(context).textTheme.bodyText1,
568-
),
569-
],
570-
),
571-
Column(
572-
mainAxisSize: MainAxisSize.min,
573-
children: [
574-
Text(
575-
'${widget.user?.followingCount ?? bloc.currentUser!.followingCount}',
576-
style: Theme.of(context).textTheme.headline6,
577-
),
578-
Text(
579-
'Following',
580-
style: Theme.of(context).textTheme.bodyText1,
581-
),
582-
],
583-
),
584-
],
585-
),
555+
FollowStatsWidget(user: widget.user),
586556
if (widget.user != null &&
587557
widget.user!.id != bloc.currentUser!.id) ...[
588558
Row(
589559
children: [
590560
const SizedBox(width: 16),
591561
Expanded(
592-
child: FutureBuilder<bool>(
593-
future: bloc.isFollowingFeed(
594-
followerId: widget.user!.id!),
595-
builder: (context, snapshot) {
596-
if (!snapshot.hasData) {
597-
return const SizedBox.shrink();
598-
} else {
599-
return OutlinedButton(
600-
child: Text(
601-
snapshot.data! ? 'Unfollow' : 'Follow'),
602-
onPressed: () async {
603-
if (snapshot.data!) {
604-
await bloc.unfollowFeed(
605-
unfolloweeId: widget.user!.id!);
606-
setState(() {});
607-
} else {
608-
await bloc.followFeed(
609-
followeeId: widget.user!.id!);
610-
setState(() {});
611-
}
612-
},
613-
);
614-
}
615-
},
562+
child: FollowButton(
563+
user: widget.user,
616564
),
617565
),
618566
const SizedBox(width: 8),
@@ -654,80 +602,3 @@ class _ProfileScreenState extends State<ProfileScreen> with StreamFeedMixin {
654602
);
655603
}
656604
}
657-
658-
class FollowingScreen extends StatefulWidget {
659-
const FollowingScreen({Key? key}) : super(key: key);
660-
661-
@override
662-
State<FollowingScreen> createState() => _FollowingScreenState();
663-
}
664-
665-
class _FollowingScreenState extends State<FollowingScreen>
666-
with StreamFeedMixin {
667-
@override
668-
Widget build(BuildContext context) {
669-
return Scaffold(
670-
appBar: AppBar(
671-
title: const Text('Following'),
672-
),
673-
body: FutureBuilder<List<Follow>>(
674-
future: client.flatFeed('timeline', bloc.currentUser!.id).following(),
675-
builder: (context, snapshot) {
676-
if (!snapshot.hasData) {
677-
return const Center(
678-
child: CircularProgressIndicator(),
679-
);
680-
} else {
681-
return ListView.builder(
682-
itemCount: snapshot.data!.length,
683-
itemBuilder: (context, index) {
684-
return ListTile(
685-
title: Text(snapshot.data![index].feedId),
686-
);
687-
},
688-
);
689-
}
690-
},
691-
),
692-
);
693-
}
694-
}
695-
696-
class FollowersScreen extends StatefulWidget {
697-
const FollowersScreen({Key? key}) : super(key: key);
698-
699-
@override
700-
State<FollowersScreen> createState() => _FollowersScreenState();
701-
}
702-
703-
class _FollowersScreenState extends State<FollowersScreen>
704-
with StreamFeedMixin {
705-
@override
706-
Widget build(BuildContext context) {
707-
return Scaffold(
708-
appBar: AppBar(
709-
title: const Text('Followers'),
710-
),
711-
body: FutureBuilder<List<Follow>>(
712-
future: client.flatFeed('user', bloc.currentUser!.id).followers(),
713-
builder: (context, snapshot) {
714-
if (!snapshot.hasData) {
715-
return const Center(
716-
child: CircularProgressIndicator(),
717-
);
718-
} else {
719-
return ListView.builder(
720-
itemCount: snapshot.data!.length,
721-
itemBuilder: (context, index) {
722-
final feedName = snapshot.data![index].feedId.split(':').last;
723-
return ListTile(
724-
title: Text(feedName),
725-
);
726-
},
727-
);
728-
}
729-
},
730-
),
731-
);
732-
}
733-
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export 'fullscreen_media.dart';
2+
export 'gallery_header.dart';
3+
export 'gallery_preview.dart';
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
export 'follow.dart';
12
export 'like.dart';
3+
export 'reaction.dart';
24
export 'reply_button.dart';
35
export 'repost.dart';
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:stream_feed_flutter_core/stream_feed_flutter_core.dart';
3+
4+
/// A button to follow or unfollow a user
5+
class FollowButton extends StatefulWidget {
6+
const FollowButton({Key? key, this.user}) : super(key: key);
7+
final User? user;
8+
9+
@override
10+
_FollowButtonState createState() => _FollowButtonState();
11+
}
12+
13+
class _FollowButtonState extends State<FollowButton> {
14+
@override
15+
Widget build(BuildContext context) {
16+
return FutureBuilder<bool>(
17+
future: FeedProvider.of(context)
18+
.bloc
19+
.isFollowingFeed(followerId: widget.user!.id!),
20+
builder: (context, snapshot) {
21+
if (!snapshot.hasData) {
22+
return const SizedBox.shrink();
23+
} else {
24+
return OutlinedButton(
25+
child: Text(snapshot.data! ? 'Unfollow' : 'Follow'),
26+
onPressed: () async {
27+
if (snapshot.data!) {
28+
await FeedProvider.of(context)
29+
.bloc
30+
.unfollowFeed(unfolloweeId: widget.user!.id!);
31+
setState(() {});
32+
} else {
33+
await FeedProvider.of(context)
34+
.bloc
35+
.followFeed(followeeId: widget.user!.id!);
36+
setState(() {});
37+
}
38+
},
39+
);
40+
}
41+
},
42+
);
43+
}
44+
}

packages/stream_feed_flutter/lib/src/widgets/buttons/reply_button.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import 'package:flutter/foundation.dart';
22
import 'package:flutter/material.dart';
33
import 'package:stream_feed_flutter/src/theme/stream_feed_theme.dart';
44
import 'package:stream_feed_flutter/src/widgets/icons.dart';
5-
import 'package:stream_feed_flutter/src/widgets/pages/compose_view.dart';
5+
import 'package:stream_feed_flutter/src/widgets/pages/compose_screen.dart';
66
import 'package:stream_feed_flutter_core/stream_feed_flutter_core.dart';
77

88
// ignore_for_file: cascade_invocations
@@ -58,7 +58,7 @@ class ReplyButton extends StatelessWidget {
5858
onPressed: () {
5959
Navigator.of(context).push(
6060
MaterialPageRoute(
61-
builder: (_) => ComposeView(
61+
builder: (_) => ComposeScreen(
6262
parentActivity: activity,
6363
feedGroup: feedGroup,
6464
textEditingController: TextEditingController(),

packages/stream_feed_flutter/lib/src/widgets/pages/compose_view.dart renamed to packages/stream_feed_flutter/lib/src/widgets/pages/compose_screen.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import 'package:stream_feed_flutter/src/widgets/activity/activity.dart';
55
import 'package:stream_feed_flutter/src/widgets/buttons/reactive_elevated_button.dart';
66
import 'package:stream_feed_flutter/stream_feed_flutter.dart';
77

8-
class ComposeView extends StatefulWidget {
9-
const ComposeView(
8+
/// A widget to react to an activity or compose a new activity.
9+
class ComposeScreen extends StatefulWidget {
10+
const ComposeScreen(
1011
{Key? key,
1112
this.parentActivity,
1213
this.feedGroup = 'user',
@@ -36,10 +37,10 @@ class ComposeView extends StatefulWidget {
3637
}
3738

3839
@override
39-
State<ComposeView> createState() => _ComposeViewState();
40+
State<ComposeScreen> createState() => _ComposeScreenState();
4041
}
4142

42-
class _ComposeViewState extends State<ComposeView> {
43+
class _ComposeScreenState extends State<ComposeScreen> {
4344
bool get _isReply => widget.parentActivity != null;
4445

4546
String get _hintText =>

0 commit comments

Comments
 (0)