Skip to content

Commit 46188b5

Browse files
feat: fixing for Flutter 3.13.0 (#51)
* feat: fixing for Flutter 3.13.0 * fix workflows * reverting flutter constraint * Apply suggestions from code review Co-authored-by: Jochum van der Ploeg <[email protected]> --------- Co-authored-by: Jochum van der Ploeg <[email protected]>
1 parent 14cbf15 commit 46188b5

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

.github/workflows/example.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ on:
1414

1515
jobs:
1616
semantic_pull_request:
17-
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1.11.0
17+
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1
1818

1919
build:
20-
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1.11.0
20+
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1
2121
with:
2222
flutter_channel: stable
2323
working_directory: example

lib/src/mock_navigator.dart

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,27 @@
11
import 'package:flutter/material.dart';
22
import 'package:mocktail/mocktail.dart';
33

4+
class _MockMaterialPageRoute extends MaterialPageRoute<void> {
5+
_MockMaterialPageRoute({required super.builder});
6+
7+
void hackOverlays() {
8+
for (var i = 0; i < overlayEntries.length; i++) {
9+
final state = OverlayState();
10+
final entry = OverlayEntry(builder: (_) => const SizedBox());
11+
try {
12+
// We need to call insert since that is the only way to populate the
13+
// `_overlay` field in the entry. But that method calls a setState,
14+
// which will fail since we are not in a widget tree.
15+
//
16+
// By the time the setState is called, the attribute is already set
17+
// so we just ignore the error and the hack will do its job.
18+
state.insert(entry);
19+
} catch (_) {}
20+
overlayEntries[i] = entry;
21+
}
22+
}
23+
}
24+
425
class _FakeRoute<T> extends Fake implements Route<T> {}
526

627
/// {@template mock_navigator_provider}
@@ -29,7 +50,13 @@ class MockNavigatorProvider extends Navigator {
2950

3051
@override
3152
RouteFactory? get onGenerateRoute {
32-
return (_) => MaterialPageRoute<dynamic>(builder: (_) => child);
53+
return (_) {
54+
final route = _MockMaterialPageRoute(builder: (_) => child);
55+
56+
navigator._routes.add(route);
57+
58+
return route;
59+
};
3360
}
3461
}
3562

@@ -48,6 +75,8 @@ class MockNavigator extends Mock
4875
registerFallbackValue(_FakeRoute<String>());
4976
registerFallbackValue(_FakeRoute<num>());
5077
}
78+
79+
final _routes = <_MockMaterialPageRoute>[];
5180
}
5281

5382
/// A mixin necessary when implementing a [MockNavigator].
@@ -74,6 +103,15 @@ class _MockNavigatorState extends NavigatorState {
74103
@override
75104
Widget build(BuildContext context) => _child;
76105

106+
@override
107+
void dispose() {
108+
for (final route in _navigator._routes) {
109+
route.hackOverlays();
110+
}
111+
112+
super.dispose();
113+
}
114+
77115
@override
78116
Future<T?> push<T extends Object?>(Route<T> route) {
79117
return _navigator.push<T>(route);

0 commit comments

Comments
 (0)