add multiplr_conversation example

This commit is contained in:
Salvatore Giordano
2020-02-24 16:46:05 +01:00
parent d3b6a7e5e5
commit e0e36f50cc
7 changed files with 139 additions and 161 deletions
+76 -76
View File
@@ -2,17 +2,13 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="8a42da92-86e3-4aa3-b70d-cc6a9fefa34f" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/.idea/dictionaries/salvatoregiordano.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/example/lib/multiple_conversation.dart" afterDir="false" />
<change afterPath="$PROJECT_DIR$/lib/src/channel_image.dart" afterDir="false" />
<change afterPath="$PROJECT_DIR$/lib/src/channel_list_view.dart" afterDir="false" />
<change afterPath="$PROJECT_DIR$/lib/src/channel_name_text.dart" afterDir="false" />
<change afterPath="$PROJECT_DIR$/lib/src/channel_preview.dart" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/example/lib/multiple_conversation.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/lib/multiple_conversation.dart" afterDir="false" />
<change beforePath="$PROJECT_DIR$/example/lib/single_conversation.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/lib/single_conversation.dart" afterDir="false" />
<change beforePath="$PROJECT_DIR$/example/test/widget_test.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/test/widget_test.dart" afterDir="false" />
<change beforePath="$PROJECT_DIR$/example/test/widget_test.dart" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/lib/src/channel_list_view.dart" beforeDir="false" afterPath="$PROJECT_DIR$/lib/src/channel_list_view.dart" afterDir="false" />
<change beforePath="$PROJECT_DIR$/lib/src/channel_preview.dart" beforeDir="false" afterPath="$PROJECT_DIR$/lib/src/channel_preview.dart" afterDir="false" />
<change beforePath="$PROJECT_DIR$/lib/src/stream_channel.dart" beforeDir="false" afterPath="$PROJECT_DIR$/lib/src/stream_channel.dart" afterDir="false" />
<change beforePath="$PROJECT_DIR$/lib/stream_chat_flutter.dart" beforeDir="false" afterPath="$PROJECT_DIR$/lib/stream_chat_flutter.dart" afterDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
@@ -25,15 +21,6 @@
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/analysis_options.yaml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="799">
<caret line="47" column="28" selection-start-line="47" selection-start-column="28" selection-end-line="47" selection-end-column="28" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../stream_chat_dart/lib/src/client.dart">
<provider selected="true" editor-type-id="text-editor">
@@ -43,11 +30,11 @@
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/src/channel_list_view.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="890">
<caret line="133" column="14" selection-start-line="133" selection-start-column="14" selection-end-line="133" selection-end-column="14" />
<state relative-caret-position="136">
<caret line="8" column="26" selection-start-line="8" selection-start-column="8" selection-end-line="8" selection-end-column="26" />
<folding>
<element signature="e#0#39#0" expanded="true" />
</folding>
@@ -58,8 +45,8 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/src/channel_preview.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="884">
<caret line="52" column="40" selection-start-line="52" selection-start-column="40" selection-end-line="52" selection-end-column="40" />
<state relative-caret-position="782">
<caret line="46" column="31" selection-start-line="46" selection-start-column="31" selection-end-line="46" selection-end-column="31" />
<folding>
<element signature="e#0#46#0" expanded="true" />
</folding>
@@ -70,8 +57,8 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/src/stream_chat.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="238">
<caret line="14" column="25" selection-start-line="14" selection-start-column="25" selection-end-line="14" selection-end-column="25" />
<state relative-caret-position="1309">
<caret line="77" column="28" selection-start-line="77" selection-start-column="28" selection-end-line="77" selection-end-column="28" />
<folding>
<element signature="e#0#20#0" expanded="true" />
</folding>
@@ -80,10 +67,22 @@
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/src/message_widget.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="875">
<caret line="79" column="26" selection-start-line="79" selection-start-column="26" selection-end-line="79" selection-end-column="26" />
<folding>
<element signature="e#0#64#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/lib/src/stream_channel.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1213">
<caret line="102" selection-start-line="102" selection-end-line="102" />
<state relative-caret-position="170">
<caret line="10" column="9" selection-start-line="10" selection-start-column="9" selection-end-line="10" selection-end-column="9" />
<folding>
<element signature="e#0#20#0" expanded="true" />
</folding>
@@ -103,8 +102,8 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/src/message_list_view.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="874">
<caret line="207" column="30" selection-start-line="207" selection-start-column="30" selection-end-line="207" selection-end-column="30" />
<state relative-caret-position="1230">
<caret line="258" column="53" selection-start-line="258" selection-start-column="53" selection-end-line="258" selection-end-column="53" />
<folding>
<element signature="e#0#20#0" expanded="true" />
</folding>
@@ -147,6 +146,7 @@
<find>dispose</find>
<find>CHANNEL-</find>
<find>_userController</find>
<find>onTap</find>
</findStrings>
</component>
<component name="Git.Settings">
@@ -163,16 +163,16 @@
<option value="$PROJECT_DIR$/lib/src/user_avatar.dart" />
<option value="$PROJECT_DIR$/lib/src/message_widget.dart" />
<option value="$PROJECT_DIR$/lib/src/message_input.dart" />
<option value="$PROJECT_DIR$/lib/src/message_list_view.dart" />
<option value="$PROJECT_DIR$/example/lib/main.dart" />
<option value="$PROJECT_DIR$/lib/src/channel_image.dart" />
<option value="$PROJECT_DIR$/lib/src/channel_preview.dart" />
<option value="$PROJECT_DIR$/lib/stream_chat_flutter.dart" />
<option value="$PROJECT_DIR$/lib/src/stream_channel.dart" />
<option value="$PROJECT_DIR$/example/lib/multiple_conversation.dart" />
<option value="$PROJECT_DIR$/example/lib/single_conversation.dart" />
<option value="$PROJECT_DIR$/lib/src/stream_chat.dart" />
<option value="$PROJECT_DIR$/lib/src/message_list_view.dart" />
<option value="$PROJECT_DIR$/lib/src/channel_preview.dart" />
<option value="$PROJECT_DIR$/lib/src/channel_list_view.dart" />
<option value="$PROJECT_DIR$/example/lib/multiple_conversation.dart" />
<option value="$PROJECT_DIR$/lib/src/stream_channel.dart" />
</list>
</option>
</component>
@@ -383,16 +383,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/message_widget.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="875">
<caret line="79" column="26" selection-start-line="79" selection-start-column="26" selection-end-line="79" selection-end-column="26" />
<folding>
<element signature="e#0#64#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/message_input.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="119">
@@ -448,26 +438,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/message_list_view.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="874">
<caret line="207" column="30" selection-start-line="207" selection-start-column="30" selection-end-line="207" selection-end-column="30" />
<folding>
<element signature="e#0#20#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/channel_preview.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="884">
<caret line="52" column="40" selection-start-line="52" selection-start-column="40" selection-end-line="52" selection-end-column="40" />
<folding>
<element signature="e#0#46#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../flutter/packages/flutter/lib/src/widgets/async.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="580">
@@ -475,16 +445,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/stream_channel.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1213">
<caret line="102" selection-start-line="102" selection-end-line="102" />
<folding>
<element signature="e#0#20#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../stream_chat_dart/lib/src/client.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="485">
@@ -494,8 +454,28 @@
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/stream_chat.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="238">
<caret line="14" column="25" selection-start-line="14" selection-start-column="25" selection-end-line="14" selection-end-column="25" />
<state relative-caret-position="1309">
<caret line="77" column="28" selection-start-line="77" selection-start-column="28" selection-end-line="77" selection-end-column="28" />
<folding>
<element signature="e#0#20#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/message_widget.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="875">
<caret line="79" column="26" selection-start-line="79" selection-start-column="26" selection-end-line="79" selection-end-column="26" />
<folding>
<element signature="e#0#64#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/message_list_view.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1230">
<caret line="258" column="53" selection-start-line="258" selection-start-column="53" selection-end-line="258" selection-end-column="53" />
<folding>
<element signature="e#0#20#0" expanded="true" />
</folding>
@@ -504,13 +484,33 @@
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/channel_list_view.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="890">
<caret line="133" column="14" selection-start-line="133" selection-start-column="14" selection-end-line="133" selection-end-column="14" />
<state relative-caret-position="136">
<caret line="8" column="26" selection-start-line="8" selection-start-column="8" selection-end-line="8" selection-end-column="26" />
<folding>
<element signature="e#0#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/channel_preview.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="782">
<caret line="46" column="31" selection-start-line="46" selection-start-column="31" selection-end-line="46" selection-end-column="31" />
<folding>
<element signature="e#0#46#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/stream_channel.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="10" column="9" selection-start-line="10" selection-start-column="9" selection-end-line="10" selection-end-column="9" />
<folding>
<element signature="e#0#20#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component>
</project>
+27 -31
View File
@@ -9,27 +9,21 @@ void main() async {
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoid2lsZC1icmVlemUtNyJ9.VM2EX1EXOfgqa-bTH_3JzeY0T99ngWzWahSauP3dBMo',
);
runApp(StreamChat(
client: client,
child: MyApp(),
));
}
final channelClient = client.channel('messaging', id: 'godevs');
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
channelClient.watch();
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
runApp(
StreamChat(
client: client,
child: MaterialApp(
home: StreamChat(
client: client,
child: ChannelListPage(),
),
),
home: ChannelListPage(),
);
}
),
);
}
class ChannelListPage extends StatelessWidget {
@@ -48,7 +42,10 @@ class ChannelListPage extends StatelessWidget {
),
onChannelTap: (channelClient) {
Navigator.push(context, MaterialPageRoute(builder: (context) {
return ChannelPage(channelClient);
return StreamChannel(
child: ChannelPage(),
channelClient: channelClient,
);
}));
},
),
@@ -57,21 +54,20 @@ class ChannelListPage extends StatelessWidget {
}
class ChannelPage extends StatelessWidget {
ChannelPage(this.channelClient);
final ChannelClient channelClient;
const ChannelPage({
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return StreamChannel(
channelClient: channelClient,
child: Scaffold(
body: Column(
children: <Widget>[
Expanded(child: MessageListView()),
MessageInput(),
],
),
return Scaffold(
body: Column(
children: <Widget>[
Expanded(
child: MessageListView(),
),
MessageInput(),
],
),
);
}
+21 -10
View File
@@ -19,18 +19,29 @@ void main() async {
client: client,
child: StreamChannel(
channelClient: channelClient,
child: Scaffold(
body: Column(
children: <Widget>[
Expanded(
child: MessageListView(),
),
MessageInput(),
],
),
),
child: ChannelPage(),
),
),
),
);
}
class ChannelPage extends StatelessWidget {
const ChannelPage({
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: <Widget>[
Expanded(
child: MessageListView(),
),
MessageInput(),
],
),
);
}
}
-29
View File
@@ -1,29 +0,0 @@
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'package:example/single_conversation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp());
// Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget);
expect(find.text('1'), findsNothing);
// Tap the '+' icon and trigger a frame.
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
// Verify that our counter has incremented.
expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);
});
}
+7 -6
View File
@@ -100,14 +100,15 @@ class _ChannelListViewState extends State<ChannelListView> {
Widget child;
if (widget._channelPreviewBuilder != null) {
child = widget._channelPreviewBuilder(context, channelState);
child = GestureDetector(
onTap: () {
widget.onChannelTap(channelClient);
},
child: widget._channelPreviewBuilder(context, channelState),
);
} else {
child = ChannelPreview(
onTap: widget?.onChannelTap != null
? () {
widget?.onChannelTap(channelClient);
}
: null,
onTap: widget.onChannelTap,
);
}
+6 -6
View File
@@ -4,12 +4,13 @@ import 'package:flutter/widgets.dart';
import 'package:stream_chat/stream_chat.dart';
import 'channel_image.dart';
import 'channel_list_view.dart';
import 'channel_name_text.dart';
import 'stream_channel.dart';
import 'stream_chat.dart';
class ChannelPreview extends StatelessWidget {
final VoidCallback onTap;
final ChannelTapCallback onTap;
const ChannelPreview({
Key key,
@@ -37,14 +38,13 @@ class ChannelPreview extends StatelessWidget {
ChannelState channelState,
StreamChannelState streamChannel,
) {
final channelClient =
StreamChat.of(context).client.channelClients[channelState.channel.id];
return StreamChannel(
channelClient:
StreamChat.of(context).client.channelClients[channelState.channel.id],
channelClient: channelClient,
child: ListTile(
onTap: () {
if (onTap != null) {
onTap();
}
onTap(channelClient);
},
leading: ChannelImage(
channel: channelState.channel,
+2 -3
View File
@@ -8,7 +8,7 @@ class StreamChannel extends StatefulWidget {
StreamChannel({
Key key,
@required this.child,
this.channelClient,
@required this.channelClient,
}) : super(
key: key,
);
@@ -95,8 +95,6 @@ class StreamChannelState extends State<StreamChannel> {
@override
void dispose() {
_queryMessageController.close();
widget.channelClient.dispose();
super.dispose();
}
@@ -109,6 +107,7 @@ class StreamChannelState extends State<StreamChannel> {
}
return FutureBuilder<bool>(
future: widget.channelClient.initialized,
initialData: widget.channelClient.state != null,
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Scaffold(