diff --git a/mobile-app/lib/ui/views/learn/challenge/challenge_viewmodel.dart b/mobile-app/lib/ui/views/learn/challenge/challenge_viewmodel.dart index 4dccfc17d..d3e339d18 100644 --- a/mobile-app/lib/ui/views/learn/challenge/challenge_viewmodel.dart +++ b/mobile-app/lib/ui/views/learn/challenge/challenge_viewmodel.dart @@ -712,7 +712,8 @@ class ChallengeViewModel extends BaseViewModel { ); if (evalResult != null && evalResult.error != null) { setUserConsoleMessages = [ - ...userConsoleMessages.sublist(0, userConsoleMessages.length - 1), + if (userConsoleMessages.isNotEmpty) + ...userConsoleMessages.sublist(0, userConsoleMessages.length - 1), '

${evalResult.error}

', ]; } @@ -745,13 +746,16 @@ class ChallengeViewModel extends BaseViewModel { 'testStr': test.javaScript, }, ); - if (testRes?.value['pass'] == null) { - log('TEST FAILED: ${test.instruction} - ${test.javaScript} - ${testRes?.value['err']}'); + if (testRes != null && testRes.value['pass'] == null) { + log('TEST FAILED: ${test.instruction} - ${test.javaScript} - ${testRes.value['err']}'); failedTest = failedTest ?? test; - failedTestErr = failedTestErr ?? testRes?.value['err'] as Map; + failedTestErr = failedTestErr ?? testRes.value['err'] as Map; failedTestsConsole.add( '
  • ${replacePlaceholders(test.instruction, failedTestErr)}
  • ', ); + } else if (testRes == null) { + log('TEST RESULT NULL: $testRes'); + throw Exception('Test result is null ${testRes.toString()}'); } } diff --git a/mobile-app/lib/ui/views/learn/widgets/pass/pass_widget_model.dart b/mobile-app/lib/ui/views/learn/widgets/pass/pass_widget_model.dart index 71352f7d4..d171627ac 100644 --- a/mobile-app/lib/ui/views/learn/widgets/pass/pass_widget_model.dart +++ b/mobile-app/lib/ui/views/learn/widgets/pass/pass_widget_model.dart @@ -15,6 +15,17 @@ import 'package:stacked/stacked.dart'; class PassWidgetModel extends BaseViewModel { final AuthenticationService auth = locator(); + Future? quoteFuture; + + set setQuoteFuture(Future value) { + quoteFuture = value; + notifyListeners(); + } + + void initQuoute() { + setQuoteFuture = retrieveNewQuote(); + } + Future numCompletedChallenges(ChallengeViewModel challengeModel) async { FccUserModel? user = await auth.userModel; if (user != null) { diff --git a/mobile-app/lib/ui/views/learn/widgets/pass/pass_widget_view.dart b/mobile-app/lib/ui/views/learn/widgets/pass/pass_widget_view.dart index 36031fdeb..cef5c365e 100644 --- a/mobile-app/lib/ui/views/learn/widgets/pass/pass_widget_view.dart +++ b/mobile-app/lib/ui/views/learn/widgets/pass/pass_widget_view.dart @@ -22,6 +22,7 @@ class PassWidgetView extends StatelessWidget { Widget build(BuildContext context) { return ViewModelBuilder.reactive( viewModelBuilder: () => PassWidgetModel(), + onViewModelReady: (model) => model.initQuoute(), builder: (context, model, child) => SafeArea( child: Column( children: [ @@ -48,7 +49,7 @@ class PassWidgetView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ FutureBuilder( - future: model.retrieveNewQuote(), + future: model.quoteFuture, builder: (context, snapshot) { if (snapshot.hasData) { MotivationalQuote quote =