Skip to content

Commit 4f59f73

Browse files
committed
Fix navigation initialization error
1 parent bb2650e commit 4f59f73

File tree

1 file changed

+41
-23
lines changed

1 file changed

+41
-23
lines changed

src/Bible.Alarm/Services/UI/NavigationService.cs

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,131 +14,149 @@
1414
namespace Bible.Alarm.Services.UI;
1515

1616
public class NavigationService(
17-
INavigation navigation,
1817
IServiceProvider serviceProvider)
1918
: INavigationService
2019
{
21-
private readonly INavigation _navigation = navigation;
2220
private readonly IServiceProvider _serviceProvider = serviceProvider;
2321

22+
private INavigation GetNavigation()
23+
{
24+
return _serviceProvider.GetRequiredService<INavigation>();
25+
}
26+
2427
public async Task NavigateToHomeAsync()
2528
{
29+
var navigation = GetNavigation();
2630
var homePage = _serviceProvider.GetRequiredService<Home>();
2731
NavigationPage.SetHasNavigationBar(homePage, false);
28-
await _navigation.PushAsync(homePage);
32+
await navigation.PushAsync(homePage);
2933

3034
// Remove any other pages from the stack
31-
var pagesToRemove = _navigation.NavigationStack.Where(p => p != homePage).ToList();
35+
var pagesToRemove = navigation.NavigationStack.Where(p => p != homePage).ToList();
3236
foreach (var page in pagesToRemove)
3337
{
34-
_navigation.RemovePage(page);
38+
navigation.RemovePage(page);
3539
}
3640
}
3741

3842
public async Task NavigateToScheduleAsync()
3943
{
44+
var navigation = GetNavigation();
4045
var page = _serviceProvider.GetRequiredService<Schedule>();
41-
await _navigation.PushAsync(page);
46+
await navigation.PushAsync(page);
4247
}
4348

4449
public async Task NavigateToMusicSelectionAsync()
4550
{
51+
var navigation = GetNavigation();
4652
var page = _serviceProvider.GetRequiredService<MusicSelection>();
47-
await _navigation.PushAsync(page);
53+
await navigation.PushAsync(page);
4854
}
4955

5056
public async Task NavigateToSongBookSelectionAsync()
5157
{
58+
var navigation = GetNavigation();
5259
var page = _serviceProvider.GetRequiredService<SongBookSelection>();
53-
await _navigation.PushAsync(page);
60+
await navigation.PushAsync(page);
5461
}
5562

5663
public async Task NavigateToTrackSelectionAsync()
5764
{
65+
var navigation = GetNavigation();
5866
var page = _serviceProvider.GetRequiredService<TrackSelection>();
59-
await _navigation.PushAsync(page);
67+
await navigation.PushAsync(page);
6068
}
6169

6270
public async Task NavigateToBibleSelectionAsync()
6371
{
72+
var navigation = GetNavigation();
6473
var page = _serviceProvider.GetRequiredService<BibleSelection>();
65-
await _navigation.PushAsync(page);
74+
await navigation.PushAsync(page);
6675
}
6776

6877
public async Task NavigateToBookSelectionAsync()
6978
{
79+
var navigation = GetNavigation();
7080
var page = _serviceProvider.GetRequiredService<BookSelection>();
71-
await _navigation.PushAsync(page);
81+
await navigation.PushAsync(page);
7282
}
7383

7484
public async Task NavigateToChapterSelectionAsync()
7585
{
86+
var navigation = GetNavigation();
7687
var page = _serviceProvider.GetRequiredService<ChapterSelection>();
77-
await _navigation.PushAsync(page);
88+
await navigation.PushAsync(page);
7889
}
7990

8091
public async Task PopAsync()
8192
{
82-
if (_navigation.NavigationStack.Count > 1)
93+
var navigation = GetNavigation();
94+
if (navigation.NavigationStack.Count > 1)
8395
{
84-
await _navigation.PopAsync();
96+
await navigation.PopAsync();
8597
}
8698
}
8799

88100
public async Task OpenNumberOfChaptersModalAsync(object bindingContext)
89101
{
102+
var navigation = GetNavigation();
90103
var modal = _serviceProvider.GetRequiredService<NumberOfChaptersModal>();
91104
modal.BindingContext = bindingContext;
92-
await _navigation.PushModalAsync(modal);
105+
await navigation.PushModalAsync(modal);
93106
}
94107

95108
public async Task OpenLanguageModalAsync(object bindingContext)
96109
{
110+
var navigation = GetNavigation();
97111
var modal = _serviceProvider.GetRequiredService<LanguageModal>();
98112
modal.BindingContext = bindingContext;
99-
await _navigation.PushModalAsync(modal);
113+
await navigation.PushModalAsync(modal);
100114
}
101115

102116
public async Task OpenAlarmModalAsync()
103117
{
118+
var navigation = GetNavigation();
104119
// Check if alarm modal is already open
105-
if (_navigation.ModalStack.LastOrDefault()?.GetType() == typeof(AlarmModal))
120+
if (navigation.ModalStack.LastOrDefault()?.GetType() == typeof(AlarmModal))
106121
{
107122
return;
108123
}
109124

110125
var vm = _serviceProvider.GetRequiredService<AlarmViewModal>();
111126
var modal = _serviceProvider.GetRequiredService<AlarmModal>();
112127
modal.BindingContext = vm;
113-
await _navigation.PushModalAsync(modal);
128+
await navigation.PushModalAsync(modal);
114129
}
115130

116131
public async Task OpenMediaProgressModalAsync()
117132
{
133+
var navigation = GetNavigation();
118134
// Check if media progress modal is already open
119-
if (_navigation.ModalStack.LastOrDefault()?.GetType() == typeof(MediaProgressModal))
135+
if (navigation.ModalStack.LastOrDefault()?.GetType() == typeof(MediaProgressModal))
120136
{
121137
return;
122138
}
123139

124140
var vm = _serviceProvider.GetRequiredService<MediaProgressViewModal>();
125141
var modal = _serviceProvider.GetRequiredService<MediaProgressModal>();
126142
modal.BindingContext = vm;
127-
await _navigation.PushModalAsync(modal);
143+
await navigation.PushModalAsync(modal);
128144
}
129145

130146
public async Task OpenBatteryOptimizationModalAsync(object bindingContext)
131147
{
148+
var navigation = GetNavigation();
132149
var modal = _serviceProvider.GetRequiredService<BatteryOptimizationExclusionModal>();
133150
modal.BindingContext = bindingContext;
134-
await _navigation.PushModalAsync(modal);
151+
await navigation.PushModalAsync(modal);
135152
}
136153

137154
public async Task CloseModalAsync()
138155
{
139-
if (_navigation.ModalStack.Count > 0)
156+
var navigation = GetNavigation();
157+
if (navigation.ModalStack.Count > 0)
140158
{
141-
var modal = await _navigation.PopModalAsync();
159+
var modal = await navigation.PopModalAsync();
142160
if (modal.BindingContext is IDisposable disposable)
143161
{
144162
disposable.Dispose();

0 commit comments

Comments
 (0)