Skip to content

Commit d8e8184

Browse files
committed
+app navigator
1 parent d437d25 commit d8e8184

File tree

7 files changed

+56
-29
lines changed

7 files changed

+56
-29
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import 'dart:io';
2+
3+
import 'package:devour/presentation/screens/telegram_login/telegram_login_screen.dart';
4+
import 'package:flutter/cupertino.dart';
5+
import 'package:flutter/material.dart';
6+
import 'package:injectable/injectable.dart';
7+
8+
@injectable
9+
class AppNavigator {
10+
Route<dynamic> navigate(RouteSettings settings) {
11+
if (Platform.isAndroid) {
12+
return MaterialPageRoute(builder: _builder(settings), settings: settings);
13+
} else {
14+
return CupertinoPageRoute(
15+
builder: _builder(settings),
16+
settings: settings,
17+
title: getTitle(settings),
18+
);
19+
}
20+
}
21+
22+
Widget Function(BuildContext) _builder(RouteSettings settings) =>
23+
(BuildContext ctx) {
24+
return TelegramLoginScreen();
25+
};
26+
27+
String getTitle(RouteSettings settings) => 'Title';
28+
}

lib/injection.config.dart

+19-17
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/injection.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import 'package:devour/injection.config.dart';
22
import 'package:get_it/get_it.dart';
33
import 'package:injectable/injectable.dart';
44

5-
final GetIt getIt = GetIt.instance;
5+
final GetIt serviceLocator = GetIt.instance;
66

77
@injectableInit
8-
void setupInjections() => $initGetIt(getIt);
8+
void setupInjections() => $initGetIt(serviceLocator);

lib/main.dart

-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import 'package:devour/injection.dart' as di;
2-
import 'package:devour/presentation/screens/feed/feed_screen.dart';
3-
import 'package:devour/presentation/screens/telegram_login/telegram_login_screen.dart';
42
import 'package:devour/presentation/widgets/platform/platform_app.dart';
53
import 'package:flutter/material.dart';
64

@@ -16,7 +14,6 @@ class MyApp extends StatelessWidget {
1614
return const PlatformApp(
1715
title: 'Devour',
1816
primaryColor: Colors.blue,
19-
home: TelegramLoginScreen(),
2017
);
2118
}
2219
}

lib/presentation/screens/feed/feed_screen.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ class FeedScreen extends StatelessWidget {
1515
Widget build(BuildContext context) {
1616
return PlatformScaffold(
1717
body: BlocProvider(
18-
create: (context) => getIt.get<FeedBloc>(
18+
create: (context) => serviceLocator.get<FeedBloc>(
1919
// maybe its not the best soltion, but i don't know, how to do injectable
2020
// with generics like <T extends AbstractMemeModel>
21-
param1: getIt.get<IMemeScrapperFacade<RedditMemeModel>>())
21+
param1: serviceLocator.get<IMemeScrapperFacade<RedditMemeModel>>())
2222
..add(FeedEvent.init()),
2323
child: Feed(),
2424
));

lib/presentation/screens/telegram_login/telegram_login_screen.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class _TelegramLoginScreenState extends State<TelegramLoginScreen>
1919
@override
2020
Widget build(BuildContext context) {
2121
return BlocProvider(
22-
create: (context) => getIt.get<LoginBloc>(),
22+
create: (context) => serviceLocator.get<LoginBloc>(),
2323
child: GestureDetector(
2424
onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
2525
child: PlatformScaffold(

lib/presentation/widgets/platform/platform_app.dart

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:devour/application/navigator/app_navigator.dart';
2+
import 'package:devour/injection.dart';
13
import 'package:devour/presentation/widgets/platform/abstract_platform_widget.dart';
24
import 'package:flutter/cupertino.dart';
35
import 'package:flutter/material.dart';
@@ -7,19 +9,17 @@ class PlatformApp extends AbstractPlatformWidget<CupertinoApp, MaterialApp> {
79
const PlatformApp({
810
Key? key,
911
required this.title,
10-
required this.home,
1112
this.primaryColor,
1213
}) : super(key: key);
1314

1415
final String title;
15-
final Widget home;
1616
final Color? primaryColor;
1717

1818
@override
1919
CupertinoApp buildCupertino() {
2020
return CupertinoApp(
2121
title: title,
22-
home: home,
22+
onGenerateRoute: serviceLocator<AppNavigator>().navigate,
2323
theme: CupertinoThemeData(
2424
primaryColor: primaryColor,
2525
),
@@ -30,7 +30,7 @@ class PlatformApp extends AbstractPlatformWidget<CupertinoApp, MaterialApp> {
3030
MaterialApp buildMaterial() {
3131
return MaterialApp(
3232
title: title,
33-
home: home,
33+
onGenerateRoute: serviceLocator<AppNavigator>().navigate,
3434
theme: ThemeData(
3535
primaryColor: primaryColor,
3636
));

0 commit comments

Comments
 (0)