Configure routes in example project.
This commit is contained in:
@@ -8,6 +8,7 @@ import 'package:flutter_svg/flutter_svg.dart';
|
|||||||
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
||||||
|
|
||||||
import 'notifications_service.dart';
|
import 'notifications_service.dart';
|
||||||
|
import 'routes/routes.dart';
|
||||||
|
|
||||||
const kStreamApiKey = 'STREAM_API_KEY';
|
const kStreamApiKey = 'STREAM_API_KEY';
|
||||||
const kStreamUserId = 'STREAM_USER_ID';
|
const kStreamUserId = 'STREAM_USER_ID';
|
||||||
@@ -154,18 +155,10 @@ class ChooseUserPage extends StatelessWidget {
|
|||||||
if (!kIsWeb) {
|
if (!kIsWeb) {
|
||||||
initNotifications(client);
|
initNotifications(client);
|
||||||
}
|
}
|
||||||
|
Navigator.pushReplacementNamed(
|
||||||
Navigator.pop(context);
|
|
||||||
await Navigator.pushReplacement(
|
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
Routes.CHANNEL_LIST,
|
||||||
builder: (context) {
|
arguments: client,
|
||||||
return StreamChat(
|
|
||||||
client: client,
|
|
||||||
child: ChannelListPage(),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
leading: UserAvatar(
|
leading: UserAvatar(
|
||||||
@@ -188,12 +181,7 @@ class ChooseUserPage extends StatelessWidget {
|
|||||||
}),
|
}),
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(
|
Navigator.pushNamed(context, Routes.ADVANCED_OPTIONS);
|
||||||
context,
|
|
||||||
MaterialPageRoute(
|
|
||||||
builder: (context) => AdvancedOptionsPage(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
leading: CircleAvatar(
|
leading: CircleAvatar(
|
||||||
child: StreamSvgIcon.settings(
|
child: StreamSvgIcon.settings(
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
|||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
import 'main.dart';
|
import 'main.dart';
|
||||||
|
import 'routes/routes.dart';
|
||||||
|
|
||||||
class GroupChatDetailsScreen extends StatefulWidget {
|
class GroupChatDetailsScreen extends StatefulWidget {
|
||||||
final List<User> selectedUsers;
|
final List<User> selectedUsers;
|
||||||
@@ -128,18 +129,12 @@ class _GroupChatDetailsScreenState extends State<GroupChatDetailsScreen> {
|
|||||||
'name': groupName,
|
'name': groupName,
|
||||||
});
|
});
|
||||||
await channel.watch();
|
await channel.watch();
|
||||||
Navigator.of(context)
|
Navigator.pushNamedAndRemoveUntil(
|
||||||
..pop()
|
context,
|
||||||
..pushReplacement(
|
Routes.CHANNEL_PAGE,
|
||||||
MaterialPageRoute(
|
ModalRoute.withName(Routes.CHANNEL_LIST),
|
||||||
builder: (context) {
|
arguments: channel,
|
||||||
return StreamChannel(
|
);
|
||||||
child: ChannelPage(),
|
|
||||||
channel: channel,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
+27
-35
@@ -10,6 +10,8 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
|||||||
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
||||||
|
|
||||||
import 'notifications_service.dart';
|
import 'notifications_service.dart';
|
||||||
|
import 'routes/app_routes.dart';
|
||||||
|
import 'routes/routes.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
@@ -47,19 +49,19 @@ class MyApp extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return MaterialApp(
|
return StreamChat(
|
||||||
debugShowCheckedModeBanner: false,
|
client: client,
|
||||||
theme: ThemeData.light(),
|
child: MaterialApp(
|
||||||
darkTheme: ThemeData.dark(),
|
debugShowCheckedModeBanner: false,
|
||||||
//TODO change to system once dark theme is implemented
|
theme: ThemeData.light(),
|
||||||
themeMode: ThemeMode.light,
|
darkTheme: ThemeData.dark(),
|
||||||
builder: (context, widget) {
|
//TODO change to system once dark theme is implemented
|
||||||
return StreamChat(
|
themeMode: ThemeMode.light,
|
||||||
child: widget,
|
onGenerateRoute: AppRoutes.generateRoute,
|
||||||
client: client,
|
initialRoute: client.state.user == null
|
||||||
);
|
? Routes.CHOOSE_USER
|
||||||
},
|
: Routes.CHANNEL_LIST,
|
||||||
home: client.state.user == null ? ChooseUserPage() : ChannelListPage(),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -71,11 +73,7 @@ class ChannelListPage extends StatelessWidget {
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: ChannelListHeader(
|
appBar: ChannelListHeader(
|
||||||
onNewChatButtonTap: () {
|
onNewChatButtonTap: () {
|
||||||
Navigator.of(context).push(
|
Navigator.pushNamed(context, Routes.NEW_CHAT);
|
||||||
MaterialPageRoute(
|
|
||||||
builder: (context) => NewChatScreen(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
drawer: _buildDrawer(context, user),
|
drawer: _buildDrawer(context, user),
|
||||||
@@ -83,9 +81,7 @@ class ChannelListPage extends StatelessWidget {
|
|||||||
body: ChannelsBloc(
|
body: ChannelsBloc(
|
||||||
child: ChannelListView(
|
child: ChannelListView(
|
||||||
onStartChatPressed: () {
|
onStartChatPressed: () {
|
||||||
Navigator.of(context).push(MaterialPageRoute(builder: (context) {
|
Navigator.pushNamed(context, Routes.NEW_CHAT);
|
||||||
return NewChatScreen();
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
swipeToAction: true,
|
swipeToAction: true,
|
||||||
filter: {
|
filter: {
|
||||||
@@ -147,11 +143,10 @@ class ChannelListPage extends StatelessWidget {
|
|||||||
color: Colors.black.withOpacity(.5),
|
color: Colors.black.withOpacity(.5),
|
||||||
),
|
),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.of(context)
|
Navigator.popAndPushNamed(
|
||||||
..pop()
|
context,
|
||||||
..push(MaterialPageRoute(builder: (context) {
|
Routes.NEW_CHAT,
|
||||||
return NewChatScreen();
|
);
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
title: Text(
|
title: Text(
|
||||||
'New direct message',
|
'New direct message',
|
||||||
@@ -165,11 +160,10 @@ class ChannelListPage extends StatelessWidget {
|
|||||||
color: Colors.black.withOpacity(.5),
|
color: Colors.black.withOpacity(.5),
|
||||||
),
|
),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.of(context)
|
Navigator.popAndPushNamed(
|
||||||
..pop()
|
context,
|
||||||
..push(MaterialPageRoute(builder: (context) {
|
Routes.NEW_GROUP_CHAT,
|
||||||
return NewGroupChatScreen();
|
);
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
title: Text(
|
title: Text(
|
||||||
'New group',
|
'New group',
|
||||||
@@ -188,11 +182,9 @@ class ChannelListPage extends StatelessWidget {
|
|||||||
final secureStorage = FlutterSecureStorage();
|
final secureStorage = FlutterSecureStorage();
|
||||||
await secureStorage.deleteAll();
|
await secureStorage.deleteAll();
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
await Navigator.pushReplacement(
|
Navigator.pushReplacementNamed(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
Routes.CHOOSE_USER,
|
||||||
builder: (context) => ChooseUserPage(),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
leading: StreamSvgIcon.user(
|
leading: StreamSvgIcon.user(
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
|||||||
import 'chips_input_text_field.dart';
|
import 'chips_input_text_field.dart';
|
||||||
import 'main.dart';
|
import 'main.dart';
|
||||||
import 'new_group_chat_screen.dart';
|
import 'new_group_chat_screen.dart';
|
||||||
|
import 'routes/routes.dart';
|
||||||
|
|
||||||
class NewChatScreen extends StatefulWidget {
|
class NewChatScreen extends StatefulWidget {
|
||||||
@override
|
@override
|
||||||
@@ -182,9 +183,9 @@ class _NewChatScreenState extends State<NewChatScreen> {
|
|||||||
Container(
|
Container(
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(
|
Navigator.pushNamed(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (_) => NewGroupChatScreen()),
|
Routes.NEW_GROUP_CHAT,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
child: Padding(
|
child: Padding(
|
||||||
@@ -334,16 +335,11 @@ class _NewChatScreenState extends State<NewChatScreen> {
|
|||||||
channel.update({
|
channel.update({
|
||||||
'draft': false,
|
'draft': false,
|
||||||
});
|
});
|
||||||
Navigator.pushReplacement(
|
Navigator.pushNamedAndRemoveUntil(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
Routes.CHANNEL_PAGE,
|
||||||
builder: (context) {
|
ModalRoute.withName(Routes.CHANNEL_LIST),
|
||||||
return StreamChannel(
|
arguments: channel,
|
||||||
child: ChannelPage(),
|
|
||||||
channel: channel,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
|||||||
|
|
||||||
import 'group_chat_details_screen.dart';
|
import 'group_chat_details_screen.dart';
|
||||||
import 'search_text_field.dart';
|
import 'search_text_field.dart';
|
||||||
|
import 'routes/routes.dart';
|
||||||
|
|
||||||
class NewGroupChatScreen extends StatefulWidget {
|
class NewGroupChatScreen extends StatefulWidget {
|
||||||
@override
|
@override
|
||||||
@@ -78,14 +79,10 @@ class _NewGroupChatScreenState extends State<NewGroupChatScreen> {
|
|||||||
color: Color(0xFF006CFF),
|
color: Color(0xFF006CFF),
|
||||||
),
|
),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
final updatedList = await Navigator.push(
|
final updatedList = await Navigator.pushNamed(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
Routes.NEW_GROUP_CHAT_DETAILS,
|
||||||
builder: (_) => GroupChatDetailsScreen(
|
arguments: _selectedUsers.toList(growable: false),
|
||||||
selectedUsers:
|
|
||||||
_selectedUsers.toList(growable: false),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
if (updatedList != null) {
|
if (updatedList != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
import 'routes.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import '../choose_user_page.dart';
|
||||||
|
import '../advanced_options_page.dart';
|
||||||
|
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
||||||
|
import '../main.dart';
|
||||||
|
import '../group_chat_details_screen.dart';
|
||||||
|
import '../new_group_chat_screen.dart';
|
||||||
|
import '../new_chat_screen.dart';
|
||||||
|
|
||||||
|
class AppRoutes {
|
||||||
|
/// Add entry for new route here
|
||||||
|
static Route<dynamic> generateRoute(RouteSettings settings) {
|
||||||
|
final args = settings.arguments;
|
||||||
|
switch (settings.name) {
|
||||||
|
case Routes.CHANNEL_LIST:
|
||||||
|
return MaterialPageRoute(
|
||||||
|
settings: const RouteSettings(name: Routes.CHANNEL_LIST),
|
||||||
|
builder: (_) {
|
||||||
|
return ChannelListPage();
|
||||||
|
});
|
||||||
|
case Routes.CHOOSE_USER:
|
||||||
|
return MaterialPageRoute(
|
||||||
|
settings: const RouteSettings(name: Routes.CHOOSE_USER),
|
||||||
|
builder: (_) {
|
||||||
|
return ChooseUserPage();
|
||||||
|
});
|
||||||
|
case Routes.ADVANCED_OPTIONS:
|
||||||
|
return MaterialPageRoute(
|
||||||
|
settings: const RouteSettings(name: Routes.ADVANCED_OPTIONS),
|
||||||
|
builder: (_) => AdvancedOptionsPage(),
|
||||||
|
);
|
||||||
|
case Routes.CHANNEL_PAGE:
|
||||||
|
return MaterialPageRoute(
|
||||||
|
settings: const RouteSettings(name: Routes.CHANNEL_PAGE),
|
||||||
|
builder: (_) {
|
||||||
|
return StreamChannel(
|
||||||
|
channel: args as Channel,
|
||||||
|
child: ChannelPage(),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
case Routes.NEW_CHAT:
|
||||||
|
return MaterialPageRoute(
|
||||||
|
settings: const RouteSettings(name: Routes.NEW_CHAT),
|
||||||
|
builder: (_) {
|
||||||
|
return NewChatScreen();
|
||||||
|
});
|
||||||
|
case Routes.NEW_GROUP_CHAT:
|
||||||
|
return MaterialPageRoute(
|
||||||
|
settings: const RouteSettings(name: Routes.NEW_GROUP_CHAT),
|
||||||
|
builder: (_) {
|
||||||
|
return NewGroupChatScreen();
|
||||||
|
});
|
||||||
|
case Routes.NEW_GROUP_CHAT_DETAILS:
|
||||||
|
return MaterialPageRoute(
|
||||||
|
settings: const RouteSettings(name: Routes.NEW_GROUP_CHAT_DETAILS),
|
||||||
|
builder: (_) {
|
||||||
|
return GroupChatDetailsScreen(
|
||||||
|
selectedUsers: args,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
/// Define all the route names here
|
||||||
|
class Routes {
|
||||||
|
static const String CHANNEL_LIST = '/channel_list';
|
||||||
|
static const String CHOOSE_USER = '/choose_user';
|
||||||
|
static const String ADVANCED_OPTIONS = '/advance_options';
|
||||||
|
static const String CHANNEL_PAGE = '/channel_page';
|
||||||
|
static const String NEW_CHAT = '/new_chat';
|
||||||
|
static const String NEW_GROUP_CHAT = '/new_group_chat';
|
||||||
|
static const String NEW_GROUP_CHAT_DETAILS = '/new_group_chat_details';
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user