Skip to content

Commit e7cdfdb

Browse files
authored
Merge pull request #665 from Flutterando/4.5.0
4.5.0
2 parents 269ed03 + 174bd72 commit e7cdfdb

File tree

13 files changed

+91
-39
lines changed

13 files changed

+91
-39
lines changed

doc/docs/flutter_modular/module.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,12 @@ void main(){
3232
3333
class AppWidget extends StatelessWidget {
3434
Widget build(BuildContext context){
35-
return MaterialApp(
35+
return MaterialApp.router(
3636
title: 'My Smart App',
3737
theme: ThemeData(primarySwatch: Colors.blue),
38-
).modular(); //added by extension
38+
routeInformationParser: Modular.routeInformationParser,
39+
routerDelegate: Modular.routerDelegate,
40+
); //added by extension
3941
}
4042
}
4143

doc/docs/flutter_modular/navegation.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ class AppWidget extends StatelessWidget {
2525
return MaterialApp(
2626
title: 'My Smart App',
2727
theme: ThemeData(primarySwatch: Colors.blue),
28-
).modular(); //added by extension
28+
routeInformationParser: Modular.routeInformationParser,
29+
routerDelegate: Modular.routerDelegate,
30+
); //added by extension
2931
}
3032
}
3133
@@ -285,11 +287,14 @@ void main() {
285287
286288
class AppWidget extends StatelessWidget {
287289
Widget build(BuildContext context) {
288-
return MaterialApp(
290+
Modular.setInitialRoute('/page1');
291+
292+
return MaterialApp.router(
289293
title: 'My Smart App',
290294
theme: ThemeData(primarySwatch: Colors.blue),
291-
initialRoute: '/page1',
292-
).modular();
295+
routeInformationParser: Modular.routeInformationParser,
296+
routerDelegate: Modular.routerDelegate,
297+
);
293298
}
294299
}
295300

doc/docs/flutter_modular/start.md

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ The main Widget's function is to instantiate the MaterialApp or CupertinoApp.
144144

145145
In these main Widgets it's also necessary to set the custom route system. For this next snippet we'll use **MaterialApp**, but the process is exactly the same for CupertinoApp.
146146

147-
```dart title="lib/main.dart" {8-15}
147+
```dart title="lib/main.dart" {9-16}
148148
import 'package:flutter/material.dart';
149149
import 'package:flutter_modular/flutter_modular.dart';
150150
@@ -154,7 +154,7 @@ void main(){
154154
155155
class AppWidget extends StatelessWidget {
156156
Widget build(BuildContext context){
157-
return MaterialApp(
157+
return MaterialApp.router(
158158
title: 'My Smart App',
159159
theme: ThemeData(primarySwatch: Colors.blue),
160160
routeInformationParser: Modular.routeInformationParser,
@@ -185,6 +185,20 @@ class HomePage extends StatelessWidget {
185185
}
186186
```
187187

188-
Here we create a Widget called **AppWidget** containing an instance of **MaterialApp**. Note that in the end, we call **.modular()** method that was added to **MaterialApp** through an extension.
188+
Here we create a Widget called **AppWidget** containing an instance of **MaterialApp.router**.
189+
190+
191+
## Support methods
192+
193+
Navigator 2.0 made Flutter's routing system more dynamic, but some information, previously passed in MaterialApp or CupertinoApp, has been removed, and it will be necessary to configure it using Modular's own support methods.
194+
195+
```dart
196+
Modular.setNavigatorKey(myNavigatorKey);
197+
198+
Modular.setObservers([myObserver]);
199+
200+
Modular.setInitialRoute('/home');
201+
```
202+
189203

190204
That's enough to run a Modular app. In the next steps let's explore navigation.

doc/docs/flutter_modular/widgets.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,14 @@ void main() {
6666
6767
class AppWidget extends StatelessWidget {
6868
Widget build(BuildContext context) {
69-
return MaterialApp(
69+
Modular.setInitialRoute('/page1');
70+
71+
return MaterialApp.router(
7072
title: 'My Smart App',
7173
theme: ThemeData(primarySwatch: Colors.blue),
72-
initialRoute: '/page1',
73-
).modular();
74+
routeInformationParser: Modular.routeInformationParser,
75+
routerDelegate: Modular.routerDelegate,
76+
);
7477
}
7578
}
7679

flutter_modular/CHANGELOG.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## [4.4.1] - 2022-02-18
1+
## [4.5.0] - 2022-02-22
22

33
- @Deprecated: `.modular()` extension.
44
Use instead:
@@ -9,7 +9,13 @@
99
);
1010
1111
```
12-
- Fix bugs.
12+
- Added `Modular.setInitialRoute`.
13+
- Added `Modular.setObservers`.
14+
- Added `Modular.setNavigatorKey`.
15+
16+
## [4.4.1] - 2022-02-18
17+
18+
- Fix bugs in lints.
1319

1420
## [4.4.0+1] - 2022-01-22
1521

flutter_modular/analysis_options.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ linter:
2222
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
2323
# producing the lint.
2424
rules:
25+
no_logic_in_create_state: false
2526
# avoid_print: false # Uncomment to disable the `avoid_print` rule
2627
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
2728

flutter_modular/lib/flutter_modular.dart

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import 'package:flutter_modular/src/flutter_modular_module.dart';
66
import 'package:modular_core/modular_core.dart';
77

88
import 'src/domain/usecases/get_arguments.dart';
9-
import 'src/presenter/models/modular_navigator.dart';
109
import 'src/presenter/modular_base.dart';
1110
import 'src/presenter/navigation/modular_page.dart';
1211
import 'src/presenter/navigation/modular_router_delegate.dart';
@@ -52,9 +51,6 @@ void cleanGlobals() {
5251
cleanInjector();
5352
}
5453

55-
@visibleForTesting
56-
String initialRouteDeclaredInMaterialApp = '/';
57-
5854
extension ModularExtensionMaterial on MaterialApp {
5955
///Use instead:
6056
///```dart
@@ -66,13 +62,9 @@ extension ModularExtensionMaterial on MaterialApp {
6662
///```
6763
@Deprecated('Use **MaterialApp.router** instead')
6864
MaterialApp modular() {
69-
injector
70-
.get<IModularNavigator>()
71-
.setObserver(navigatorObservers ?? <NavigatorObserver>[]);
72-
73-
injector.get<IModularNavigator>().setNavigatorKey(navigatorKey);
74-
75-
initialRouteDeclaredInMaterialApp = initialRoute ?? '/';
65+
Modular.setObservers(navigatorObservers ?? []);
66+
Modular.setNavigatorKey(navigatorKey);
67+
Modular.setInitialRoute(initialRoute ?? '/');
7668

7769
final app = MaterialApp.router(
7870
key: key,
@@ -121,16 +113,12 @@ extension ModularExtensionCupertino on CupertinoApp {
121113
///```
122114
@Deprecated('Use CupertinoApp.router instead')
123115
CupertinoApp modular() {
124-
injector
125-
.get<IModularNavigator>()
126-
.setObserver(navigatorObservers ?? <NavigatorObserver>[]);
127-
128-
injector.get<IModularNavigator>().setNavigatorKey(navigatorKey);
116+
Modular.setObservers(navigatorObservers ?? []);
117+
Modular.setNavigatorKey(navigatorKey);
118+
Modular.setInitialRoute(initialRoute ?? '/');
129119

130120
(injector.get<IModularBase>() as ModularBase).flags.isCupertino = true;
131121

132-
initialRouteDeclaredInMaterialApp = initialRoute ?? '/';
133-
134122
final app = CupertinoApp.router(
135123
key: key,
136124
routeInformationProvider: routeInformationProvider,

flutter_modular/lib/src/presenter/models/modular_navigator.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ abstract class IModularNavigator implements Listenable {
113113
/// ```
114114
void navigate(String path, {dynamic arguments});
115115

116-
void setObserver(List<NavigatorObserver> navigatorObservers);
116+
void setObservers(List<NavigatorObserver> navigatorObservers);
117117

118118
void setNavigatorKey(GlobalKey<NavigatorState>? navigatorkey);
119119
}

flutter_modular/lib/src/presenter/modular_base.dart

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'dart:async';
22

3-
import 'package:flutter/foundation.dart';
3+
import 'package:flutter/widgets.dart';
44
import '../domain/usecases/get_arguments.dart';
55
import '../domain/usecases/reassemble_tracker.dart';
66
import 'package:modular_core/modular_core.dart';
@@ -69,6 +69,18 @@ abstract class IModularBase {
6969

7070
/// Navigator 2.0 initializator: RouterDelegate
7171
ModularRouterDelegate get routerDelegate;
72+
73+
/// Change the starting route path
74+
void setInitialRoute(String initialRoute);
75+
76+
/// Change a list of NavigatorObserver objects
77+
void setObservers(List<NavigatorObserver> navigatorObservers);
78+
79+
/// Change the navigatorKey
80+
void setNavigatorKey(GlobalKey<NavigatorState>? key);
81+
82+
@visibleForTesting
83+
String get initialRoutePath;
7284
}
7385

7486
class ModularBase implements IModularBase {
@@ -90,6 +102,12 @@ class ModularBase implements IModularBase {
90102

91103
bool _moduleHasBeenStarted = false;
92104

105+
String _initialRoutePath = '/';
106+
107+
@visibleForTesting
108+
@override
109+
String get initialRoutePath => _initialRoutePath;
110+
93111
ModularBase({
94112
required this.routeInformationParser,
95113
required this.routerDelegate,
@@ -190,4 +208,19 @@ class ModularBase implements IModularBase {
190208
void reassemble() {
191209
reassembleTracker();
192210
}
211+
212+
@override
213+
void setInitialRoute(String value) {
214+
_initialRoutePath = value;
215+
}
216+
217+
@override
218+
void setNavigatorKey(GlobalKey<NavigatorState>? key) {
219+
routerDelegate.setNavigatorKey(key);
220+
}
221+
222+
@override
223+
void setObservers(List<NavigatorObserver> navigatorObservers) {
224+
routerDelegate.setObservers(navigatorObservers);
225+
}
193226
}

flutter_modular/lib/src/presenter/navigation/modular_route_information_parser.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,15 @@ class ModularRouteInformationParser
3535
if (routeInformation.location == null ||
3636
routeInformation.location == '/') {
3737
// ignore: invalid_use_of_visible_for_testing_member
38-
path = initialRouteDeclaredInMaterialApp;
38+
path = Modular.initialRoutePath;
3939
} else {
4040
path = routeInformation.location!;
4141
}
4242

4343
_firstParse = true;
4444
} else {
4545
// ignore: invalid_use_of_visible_for_testing_member
46-
path = routeInformation.location ?? initialRouteDeclaredInMaterialApp;
46+
path = routeInformation.location ?? Modular.initialRoutePath;
4747
}
4848

4949
return await selectBook(path);

0 commit comments

Comments
 (0)