Fix compile error introduced by #44

#44
/cc @creativecreatorormaybenot

Log
When running the code:

(base) ➜  flutter_portal git:(master) ✗ flutter test
00:03 +5: /Users/tom/RefCode/flutter_portal/test/anchor_test.dart: Aligned defers to backup if needed
══╡ EXCEPTION CAUGHT BY SCHEDULER LIBRARY ╞═════════════════════════════════════════════════════════
The following assertion was thrown during a scheduler callback:
'package:flutter_portal/src/flutter_src/layer.dart': Failed assertion: line 199 pos 12: '_lastOffset
!= null': is not true.

When the exception was thrown, this was the stack:
#2      MyLeaderLayer.applyTransform (package:flutter_portal/src/flutter_src/layer.dart:199:12)
#3      _CustomFollowerLayer._establishTransform (package:flutter_portal/src/custom_follower.dart:400:12)
#4      _CustomFollowerLayer.addToScene (package:flutter_portal/src/custom_follower.dart:428:5)
#5      Layer._addToSceneWithRetainedRendering (package:flutter/src/rendering/layer.dart:545:5)
#6      ContainerLayer.addChildrenToScene (package:flutter/src/rendering/layer.dart:1105:13)
#7      PhysicalModelLayer.addToScene (package:flutter/src/rendering/layer.dart:2085:5)
#8      Layer._addToSceneWithRetainedRendering (package:flutter/src/rendering/layer.dart:545:5)
#9      ContainerLayer.addChildrenToScene (package:flutter/src/rendering/layer.dart:1105:13)
#10     OffsetLayer.addToScene (package:flutter/src/rendering/layer.dart:1239:5)
#11     Layer._addToSceneWithRetainedRendering (package:flutter/src/rendering/layer.dart:545:5)
#12     ContainerLayer.addChildrenToScene (package:flutter/src/rendering/layer.dart:1105:13)
#13     OpacityLayer.addToScene (package:flutter/src/rendering/layer.dart:1799:5)
#14     Layer._addToSceneWithRetainedRendering (package:flutter/src/rendering/layer.dart:545:5)
#15     ContainerLayer.addChildrenToScene (package:flutter/src/rendering/layer.dart:1105:13)
#16     OffsetLayer.addToScene (package:flutter/src/rendering/layer.dart:1239:5)
#17     Layer._addToSceneWithRetainedRendering (package:flutter/src/rendering/layer.dart:545:5)
#18     ContainerLayer.addChildrenToScene (package:flutter/src/rendering/layer.dart:1105:13)
#19     TransformLayer.addToScene (package:flutter/src/rendering/layer.dart:1680:5)
#20     ContainerLayer.buildScene (package:flutter/src/rendering/layer.dart:937:5)
#21     RenderView.compositeFrame (package:flutter/src/rendering/view.dart:228:37)
#22     AutomatedTestWidgetsFlutterBinding.drawFrame (package:flutter_test/src/binding.dart:1138:26)
#23     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)
#24     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
#25     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1081:9)
#26     AutomatedTestWidgetsFlutterBinding.pump.<anonymous closure> (package:flutter_test/src/binding.dart:995:9)
#29     TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:71:41)
#30     AutomatedTestWidgetsFlutterBinding.pump (package:flutter_test/src/binding.dart:982:27)
#31     WidgetTester.pumpWidget.<anonymous closure> (package:flutter_test/src/widget_tester.dart:548:22)
#34     TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:71:41)
#35     WidgetTester.pumpWidget (package:flutter_test/src/widget_tester.dart:545:27)
#36     main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/anchor_test.dart:120:18)
<asynchronous suspension>
<asynchronous suspension>
(elided 7 frames from class _AssertionError, dart:async, and package:stack_trace)
════════════════════════════════════════════════════════════════════════════════════════════════════
00:03 +6: /Users/tom/RefCode/flutter_portal/test/anchor_test.dart: Aligned defers to backup if needed
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following TestFailure was thrown running a test:
Expected: <true>
  Actual: <false>

When the exception was thrown, this was the stack:
#4      main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/anchor_test.dart:136:5)
<asynchronous suspension>
<asynchronous suspension>
(elided one frame from package:stack_trace)

This was caught by the test expectation on the following line:
  file:///Users/tom/RefCode/flutter_portal/test/anchor_test.dart line 136
The test description was:
  Aligned defers to backup if needed
════════════════════════════════════════════════════════════════════════════════════════════════════
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following message was thrown:
Multiple exceptions (2) were detected during the running of the current test, and at least one was
unexpected.
════════════════════════════════════════════════════════════════════════════════════════════════════
00:03 +6 -1: /Users/tom/RefCode/flutter_portal/test/anchor_test.dart: Aligned defers to backup if needed [E]
  Test failed. See exception logs above.
  The test description was: Aligned defers to backup if needed

00:04 +19 -1: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: clicking on portal if above child clicks only the portal

Warning: A call to tap() with finder "exactly one widget with text "child" (ignoring offstage widgets): Text("child", dependencies: [MediaQuery, DefaultTextStyle])" derived an Offset (Offset(32.0, 24.0)) that would not hit test on the specified widget.
Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
The finder corresponds to this RenderBox: RenderParagraph#5a775 relayoutBoundary=up15
The hit test result at that offset is: HitTestResult(RenderPointerListener#9fae7@Offset(32.0, 24.0), RenderSemanticsAnnotations#d5bed@Offset(32.0, 24.0), RenderMouseRegion#49894@Offset(32.0, 24.0), RenderSemanticsAnnotations#52fd3@Offset(32.0, 24.0), _RenderInkFeatures#24826@Offset(32.0, 24.0), RenderCustomPaint#cbfa1@Offset(32.0, 24.0), RenderPhysicalShape#4da47@Offset(32.0, 24.0), RenderConstrainedBox#cddf1@Offset(32.0, 24.0), _RenderInputPadding#30f79@Offset(32.0, 24.0), RenderSemanticsAnnotations#7f153@Offset(32.0, 24.0), _RenderPortalTheater#48a91@Offset(32.0, 24.0), RenderCustomMultiChildLayoutBox#9a157@Offset(32.0, 24.0), _RenderInkFeatures#641f7@Offset(32.0, 24.0), RenderPhysicalModel#df1e9@Offset(32.0, 24.0), RenderSemanticsAnnotations#64d91@Offset(32.0, 24.0), RenderRepaintBoundary#dbd9a@Offset(32.0, 24.0), RenderIgnorePointer#6387e@Offset(32.0, 24.0), RenderAnimatedOpacity#6623c@Offset(32.0, 24.0), RenderRepaintBoundary#c6940@Offset(32.0, 24.0), _RenderFocusTrap#aaedd@Offset(32.0, 24.0), RenderSemanticsAnnotations#3d563@Offset(32.0, 24.0), RenderOffstage#1d074@Offset(32.0, 24.0), RenderSemanticsAnnotations#295fa@Offset(32.0, 24.0), _RenderTheatre#986bf@Offset(32.0, 24.0), RenderSemanticsAnnotations#e49b4@Offset(32.0, 24.0), RenderAbsorbPointer#2b979@Offset(32.0, 24.0), RenderPointerListener#e9651@Offset(32.0, 24.0), RenderSemanticsAnnotations#99aa2@Offset(32.0, 24.0), RenderSemanticsAnnotations#e196a@Offset(32.0, 24.0), RenderSemanticsAnnotations#b6649@Offset(32.0, 24.0), RenderSemanticsAnnotations#0fda3@Offset(32.0, 24.0), HitTestEntry#54064(RenderView#f127a), HitTestEntry#f8525(<AutomatedTestWidgetsFlutterBinding>))
#0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:956:25)
#1      WidgetController.getCenter (package:flutter_test/src/controller.dart:839:12)
#2      WidgetController.tap (package:flutter_test/src/controller.dart:273:18)
#3      main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/widget_test.dart:769:18)
<asynchronous suspension>
#4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:125:47)
<asynchronous suspension>
To silence this warning, pass "warnIfMissed: false" to "tap()".
To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.

00:05 +23 -1: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: click works when switching between anchor/fill

Warning: A call to tap() with finder "exactly one widget with key [<'child'>] (ignoring offstage widgets): GestureDetector-[<'child'>](startBehavior: start)" derived an Offset (Offset(400.0, 300.0)) that would not hit test on the specified widget.
Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
The finder corresponds to this RenderBox: RenderSemanticsGestureHandler#c7e9b relayoutBoundary=up2
The hit test result at that offset is: HitTestResult(HitTestEntry#1526d(TextSpan(<all styles inherited>, "a")), RenderParagraph#b399d@Offset(400.0, 300.0), RenderPointerListener#070b2@Offset(400.0, 300.0), RenderSemanticsGestureHandler#2456f@Offset(400.0, 300.0), _RenderPortalTheater#1915b@Offset(400.0, 300.0), HitTestEntry#4e1f0(RenderView#f127a), HitTestEntry#18c02(<AutomatedTestWidgetsFlutterBinding>))
#0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:956:25)
#1      WidgetController.getCenter (package:flutter_test/src/controller.dart:839:12)
#2      WidgetController.tap (package:flutter_test/src/controller.dart:273:18)
#3      main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/widget_test.dart:992:18)
<asynchronous suspension>
#4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:125:47)
<asynchronous suspension>
To silence this warning, pass "warnIfMissed: false" to "tap()".
To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.

Warning: A call to tap() with finder "exactly one widget with key [<'child'>] (ignoring offstage widgets): GestureDetector-[<'child'>](startBehavior: start)" derived an Offset (Offset(400.0, 300.0)) that would not hit test on the specified widget.
Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
The finder corresponds to this RenderBox: RenderSemanticsGestureHandler#8a171 relayoutBoundary=up2
The hit test result at that offset is: HitTestResult(HitTestEntry#7a12d(TextSpan(<all styles inherited>, "a")), RenderParagraph#2396f@Offset(400.0, 300.0), RenderPointerListener#ff7a8@Offset(400.0, 300.0), RenderSemanticsGestureHandler#00cf4@Offset(400.0, 300.0), _RenderPortalTheater#1915b@Offset(400.0, 300.0), HitTestEntry#182fa(RenderView#f127a), HitTestEntry#16026(<AutomatedTestWidgetsFlutterBinding>))
#0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:956:25)
#1      WidgetController.getCenter (package:flutter_test/src/controller.dart:839:12)
#2      WidgetController.tap (package:flutter_test/src/controller.dart:273:18)
#3      main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/widget_test.dart:1071:18)
<asynchronous suspension>
#4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:125:47)
<asynchronous suspension>
To silence this warning, pass "warnIfMissed: false" to "tap()".
To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.

00:05 +34 ~2 -1: Some tests failed.

When running old workable code:

(base) ➜  flutter_portal git:(temp1) ✗ flutter test
00:05 +18: clicking on portal if above child clicks only the portal

Warning: A call to tap() with finder "exactly one widget with text "child" (ignoring offstage widgets): Text("child", dependencies: [MediaQuery, DefaultTextStyle])" derived an Offset (Offset(32.0, 24.0)) that would not hit test on the specified widget.
Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
The finder corresponds to this RenderBox: RenderParagraph#15701 relayoutBoundary=up15
The hit test result at that offset is: HitTestResult(RenderPointerListener#ffa1c@Offset(32.0, 24.0), RenderSemanticsAnnotations#a5053@Offset(32.0, 24.0), RenderMouseRegion#c1712@Offset(32.0, 24.0), RenderSemanticsAnnotations#252d3@Offset(32.0, 24.0), _RenderInkFeatures#2070f@Offset(32.0, 24.0), RenderCustomPaint#ab6b1@Offset(32.0, 24.0), RenderPhysicalShape#2dad7@Offset(32.0, 24.0), RenderConstrainedBox#3a524@Offset(32.0, 24.0), _RenderInputPadding#1146c@Offset(32.0, 24.0), RenderSemanticsAnnotations#dc87d@Offset(32.0, 24.0), _RenderPortalTheater#ef1e5@Offset(32.0, 24.0), RenderCustomMultiChildLayoutBox#44050@Offset(32.0, 24.0), _RenderInkFeatures#176a1@Offset(32.0, 24.0), RenderPhysicalModel#63ad3@Offset(32.0, 24.0), RenderSemanticsAnnotations#24c06@Offset(32.0, 24.0), RenderRepaintBoundary#c0de5@Offset(32.0, 24.0), RenderIgnorePointer#37c3f@Offset(32.0, 24.0), RenderAnimatedOpacity#cc484@Offset(32.0, 24.0), RenderRepaintBoundary#e3cb1@Offset(32.0, 24.0), _RenderFocusTrap#f63fd@Offset(32.0, 24.0), RenderSemanticsAnnotations#b8c6a@Offset(32.0, 24.0), RenderOffstage#7d495@Offset(32.0, 24.0), RenderSemanticsAnnotations#4df09@Offset(32.0, 24.0), _RenderTheatre#500a4@Offset(32.0, 24.0), RenderSemanticsAnnotations#1bc2e@Offset(32.0, 24.0), RenderAbsorbPointer#e6ccb@Offset(32.0, 24.0), RenderPointerListener#2b329@Offset(32.0, 24.0), RenderSemanticsAnnotations#c241d@Offset(32.0, 24.0), RenderSemanticsAnnotations#00006@Offset(32.0, 24.0), RenderSemanticsAnnotations#b3243@Offset(32.0, 24.0), RenderSemanticsAnnotations#81260@Offset(32.0, 24.0), HitTestEntry#fdca5(RenderView#9d936), HitTestEntry#a2c37(<AutomatedTestWidgetsFlutterBinding>))
#0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:956:25)
#1      WidgetController.getCenter (package:flutter_test/src/controller.dart:839:12)
#2      WidgetController.tap (package:flutter_test/src/controller.dart:273:18)
#3      main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/widget_test.dart:761:18)
<asynchronous suspension>
#4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:125:47)
<asynchronous suspension>
To silence this warning, pass "warnIfMissed: false" to "tap()".
To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.

00:05 +22: click works when switching between anchor/fill

Warning: A call to tap() with finder "exactly one widget with key [<'child'>] (ignoring offstage widgets): GestureDetector-[<'child'>](startBehavior: start)" derived an Offset (Offset(400.0, 300.0)) that would not hit test on the specified widget.
Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
The finder corresponds to this RenderBox: RenderSemanticsGestureHandler#a0060 relayoutBoundary=up2
The hit test result at that offset is: HitTestResult(HitTestEntry#eb071(TextSpan(<all styles inherited>, "a")), RenderParagraph#9b077@Offset(400.0, 300.0), RenderPointerListener#a0e37@Offset(400.0, 300.0), RenderSemanticsGestureHandler#f4006@Offset(400.0, 300.0), _RenderPortalTheater#1cabe@Offset(400.0, 300.0), HitTestEntry#fa302(RenderView#9d936), HitTestEntry#c2982(<AutomatedTestWidgetsFlutterBinding>))
#0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:956:25)
#1      WidgetController.getCenter (package:flutter_test/src/controller.dart:839:12)
#2      WidgetController.tap (package:flutter_test/src/controller.dart:273:18)
#3      main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/widget_test.dart:978:18)
<asynchronous suspension>
#4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:125:47)
<asynchronous suspension>
To silence this warning, pass "warnIfMissed: false" to "tap()".
To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.

Warning: A call to tap() with finder "exactly one widget with key [<'child'>] (ignoring offstage widgets): GestureDetector-[<'child'>](startBehavior: start)" derived an Offset (Offset(400.0, 300.0)) that would not hit test on the specified widget.
Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
The finder corresponds to this RenderBox: RenderSemanticsGestureHandler#97a7f relayoutBoundary=up2
The hit test result at that offset is: HitTestResult(HitTestEntry#43712(TextSpan(<all styles inherited>, "a")), RenderParagraph#5eb06@Offset(400.0, 300.0), RenderPointerListener#59647@Offset(400.0, 300.0), RenderSemanticsGestureHandler#6215c@Offset(400.0, 300.0), _RenderPortalTheater#1cabe@Offset(400.0, 300.0), HitTestEntry#38ae2(RenderView#9d936), HitTestEntry#f870b(<AutomatedTestWidgetsFlutterBinding>))
#0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:956:25)
#1      WidgetController.getCenter (package:flutter_test/src/controller.dart:839:12)
#2      WidgetController.tap (package:flutter_test/src/controller.dart:273:18)
#3      main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/widget_test.dart:1055:18)
<asynchronous suspension>
#4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:125:47)
<asynchronous suspension>
To silence this warning, pass "warnIfMissed: false" to "tap()".
To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.

00:05 +35 ~3: All tests passed!

@creativecreatorormaybenot Could you please have a try on this PR and see whether the error is related to your tests? B/c seems that you are using a newer Flutter version, so Flutter behavior may change because of that.

All right. I see the error comes from this PR instead of @creativecreatorormaybenot's code on stable.
Run @creativecreatorormaybenot 's code in beta looks good:

(base) ➜  flutter_portal git:(master) ✗ fvm spawn beta test
Spawning version "beta"...
00:00 +0: loading /Users/tom/RefCode/flutter_portal/test/widget_test.dart                                                                       00:01 +0: loading /Users/tom/RefCode/flutter_portal/test/widget_test.dart                                                                       00:02 +0: loading /Users/tom/RefCode/flutter_portal/test/widget_test.dart                                                                       00:02 +0: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can optionally delay close with a Duration                                   00:03 +0: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can optionally delay close with a Duration                                   00:03 +1: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can optionally delay close with a Duration                                   00:03 +2: /Users/tom/RefCode/flutter_portal/test/anchor_test.dart: Aligned defers to backup if needed                                           00:03 +3: /Users/tom/RefCode/flutter_portal/test/anchor_test.dart: Aligned defers to backup if needed                                           00:03 +4: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: handles dispose before timer end                                             00:03 +5: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: handles dispose before timer end                                             00:03 +5: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can update portal during close                                               00:03 +6: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can update portal during close                                               00:03 +6: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can cancel leave timer by reverting visible                                  00:03 +7: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can cancel leave timer by reverting visible                                  00:03 +7: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: visible false > true > false resets the timer and works properly             00:03 +8: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: visible false > true > false resets the timer and works properly             00:03 +8: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: child does not lose state when hiding portal                                 00:03 +9: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: child does not lose state when hiding portal                                 00:03 +9: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: child does not lose state when hiding portal (anchors)                       00:03 +10: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: child does not lose state when hiding portal (anchors)                      00:03 +10: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: PortalProvider updates child                                                00:03 +11: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: PortalProvider updates child                                                00:03 +11: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: PortalEntry requires portal if visible is true                              00:03 +12: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: PortalEntry requires portal if visible is true                              00:03 +12: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal required either portalBuilder or portal                              00:03 +13: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal required either portalBuilder or portal                              00:03 +13: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal synchronously add portals to PortalProvider                          00:03 +14: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal synchronously add portals to PortalProvider                          00:03 +14: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: portals aren't inserted if mounted is false, and visible can be changed any 00:03 +15: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: portals aren't inserted if mounted is false, and visible can be changed any 00:03 +15: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Unmounting Portal removes it on PortalProvider synchronously                00:03 +16: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Unmounting Portal removes it on PortalProvider synchronously                00:03 +16: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: throws if no Portal was found                                               00:03 +17: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: throws if no Portal was found                                               00:03 +17: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: hiding two entries at once                                                  00:04 +17: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: hiding two entries at once                                                  00:05 +17: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: hiding two entries at once                                                  00:05 +18: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: hiding two entries at once                                                  00:05 +18: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: visible defaults to true                                                    00:05 +19: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: visible defaults to true                                                    00:05 +19: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can insert a portal without rebuilding PortalProvider at the same time      00:05 +20: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can insert a portal without rebuilding PortalProvider at the same time      00:05 +20: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: clicking on portal if above child clicks only the portal                    00:05 +20: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: clicking on portal if above child clicks only the portal

Warning: A call to tap() with finder "exactly one widget with text "child" (ignoring offstage widgets): Text("child", dependencies: [MediaQuery, DefaultTextStyle])" derived an Offset (Offset(32.0, 24.0)) that would not hit test on the specified widget.
Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
The finder corresponds to this RenderBox: RenderParagraph#d8b89 relayoutBoundary=up15
The hit test result at that offset is: HitTestResult(RenderPointerListener#2009e@Offset(32.0, 24.0), RenderSemanticsAnnotations#8594d@Offset(32.0, 24.0), RenderMouseRegion#a569f@Offset(32.0, 24.0), RenderSemanticsAnnotations#7700b@Offset(32.0, 24.0), _RenderInkFeatures#a033f@Offset(32.0, 24.0), RenderCustomPaint#73cdc@Offset(32.0, 24.0), RenderPhysicalShape#f45da@Offset(32.0, 24.0), RenderConstrainedBox#24807@Offset(32.0, 24.0), _RenderInputPadding#b7747@Offset(32.0, 24.0), RenderSemanticsAnnotations#8e025@Offset(32.0, 24.0), _RenderPortalTheater#9b6ac@Offset(32.0, 24.0), RenderCustomMultiChildLayoutBox#5edc0@Offset(32.0, 24.0), _RenderInkFeatures#feeaa@Offset(32.0, 24.0), RenderPhysicalModel#2162b@Offset(32.0, 24.0), RenderSemanticsAnnotations#fd891@Offset(32.0, 24.0), RenderRepaintBoundary#d7bd2@Offset(32.0, 24.0), RenderIgnorePointer#a7f73@Offset(32.0, 24.0), RenderAnimatedOpacity#c9223@Offset(32.0, 24.0), RenderRepaintBoundary#c96d2@Offset(32.0, 24.0), _RenderFocusTrap#e8514@Offset(32.0, 24.0), RenderSemanticsAnnotations#bfb12@Offset(32.0, 24.0), RenderOffstage#3f9a4@Offset(32.0, 24.0), RenderSemanticsAnnotations#f269c@Offset(32.0, 24.0), _RenderTheatre#6507d@Offset(32.0, 24.0), RenderSemanticsAnnotations#10470@Offset(32.0, 24.0), RenderAbsorbPointer#04188@Offset(32.0, 24.0), RenderPointerListener#f9af4@Offset(32.0, 24.0), RenderSemanticsAnnotations#9ac6c@Offset(32.0, 24.0), RenderSemanticsAnnotations#1e6dd@Offset(32.0, 24.0), RenderSemanticsAnnotations#d350f@Offset(32.0, 24.0), RenderSemanticsAnnotations#2bf5b@Offset(32.0, 24.0), HitTestEntry<HitTestTarget>#02a19(RenderView#9020d), HitTestEntry<HitTestTarget>#2f616(<AutomatedTestWidgetsFlutterBinding>))
#0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:956:25)
#1      WidgetController.getCenter (package:flutter_test/src/controller.dart:839:12)
#2      WidgetController.tap (package:flutter_test/src/controller.dart:273:18)
#3      main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/widget_test.dart:769:18)
<asynchronous suspension>
#4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:125:47)
<asynchronous suspension>
To silence this warning, pass "warnIfMissed: false" to "tap()".
To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.

00:05 +21: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: clicking on portal if above child clicks only the portal                    00:05 +21: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: if portal is not above child, we can click on both                          00:05 +22: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: if portal is not above child, we can click on both                          00:05 +22: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: alignment/size                                                              00:05 +23: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: alignment/size                                                              00:05 +23: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: defaults to fill if no anchor are specified                                 00:05 +24: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: defaults to fill if no anchor are specified                                 00:05 +24: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: click works when switching between anchor/fill                              00:05 +24: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: click works when switching between anchor/fill

Warning: A call to tap() with finder "exactly one widget with key [<'child'>] (ignoring offstage widgets): GestureDetector-[<'child'>](startBehavior: start)" derived an Offset (Offset(400.0, 300.0)) that would not hit test on the specified widget.
Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
The finder corresponds to this RenderBox: RenderSemanticsGestureHandler#7a963 relayoutBoundary=up2
The hit test result at that offset is: HitTestResult(HitTestEntry<HitTestTarget>#f0e9e(TextSpan(<all styles inherited>, "a")), RenderParagraph#0d6f4@Offset(400.0, 300.0), RenderPointerListener#0b0e7@Offset(400.0, 300.0), RenderSemanticsGestureHandler#18c6d@Offset(400.0, 300.0), _RenderPortalTheater#fc34f@Offset(400.0, 300.0), HitTestEntry<HitTestTarget>#be314(RenderView#9020d), HitTestEntry<HitTestTarget>#bd01a(<AutomatedTestWidgetsFlutterBinding>))
#0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:956:25)
#1      WidgetController.getCenter (package:flutter_test/src/controller.dart:839:12)
#2      WidgetController.tap (package:flutter_test/src/controller.dart:273:18)
#3      main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/widget_test.dart:992:18)
<asynchronous suspension>
#4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:125:47)
<asynchronous suspension>
To silence this warning, pass "warnIfMissed: false" to "tap()".
To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.

Warning: A call to tap() with finder "exactly one widget with key [<'child'>] (ignoring offstage widgets): GestureDetector-[<'child'>](startBehavior: start)" derived an Offset (Offset(400.0, 300.0)) that would not hit test on the specified widget.
Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
The finder corresponds to this RenderBox: RenderSemanticsGestureHandler#04744 relayoutBoundary=up2
The hit test result at that offset is: HitTestResult(HitTestEntry<HitTestTarget>#9a11f(TextSpan(<all styles inherited>, "a")), RenderParagraph#b8636@Offset(400.0, 300.0), RenderPointerListener#bb562@Offset(400.0, 300.0), RenderSemanticsGestureHandler#d7ce3@Offset(400.0, 300.0), _RenderPortalTheater#fc34f@Offset(400.0, 300.0), HitTestEntry<HitTestTarget>#cc5b2(RenderView#9020d), HitTestEntry<HitTestTarget>#a2528(<AutomatedTestWidgetsFlutterBinding>))
#0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:956:25)
#1      WidgetController.getCenter (package:flutter_test/src/controller.dart:839:12)
#2      WidgetController.tap (package:flutter_test/src/controller.dart:273:18)
#3      main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/widget_test.dart:1071:18)
<asynchronous suspension>
#4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:125:47)
<asynchronous suspension>
To silence this warning, pass "warnIfMissed: false" to "tap()".
To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.

00:05 +25: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: click works when switching between anchor/fill                              00:05 +25: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: anchor not null then null still clicks                                      00:05 +26: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: anchor not null then null still clicks                                      00:05 +26: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: portals can fill the Portal                                                 00:05 +27: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: portals can fill the Portal                                                 00:05 +27: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal can be added above navigator but under MaterialApp                   00:05 +28: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal can be added above navigator but under MaterialApp                   00:05 +28: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal can be added above navigator but under CupertinoApp                  00:05 +29: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal can be added above navigator but under CupertinoApp                  00:05 +29: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: both entry and modal rebuilds within the same frame with layoutbuilder betwe00:05 +30: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: both entry and modal rebuilds within the same frame with layoutbuilder betwe00:05 +30: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: layout builder between portal and entry on first build                      00:05 +31: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: layout builder between portal and entry on first build                      00:05 +31: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: layout builder between portal and entry without rebuilding portl            00:05 +32: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: layout builder between portal and entry without rebuilding portl            00:05 +32: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: handles reparenting with GlobalKey                                          00:05 +32 ~1: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: handles reparenting with GlobalKey                                       00:05 +32 ~1: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: clip overflow                                                            00:05 +32 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: clip overflow                                                            00:05 +32 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can have multiple portals                                                00:05 +33 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can have multiple portals                                                00:05 +33 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: click is applied in reverse order of portal addition (last click first)  00:05 +34 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: click is applied in reverse order of portal addition (last click first)  00:05 +34 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: portals paints in order of addition (last paints last)                   00:05 +35 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: portals paints in order of addition (last paints last)                   00:05 +35 ~2: All tests passed!

All right. Now tests pass on beta channel.

(base) ➜  flutter_portal git:(fix-compile-error) ✗ fvm spawn beta test
Spawning version "beta"...
00:00 +0: loading /Users/tom/RefCode/flutter_portal/test/widget_test.dart                                                                       00:01 +0: loading /Users/tom/RefCode/flutter_portal/test/widget_test.dart                                                                       00:02 +0: loading /Users/tom/RefCode/flutter_portal/test/widget_test.dart                                                                       00:02 +0: loading /Users/tom/RefCode/flutter_portal/test/anchor_test.dart                                                                       00:02 +0: /Users/tom/RefCode/flutter_portal/test/anchor_test.dart: Anchor is passed proper constraints                                          00:03 +0: /Users/tom/RefCode/flutter_portal/test/anchor_test.dart: Anchor is passed proper constraints                                          00:03 +1: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can optionally delay close with a Duration                                   00:03 +2: /Users/tom/RefCode/flutter_portal/test/anchor_test.dart: Aligned defers to backup if needed                                           00:03 +3: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can optionally delay close with a Duration (anchors)                         00:04 +3: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can optionally delay close with a Duration (anchors)                         00:04 +4: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can optionally delay close with a Duration (anchors)                         00:04 +4: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: handles dispose before timer end                                             00:04 +5: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: handles dispose before timer end                                             00:04 +5: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can update portal during close                                               00:04 +6: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can update portal during close                                               00:04 +6: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can cancel leave timer by reverting visible                                  00:04 +7: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can cancel leave timer by reverting visible                                  00:04 +7: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: visible false > true > false resets the timer and works properly             00:04 +8: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: visible false > true > false resets the timer and works properly             00:04 +8: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: child does not lose state when hiding portal                                 00:04 +9: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: child does not lose state when hiding portal                                 00:04 +9: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: child does not lose state when hiding portal (anchors)                       00:04 +10: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: child does not lose state when hiding portal (anchors)                      00:04 +10: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: PortalProvider updates child                                                00:04 +11: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: PortalProvider updates child                                                00:04 +11: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: PortalEntry requires portal if visible is true                              00:04 +12: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: PortalEntry requires portal if visible is true                              00:04 +12: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal required either portalBuilder or portal                              00:04 +13: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal required either portalBuilder or portal                              00:04 +13: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal synchronously add portals to PortalProvider                          00:04 +14: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal synchronously add portals to PortalProvider                          00:04 +14: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: portals aren't inserted if mounted is false, and visible can be changed any 00:04 +15: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: portals aren't inserted if mounted is false, and visible can be changed any 00:04 +15: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Unmounting Portal removes it on PortalProvider synchronously                00:04 +16: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Unmounting Portal removes it on PortalProvider synchronously                00:04 +16: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: throws if no Portal was found                                               00:04 +17: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: throws if no Portal was found                                               00:04 +17: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: hiding two entries at once                                                  00:05 +17: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: hiding two entries at once                                                  00:05 +18: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: hiding two entries at once                                                  00:05 +18: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: visible defaults to true                                                    00:06 +18: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: visible defaults to true                                                    00:06 +19: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: visible defaults to true                                                    00:06 +19: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can insert a portal without rebuilding PortalProvider at the same time      00:06 +20: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can insert a portal without rebuilding PortalProvider at the same time      00:06 +20: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: clicking on portal if above child clicks only the portal                    00:06 +20: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: clicking on portal if above child clicks only the portal

Warning: A call to tap() with finder "exactly one widget with text "child" (ignoring offstage widgets): Text("child", dependencies: [MediaQuery, DefaultTextStyle])" derived an Offset (Offset(32.0, 24.0)) that would not hit test on the specified widget.
Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
The finder corresponds to this RenderBox: RenderParagraph#731ed relayoutBoundary=up15
The hit test result at that offset is: HitTestResult(RenderPointerListener#05258@Offset(32.0, 24.0), RenderSemanticsAnnotations#6dae6@Offset(32.0, 24.0), RenderMouseRegion#afbb8@Offset(32.0, 24.0), RenderSemanticsAnnotations#2ddd9@Offset(32.0, 24.0), _RenderInkFeatures#2c901@Offset(32.0, 24.0), RenderCustomPaint#ad293@Offset(32.0, 24.0), RenderPhysicalShape#aac44@Offset(32.0, 24.0), RenderConstrainedBox#3f52d@Offset(32.0, 24.0), _RenderInputPadding#5e084@Offset(32.0, 24.0), RenderSemanticsAnnotations#63ad3@Offset(32.0, 24.0), _RenderPortalTheater#c7a0b@Offset(32.0, 24.0), RenderCustomMultiChildLayoutBox#a5758@Offset(32.0, 24.0), _RenderInkFeatures#9d62a@Offset(32.0, 24.0), RenderPhysicalModel#a21c2@Offset(32.0, 24.0), RenderSemanticsAnnotations#dc924@Offset(32.0, 24.0), RenderRepaintBoundary#7ee11@Offset(32.0, 24.0), RenderIgnorePointer#85450@Offset(32.0, 24.0), RenderAnimatedOpacity#be429@Offset(32.0, 24.0), RenderRepaintBoundary#b9e35@Offset(32.0, 24.0), _RenderFocusTrap#6e8ea@Offset(32.0, 24.0), RenderSemanticsAnnotations#705b1@Offset(32.0, 24.0), RenderOffstage#7a8a3@Offset(32.0, 24.0), RenderSemanticsAnnotations#5b2a7@Offset(32.0, 24.0), _RenderTheatre#b6dda@Offset(32.0, 24.0), RenderSemanticsAnnotations#be875@Offset(32.0, 24.0), RenderAbsorbPointer#d1597@Offset(32.0, 24.0), RenderPointerListener#c8ed0@Offset(32.0, 24.0), RenderSemanticsAnnotations#c324e@Offset(32.0, 24.0), RenderSemanticsAnnotations#3fca8@Offset(32.0, 24.0), RenderSemanticsAnnotations#dde54@Offset(32.0, 24.0), RenderSemanticsAnnotations#49d81@Offset(32.0, 24.0), HitTestEntry<HitTestTarget>#c4657(RenderView#c9ef5), HitTestEntry<HitTestTarget>#a5223(<AutomatedTestWidgetsFlutterBinding>))
#0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:956:25)
#1      WidgetController.getCenter (package:flutter_test/src/controller.dart:839:12)
#2      WidgetController.tap (package:flutter_test/src/controller.dart:273:18)
#3      main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/widget_test.dart:769:18)
<asynchronous suspension>
#4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:125:47)
<asynchronous suspension>
To silence this warning, pass "warnIfMissed: false" to "tap()".
To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.

00:06 +21: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: clicking on portal if above child clicks only the portal                    00:06 +21: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: if portal is not above child, we can click on both                          00:06 +22: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: if portal is not above child, we can click on both                          00:06 +22: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: alignment/size                                                              00:06 +23: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: alignment/size                                                              00:06 +23: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: defaults to fill if no anchor are specified                                 00:06 +24: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: defaults to fill if no anchor are specified                                 00:06 +24: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: click works when switching between anchor/fill                              00:06 +24: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: click works when switching between anchor/fill

Warning: A call to tap() with finder "exactly one widget with key [<'child'>] (ignoring offstage widgets): GestureDetector-[<'child'>](startBehavior: start)" derived an Offset (Offset(400.0, 300.0)) that would not hit test on the specified widget.
Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
The finder corresponds to this RenderBox: RenderSemanticsGestureHandler#16782 relayoutBoundary=up2
The hit test result at that offset is: HitTestResult(HitTestEntry<HitTestTarget>#be333(TextSpan(<all styles inherited>, "a")), RenderParagraph#f950d@Offset(400.0, 300.0), RenderPointerListener#8e9c1@Offset(400.0, 300.0), RenderSemanticsGestureHandler#b0d13@Offset(400.0, 300.0), _RenderPortalTheater#9b698@Offset(400.0, 300.0), HitTestEntry<HitTestTarget>#c744f(RenderView#c9ef5), HitTestEntry<HitTestTarget>#def5c(<AutomatedTestWidgetsFlutterBinding>))
#0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:956:25)
#1      WidgetController.getCenter (package:flutter_test/src/controller.dart:839:12)
#2      WidgetController.tap (package:flutter_test/src/controller.dart:273:18)
#3      main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/widget_test.dart:992:18)
<asynchronous suspension>
#4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:125:47)
<asynchronous suspension>
To silence this warning, pass "warnIfMissed: false" to "tap()".
To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.

Warning: A call to tap() with finder "exactly one widget with key [<'child'>] (ignoring offstage widgets): GestureDetector-[<'child'>](startBehavior: start)" derived an Offset (Offset(400.0, 300.0)) that would not hit test on the specified widget.
Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
The finder corresponds to this RenderBox: RenderSemanticsGestureHandler#09e14 relayoutBoundary=up2
The hit test result at that offset is: HitTestResult(HitTestEntry<HitTestTarget>#b1771(TextSpan(<all styles inherited>, "a")), RenderParagraph#5f9af@Offset(400.0, 300.0), RenderPointerListener#99882@Offset(400.0, 300.0), RenderSemanticsGestureHandler#bcfba@Offset(400.0, 300.0), _RenderPortalTheater#9b698@Offset(400.0, 300.0), HitTestEntry<HitTestTarget>#a91b3(RenderView#c9ef5), HitTestEntry<HitTestTarget>#a1ff4(<AutomatedTestWidgetsFlutterBinding>))
#0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:956:25)
#1      WidgetController.getCenter (package:flutter_test/src/controller.dart:839:12)
#2      WidgetController.tap (package:flutter_test/src/controller.dart:273:18)
#3      main.<anonymous closure> (file:///Users/tom/RefCode/flutter_portal/test/widget_test.dart:1071:18)
<asynchronous suspension>
#4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:125:47)
<asynchronous suspension>
To silence this warning, pass "warnIfMissed: false" to "tap()".
To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.

00:06 +25: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: click works when switching between anchor/fill                              00:06 +25: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: anchor not null then null still clicks                                      00:06 +26: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: anchor not null then null still clicks                                      00:06 +26: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: portals can fill the Portal                                                 00:06 +27: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: portals can fill the Portal                                                 00:06 +27: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal can be added above navigator but under MaterialApp                   00:06 +28: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal can be added above navigator but under MaterialApp                   00:06 +28: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal can be added above navigator but under CupertinoApp                  00:06 +29: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: Portal can be added above navigator but under CupertinoApp                  00:06 +29: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: both entry and modal rebuilds within the same frame with layoutbuilder betwe00:06 +30: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: both entry and modal rebuilds within the same frame with layoutbuilder betwe00:06 +30: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: layout builder between portal and entry on first build                      00:06 +31: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: layout builder between portal and entry on first build                      00:06 +31: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: layout builder between portal and entry without rebuilding portl            00:06 +32: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: layout builder between portal and entry without rebuilding portl            00:06 +32: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: handles reparenting with GlobalKey                                          00:06 +32 ~1: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: handles reparenting with GlobalKey                                       00:06 +32 ~1: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: clip overflow                                                            00:06 +32 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: clip overflow                                                            00:06 +32 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can have multiple portals                                                00:06 +33 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: can have multiple portals                                                00:06 +33 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: click is applied in reverse order of portal addition (last click first)  00:06 +34 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: click is applied in reverse order of portal addition (last click first)  00:06 +34 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: portals paints in order of addition (last paints last)                   00:06 +35 ~2: /Users/tom/RefCode/flutter_portal/test/widget_test.dart: portals paints in order of addition (last paints last)                   00:06 +35 ~2: All tests passed!

Lesson: Flutter beta's code is very, very different from Flutter stable's code.

@creativecreatorormaybenot Btw, the experience above shows that, even if we make that cherry pick, Flutter Portal still cannot be working on stable branch, until next major release! (I did not expected that)

Btw, the experience above shows that, even if we make that cherry pick, Flutter Portal still cannot be working on stable branch, until next major release! (I did not expected that)

@fzyzcjy that is not right. Cherrypicks are included with the next patch - that is the idea behind them.

@fzyzcjy I would suggest not rolling this workaround and instead waiting on the CP request review. If it is denied, we can still merge this.
Another option would be to temporarily rollback #44 and publish it with the next stable version.

@fzyzcjy that is not right. Cherrypicks are included with the next patch - that is the idea behind them.

Well, from what I have experimented above, the thing is:

original code + stable 2.10 => success
#44 + stable 2.10 => compile error
#44 + beta => ok
#44 + copy-and-paste-and-modify from stable 2.10  => test error (!)
#44 + copy-and-paste-and-modify from beta => ok

So, if that cherry-pick is done, we are in a situation similar to case 4, instead of case 5. In that case, test still errors.

@fzyzcjy in that case, I suppose we should be fine as long as you remember to remvoe flutter_src/ again :)

@creativecreatorormaybenot Sure :)

Or, maybe we should keep it updated. Because, for example, suppose flutter 2.12 (say) is released, but someone is using flutter 2.10 on their computer. Then, if we use the Flutter built-in code, then we are in trouble (case 4 in above).

Or, maybe we should keep it in our source tree. Because, for example, suppose flutter 2.12 (say) is released, but someone is using flutter 2.10 on their computer. Then, if we use the Flutter built-in code, then we are in trouble (case 4 in above).

We should ignore this case. If they are upgrading a package, we can expect them to run the latest stable version.

@creativecreatorormaybenot Agree. Then I will do that later.


crypto/x509: Certificate Subject UID not being parsed

What version of Go are you using (go version)?
1.10.2
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env)?
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"

What did you do?
Trying to get the UID from certificate attributes.
What did you expect to see?
pkix.Name object with the UID field in it.
What did you see instead?
OID for the UserID http://www.alvestrand.no/objectid/0.9.2342.192003<IP_ADDRESS>.html is not defined in the https://golang.org/src/crypto/x509/pkix/pkix.go, so it is not being parsed.

cc @FiloSottile

/cc @agl too

It should still be accessible unparsed in the Names field.
If you think we should add an entry to the struct for it, we'll need example certificates and the use cases of it. We intentionally only parse the most popular OIDs, and leave the rest to be parsed by applications in Names.

Yeah, I was able to get it this way: https://stackoverflow.com/questions/39125873/golang-subject-dn-from-x509-cert/50640119#50640119, but thanks for your reply, it is simple to get it from Names field (I will update my SO reply with this approach).
I'm using this to get the UID from Apple Push Notifications Certificates since app bundle id is stored there. But I think reading it from Names field is enough for my use case and I can close this issue. Let's reopen if there is more demand for this field.


[change] Update react-native-web example

Utilize ES modules, which are now the default export for
react-native-web.
NOTE: This example requires<EMAIL_ADDRESS>

@HaNdTriX if the Next.js team would prefer to use next-plugin-transpile-modules in place of the custom webpack config I've included, that is fine. Just let me know.

@HaNdTriX this should be ready for merge now.


Add support for configuring custom-endpoint-address values in application.properties for service bus

AzureServiceBusProperties today does not extend provided values for custom-endpoint-address values.
Describe the solution you'd like
I need to be able to pass custom-endpoint-address values in general, for producer, consumer and processor. It need to be respected across all the layers. It used to be supported in event bus, but not in service bus. This is for spring cloud stream auto configurations.
Describe alternatives you've considered
I was able to provide a customizer that worked with producer & consumer, but yet not finding a way to do so for the processor. It will be great if all of this can be done via configurations.
Additional context
Add any other context or screenshots about the feature request here.
Information Checklist
Kindly make sure that you have added all the following information above and checkoff the required fields otherwise we will treat the issuer as an incomplete report

[x ] Description Added
[ x] Expected solution specified

@mohyeid , thanks for reporting.
We have received your submission and will take it into consideration. We appreciate your input and will review this matter as soon as possible.
Please feel free to provide any additional information or context that you think may be helpful. We'll keep you updated on the progress of our review.
Thank you for your contribution to improving our project.

@mohyeid thanks for reporting.
We have received your submission and will take it into consideration. We appreciate your input and will review this matter as soon as possible.
Please feel free to provide any additional information or context that you think may be helpful. We'll keep you updated on the progress of our review.
Thank you for your contribution to improving our project.

@mohyeid thanks for your reporting, PR is drafted, will ship out in the next release this month!

Now it's available.


Use Platform.artifact_cache() instead of reconstructing CASCache from context

See original issue on GitLab
In GitLab by [Gitlab user @jmacarthur] on Sep 14, 2018, 11:36
Background
Currently _sandboxremote.py creates is own CASCache object using the sandbox's context object:
self.cascache = CASCache(self._get_context())
Having two instances may be dangerous, and the 'main' cascache should be available via Platform.artifact_cache(), so we should use that.
Task description

[x] Determine if it's possible to use Platform.artifact_cache()
[x] Change sandboxremote to use it.

Acceptance Criteria
Should be identical functionality to before the change, possibly improved. Remote execution jobs should work as before.

In GitLab by [Gitlab user @danielsilverstone-ct] on Sep 14, 2018, 15:56
mentioned in merge request !797

In GitLab by [Gitlab user @danielsilverstone-ct] on Sep 14, 2018, 15:58
marked the task Determine if it's possible to use Platform.artifact_cache() as completed

In GitLab by [Gitlab user @danielsilverstone-ct] on Sep 14, 2018, 15:58
marked the task Change sandboxremote to use it. as completed

In GitLab by [Gitlab user @toscalix] on Oct 1, 2018, 08:58
assigned to [Gitlab user @jmacarthur]

In GitLab by [Gitlab user @jmacarthur] on Oct 1, 2018, 10:03
closed


Consider adding an issue template config with links to other implementation repos

You can add links to other repos on the issues page.
Example config:
https://github.com/grpc/grpc-dotnet/blob/master/.github/ISSUE_TEMPLATE/config.yml
What it looks like:
https://github.com/grpc/grpc-dotnet/issues/new/choose
grpc/grpc should add links to other repositories. It should reduce how often issues are created in the wrong repository.

Thanks for the suggestion. We'll have to add buttons for several repos like Java, Go, Node, Dotnet, Swift, Kotlin etc. That'll be too many buttons. I don't think creating issues in the wrong repo has been a big issue. @yashykt, what do you think?

It hasn't been much of an issue for us, but I do see the benefit of such links. Especially, for example to be able to create bugs specifically for Python or a different wrapped language, but then that would be too many buttons like Srini said.


[postgres] Reimplement PostgresDriver using deno-postgres

https://github.com/denolib/typeorm/runs/928947102
Tasks

[x] Add basic implementation (#20)

[ ] Enable PostgresDriver in CI (49abf4d74840316651e78278b8fe557045b59bf2)

[ ] Implement missing features and fix failing tests

[ ] Add support for cube

https://github.com/denolib/typeorm/blob/master/test/functional/cube/postgres/cube-postgres.ts

[ ] Add support for enum array

https://github.com/denolib/typeorm/blob/master/test/functional/database-schema/enums-array/enums-array.ts

[x] Add support for array types (may be resolved at #85)

https://github.com/denolib/typeorm/blob/master/test/github-issues/1600/issue-1600.ts

[ ] Add support for enum types

https://github.com/denolib/typeorm/blob/master/test/functional/database-schema/column-types/postgres-enum/postgres-enum.ts
https://github.com/denolib/typeorm/blob/master/test/functional/database-schema/enums/enums.ts
https://github.com/denolib/typeorm/blob/master/test/functional/database-schema/simple-enums/enums.ts
https://github.com/denolib/typeorm/blob/master/test/github-issues/1997/issue-1997.ts
https://github.com/denolib/typeorm/blob/master/test/github-issues/2871/issue-2871.ts
https://github.com/denolib/typeorm/blob/master/test/github-issues/4106/issue-4106.ts
https://github.com/denolib/typeorm/blob/master/test/github-issues/4630/issue-4630.ts

[ ] Add support for hstore

https://github.com/denolib/typeorm/blob/master/test/github-issues/922/issue-922.ts
https://github.com/denolib/typeorm/blob/master/test/github-issues/4719/issue-4719.ts

[ ] Fix increment issue

https://github.com/denolib/typeorm/blob/master/test/other-issues/ekifox-increment-issue/ekifox-increment-issue.ts

[x] Improve compatibility with the original typeorm (#57)

https://github.com/denolib/typeorm/blob/49abf4d74840316651e78278b8fe557045b59bf2/src/driver/postgres/PostgresQueryRunner.ts#L210-L219

Hello, can you add the hacktoberfest label please?


States of toggle buttons of search function barely distinguishable

States of the toggle buttons
Imagine the images as small as the real GUI.
Nothing pressed or focused:

First one focused and not pressed:

First one focused and pressed:

First one not focused and pressed:

Problems
When using the mouse to toggle the buttons, it's hard to intuitively understand what state the buttons are currently in.
When using Tab and Space, the focused-only state looks much too similar to the pressed state.

It's the same with the vertical multi-file search tool. Also, there, the background color of the textboxes look too bright. That background color could be darker in both search tools, I think.

I am looking into it tanks for the proposition. I agree with you I had the same problem will place this issue on my priority list ...

I don't have any selectors to change the focus/unfocused color states if you know of a theme that is doing it let me know and I will investigate further ...


Is there an event generated when editing is cancelled?

When the user cancels in-line editing by pressing the Cancel edit button, is there an event generated?
(Like onItemUpdating/onItemUpdated when user confirms the edit).

There is a onItemEditCanceling callback, but it's not included in any release yet. It's implemented in the latest sources.


Add is_ajax helper to compat.py

Django 3.1 deprecated the HttpRequest.is_ajax method as it relies on a jQuery-specific way of signifying AJAX calls.
For most Oscar projects that's probably ok though, as they only use jQuery.
I see that in the current codebase self.request.is_ajax() was replaced by the less readable
self.request.headers.get('x-requested-with') == 'XMLHttpRequest'

I suggest adding a helper to core/compat.py to restore the old behaviour. Apart from readability that would enable oscar projects to check for AJAX requests in a consistent way with the built-in code.
I'm thinking of
def is_ajax(request):
    """
    Django 3.1 deprecated the  HttpRequest.is_ajax method as it relies on
    a jQuery-specific way of signifying AJAX calls.

    https://docs.djangoproject.com/en/3.1/releases/3.1/#id2
    """
    return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'

I'm happy to submit a PR for this ✌

@SaturnFromTitan This sounds like a good idea. Please make the PR, adding the helper to core/utils.py (core/compat.py is for stuff we ideally want to remove one day).


Speech data update is broken

$ fab data.update
https://docs.google.com/feeds/download/spreadsheets/Export?exportFormat=csv&key=1dDSs5QSEjieH-dWTnR7BVUxI2gH6EiUI0vfmmHMnMQU&gid=0
Start parse(): 52 rows.
Traceback (most recent call last):
  File "/Users/ddebelius/.virtualenvs/commencement/lib/python2.7/site-packages/fabric/main.py", line 717, in main
    *args, **kwargs
  File "/Users/ddebelius/.virtualenvs/commencement/lib/python2.7/site-packages/fabric/tasks.py", line 332, in execute
    results['<local-only>'] = task.run(*args, **new_kwargs)
  File "/Users/ddebelius/.virtualenvs/commencement/lib/python2.7/site-packages/fabric/tasks.py", line 112, in run
    return self.wrapped(*args, **kwargs)
  File "/Users/ddebelius/Projects/commencement/fabfile/data.py", line 22, in update
    update_data()
  File "/Users/ddebelius/.virtualenvs/commencement/lib/python2.7/site-packages/fabric/tasks.py", line 109, in __call__
    return self.run(*args, **kwargs)
  File "/Users/ddebelius/.virtualenvs/commencement/lib/python2.7/site-packages/fabric/tasks.py", line 112, in run
    return self.wrapped(*args, **kwargs)
  File "/Users/ddebelius/Projects/commencement/fabfile/data.py", line 30, in update_data
    commencement_data.parse()
  File "/Users/ddebelius/Projects/commencement/commencement_data.py", line 63, in parse
    row[k] = v.strip()
AttributeError: 'list' object has no attribute ‘strip’

nevermind, it was an auth problem. Works now that I have edit permissions.


Unsupported platform error

When I try to logout from the popup or click to subscribe in the popup I get an 'Unsupported Platform' error (works fine from nextjs side)
Clicking on subscription (network):

Logging out (network):

Also Logging out (console):

I tried adding the chrome ext ID to the hostnames in appwrite etc, but the error still persists.

I tested my deployment on Firefox, Chrome and Edge and they seem fine, so it's most probably from Integrations > Platforms inside cloud.appwrite.io.
It should look like this:

Make sure to add a new web app, with your extension ID on the hostname, name doesn't matter. You can test it first by just adding a wildcard (*) to the hostname, test the sign out, check if it works  and then put your extension ID and check the sign out again.

^ actually on a second pass I realize that Account is false on logout but the profile persists. Logging in with a different account persists the previous profile

So if I login initially with<EMAIL_ADDRESS>I get the correct profile
I logout and the account is false but the profile persists
I login as someone else and the Account it correct but the profile is still<EMAIL_ADDRESS>

I'll verify the logout process to make sure it clears the whole session.
Thanks for spotting this!

I just tested on my end and the profile doesn't persist after signing out.
This might be related to the permission issue you opened.
Sign-out workflow works like this:

calls AppwriteService.signOut() (which deletes current session)
refetches the accounts and profile
a. when fetching account, since no current session is active, it will throw 401 error and will set account false
b. when fetching profile, tries to search for documents, the result is undefined (since the current account doesn't have any permission on database), it will throw an error and will set the profile false

In your case, sign out will remove the account but it will still fetch a profile, because it can find it, so you need to set the profile be read only by the user (because your appwrite database is kind of public, I can access it just by knowing your project id and endpoint url, so you need to secure it)
Alternatively, you can set
  const signOut = async () => {
    try {
      await AppwriteService.signOut();
    } catch (error) {
      console.log("use-account.signOut.error:", error);
    } finally {
      await Promise.all([fetchAccount(), fetchProfile()]);
+      setAccount(false);
+      setProfile(false);
    }
  };

on src/lib/hooks/use-account.ts. But you should still secure your database documents 👍.
Let me know if that works out for you.

Thanks again
I think I figured out the issue. I believe I had set the document security on the profile document after I ran the create-profile function. I deleted the profile table and the create-profile function, then recreated in the correct order and it now works perfectly. Perhaps the payload.id query only works if the permissions are set correctly on the database from the beginning? I don't know but it seems so.
So not a code problem but maybe an appwrite setting problem.


fix: devcontainer interface binding

Add interface binding to the config.
Tested
closes: https://github.com/loco-rs/loco/issues/677
Requires: https://github.com/loco-rs/loco-devcontainer/pull/1

@endrl thanks for this PR! also thanks for adjusting and updating the base_template, i'm happy you found it.
this change is hard to accept since NODE_BINDING is not a universal thing -- is there a different way to achieve what you're trying to solve?

Thank you for you fast response,
i tinkered a little bit and this is what i noticed in docker
# with interface localhost <-- broken port forward
 sudo netstat -tulpn | grep LISTEN
tcp        0      0 <IP_ADDRESS>:39899        <IP_ADDRESS>:*               LISTEN      -
tcp        0      0 <IP_ADDRESS>:45457         <IP_ADDRESS>:*               LISTEN      258/node
tcp6       0      0 ::1:5150                :::*                    LISTEN      1572/target/debug/s

# with interface <IP_ADDRESS> <-- works
sudo netstat -tulpn | grep LISTEN
tcp        0      0 <IP_ADDRESS>:5150            <IP_ADDRESS>:*               LISTEN      1772/target/debug/s
tcp        0      0 <IP_ADDRESS>:46355        <IP_ADDRESS>:*               LISTEN      -
tcp        0      0 <IP_ADDRESS>:38659         <IP_ADDRESS>:*               LISTEN      258/node

# with interface <IP_ADDRESS> <-- works
sudo netstat -tulpn | grep LISTEN
tcp        0      0 <IP_ADDRESS>:5150          <IP_ADDRESS>:*               LISTEN      1788/target/debug/s
tcp        0      0 <IP_ADDRESS>:43631        <IP_ADDRESS>:*               LISTEN      -
tcp        0      0 <IP_ADDRESS>:44405         <IP_ADDRESS>:*               LISTEN      258/node

A strange ipv6 bind is going on with localhost. I don't know why, especially there is no ipv6 network. The node port forward that devcontainer uses is a syscall to <IP_ADDRESS>:PORT. But <IP_ADDRESS> is not reachable when loco binds to localhost
The vs code docs recommends to bind to <IP_ADDRESS>.
Possible solutions

Revert from localhost back to <IP_ADDRESS>
Change from localhost to <IP_ADDRESS>
Add a config option, so users can choose. So you can  bind just to a specific ipX network for example. A feature?!

I think the devcontainer setup should work out of the box, i was trapped because of the following config comment
 # Port on which the server will listen. the server binding is <IP_ADDRESS>:{PORT}

this is solved in upcoming version, we have a new BINDING env var.


[FEAT] - Use a commit or git reference for the tests

Right now, the tests are running against master/main HEAD considering the multiple workflows we have discussed elsewhere, we need to be able to specify the following:

git branch to use
tag, commit or HEAD
repo URL (in case someone is working off their fork of the repo)

We'll need to discuss implementation to ensure the implementation is intuitive and maintainable

sorted in #25


"HMAC signature does not match"

Using the basic example:
CoinPayments api = CoinPayments.builder()
        .publicKey("<publicKey>")
        .privateKey("<privateKey>")
        .client(HttpClients.createDefault()).build();

ResponseWrapper<BasicInfoResponse> accountInfo = api.sendRequest(new CoinPaymentsBasicAccountInfoRequest());
log.info("Account: " + accountInfo.getResult());

Where publicKey and Private key are strings loaded from my environment.
The server response is:
{"error":"HMAC signature does not match","result":[]}
Using maven to pull down the latest.
Suggestions?

Scratch that. Bad read. My Bad.

Hi all,
I am running below curl command as a test the api but it failes with error : 33{"error":"No HMAC signature sent","result":[]}
can someone suggest whats the right HMAC and how i can generate it ?
command  used  :
curl --request POST --url https://www.coinpayments.net/api.php --header 'Content-Type: application/x-www-form-urlencoded' --header 'HMAC:HMAC_GENERATED_AGAINST_MY_PRIVATE_KEY_ONLINE' --data 'version=1&cmd=rates&key=MY_PUBLIC_KEY&format=json'

@garthoid Can you explain the possibilities why we might be getting this error ? I'm doing everything right. I'm doing it in node.js


Support of Stm32duino (STM32F103C)

Can you add support of Stm32duino?
http://www.stm32duino.com/
http://wiki.stm32duino.com/index.php?title=Main_Page

I am unable the run the OO example. Static callbacks seem to work ok.

I've yet to use static functions with schedulers since I stopped playing in all globals and moved a library approach: hence the need for a OO centered scheduler. No more static instances just to access some variable in memory, all is contained within a few inherited member functions.
Now I just pass the scheduler pointer during instancing, and a library can have an arbitrary number of "processes" to run inside of it, so there's zero coupling between the project and the library.
So my suggestion would be to keep the separated approach: the declarations are already very complicated as it is.
My project is nearing "good enough for github" soon, keep a watch and you'll see it. I make extensive use of the scheduler to do all kinds of things, like firing a static function asynchronously from an interrupt, keep a low priority health checker running in the background and, most importantly for me, have a way to do stuff in a class and then wait an arbitrary amount of time before the next run. As long as my classes behave (more than 500us processing is the limit I accept), then it's cooperative scheduler magic in action. I already tried implementing the same stuff (successfully) over FreeRTOS (with an appropriate OO wrapping), but the overhead was tremendous and the Heap massaging is just noise when developing.

Can I close this issue?
I do not have Stm32duino and am not planning on getting one.
If you could create a PR with the code to put Stm32duino to sleep, that'd be great.
Here is the point to do it:
https://github.com/arkhipenko/TaskScheduler/blob/6501258c99db5d1f481c098f20dc6535e3839c19/src/TaskScheduler.h#L891

I can do a few tests, but the OO example is currently not even compiling, so I wouldn't call it closed. I can make PR on that.

You mean this one does not compile?
https://github.com/arkhipenko/TaskScheduler/tree/testing/examples/Scheduler_example21_OO_Callbacks
On which board?
(And please do confirm you are using the testing branch)
It compiles for me on Uno/Nano and Teensy.

If you could create a PR with the code to put Stm32duino to sleep, that'd be great.

I'm implementing the sleep functionality for my projects, after some testing I'll provide a pull-request, no problem.

You mean this one does not compile?

Yes. I found out that there is a way to check free memory in Stm32duino, I'll see if I can easily add that so that your example remains intact.

I've implemented the suggested changes. I'll need to do some more testing, before creating a PR or two.
https://github.com/GitMoDu/TaskScheduler

The sleep on idle seems to be working fine. I have yet to test power consumption to validate, but since this is the test branch, I'm confident in merging.
As for the OOP example, I still get a segfault when iCalc is enabled in  iCalc->waitFor(iMeasure), even when I've stripped down the iCalc to do nothing. Any ideas? My simpler (in terms of scheduler feature use) projects have been working just fine otherwise.

The sleep on idle seems to be working fine. I have yet to test power consumption to validate, but since this is the test branch, I'm confident in merging.
You can use my example 6 to validate without power consumption measurement. The counts with and without #define _TASK_SLEEP_ON_IDLE_RUN should be different.

As for the OOP example,
Do you mean my own example for the OOP does not work? What are you running it on? I only tested on UNO I think.

You can use my example 6 to validate without power consumption measurement.

Excellent, I will, thanks.

Do you mean my own example for the OOP does not work?

Yes, example 21. I'm running on a STM32F1 (a.k.a. Mapple Mini, BluePill) with arduinoSTM32.

Yes, example 21. I'm running on a STM32F1 (a.k.a. Mapple Mini, BluePill) with arduinoSTM32.

I don't know what to do! I don't have STM32F1, so can't test. Could it be the Arduino implementation on STM? Does it generate any additional messages you can send to me?
The most frequent causes of segmentation faults are generally pointer related: dereferencing an uninitialized pointer, a null pointer, or a previously freed pointer; accessing beyond the end (or in front of the beginning, but that's less frequent) of an object (array or other); using the results of an illegal pointer
A null pointer should have segfaulted on other platforms, however, it is not uncommon for MC's to say nothing and just silently die.
It is possible that creation of the Calculator object fails for some reason, and then pointer is null. Could you print the address of the Calculator here: after it is created?
https://github.com/arkhipenko/TaskScheduler/blob/testing/examples/Scheduler_example21_OO_Callbacks/Scheduler_example21_OO_Callbacks.ino#L56

I don't know what to do! I don't have STM32F1, so can't test.

You don't have to, but they cost 1.5€ with shipping included (throw in a few more cents and they'll come with the mapple mini bootloader already flashed, so you can use it with just a usb cable ), so there's really no reason not to get one 👍
Otherwise, I'l probably use the hell out of your scheduler in near future, so I'll be testing and fixing things, if I can.

It is possible that creation of the Calculator object fails for some reason, and then pointer is null.

I agree, it's most likely.
Meanwhile I realized I am dumb: I cannot test sleep with a USB Serial being emulated by the host CPU, obviously. I'll try with a external serial adapter to see if I can test it properly. But you were right, the difference is visible with the Example 6, tried it with an AVR for reference.

@GitMoDu

You don't have to, but they cost 1.5€ with shipping included (throw in a few more cents and they'll come with the mapple mini bootloader already flashed, so you can use it with just a usb cable ), so there's really no reason not to get one
Do you have a link to the one you use with a bootloader? There are so many varieties - I want to test with your exact model

On ebay, just search for Maple Mini STM32.
I have bought a few dozen, all came with bootloader.
I haven't forgotten this issue, I will report when I get the chance to do some testing.

On ebay, just search for Maple Mini STM32.

Thank you! I just bought 3. Will play with it when it comes.

Start without idle sleep.
c1=4634635
c2=1001
Start with idle sleep.
c1=4407173
c2=1001

Ok, this is the best I got with sleep. I believe USB would have to be disabled for optimal results.

You can check out my attempts at https://github.com/GitMoDu/TaskScheduler/commits/testing

I am unable to test right now, but isn't that related to the other issue regarding constructors? I say this because my tasks are explicitly constructed and I never ran into this issue. Ex: MyTask(*Scheduler): Task( 0, TASK_FOREVER, scheduler, true).

I say this because my tasks are explicitly constructed and I never ran into this issue. Ex: MyTask(*Scheduler): Task( 0, TASK_FOREVER, scheduler, true).

I don't think so! I am checking the construction process - the task is constructed. But when the enable explicitly calls OnEnable() method, which is a virtual function, and should call the overloaded one, the whole thing hangs. Just hangs. On esp8266 it throws Exception(2), which according to this:
https://links2004.github.io/Arduino/dc/deb/md_esp8266_doc_exception_causes.html
is Processor internal physical address or data error during instruction fetch
So my theory is it throws execution pointer to some incorrect address and it tries to execute random bytes as processor instructions. I just don't understand why....

When connected to USB, do you find a DFU USB device listed in your computer? If so, ignore the fact the current program has no serial (which is really used in the upload to reset the board), and press the reset button when you're uploading.
If not, and you find an unknown device, then you need to install the drivers.
If nothing shows up, you need to burn the bootloader at least once using a ST-Link.

Pushed to testing

Also, try uploading using the Maple Mini board selected, instead of the generic STM32.
Got the board working and LOVING IT so far. Thanks for the tip!

On ebay, just search for Maple Mini STM32.

These have become my favorite MCs! I have bought 3, already burnt 2 and ordered 4 more!
Thanks again for the tip. They are awesome!

I see the bug has bitten you too. Speaking of, I'm gonna order another box of them :p

But Maple Labs discontinued those, and even the forum is closing down... What's the next thing?

Yes, the "Maple" has been gone for a while.   The "Blue Pill" has pretty
much replaced it and it costs about half as much.
These things cost $2 each and have pretty much taken over the market.
ebay.com/itm/STM32-ARM-Tafel-STM32F103C8T6-ARM-Minimum-System
https://www.ebay.com/itm/STM32-ARM-Tafel-STM32F103C8T6-ARM-Minimum-System-Entwicklung-Tafel-Module-BBC/143225408524?hash=item2158e64c0c:g:NToAAOSwl-FZjqUX
The search terms are either "stm32 minimum system" or you can try "blue
pill" (the name is something to do with the Matrix movie)
This board is very well supported by the Arduino IDE now.
On Tue, May 7, 2019 at 8:27 AM Anatoli Arkhipenko<EMAIL_ADDRESS>wrote:

But Maple Labs discontinued those, and even the forum is closing down...
What's the next thing?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/arkhipenko/TaskScheduler/issues/53#issuecomment-490128650,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABQKNRX7372M5E5LGMEKM4TPUGNXFANCNFSM4EYSUEJA
.

--
Chris Albertson
Redondo Beach, California

Yes, the "Maple" has been gone for a while. The "Blue Pill" has pretty much replaced it and it costs about half as much. These things cost $2 each and have pretty much taken over the market. ebay.com/itm/STM32-ARM-Tafel-STM32F103C8T6-ARM-Minimum-System https://www.ebay.com/itm/STM32-ARM-Tafel-STM32F103C8T6-ARM-Minimum-System-Entwicklung-Tafel-Module-BBC/143225408524?hash=item2158e64c0c:g:NToAAOSwl-FZjqUX The search terms are either "stm32 minimum system" or you can try "blue pill" (the name is something to do with the Matrix movie) This board is very well supported by the Arduino IDE now.
…
On Tue, May 7, 2019 at 8:27 AM Anatoli Arkhipenko @.***> wrote: But Maple Labs discontinued those, and even the forum is closing down... What's the next thing? — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub <#53 (comment)>, or mute the thread https://github.com/notifications/unsubscribe-auth/ABQKNRX7372M5E5LGMEKM4TPUGNXFANCNFSM4EYSUEJA .
-- Chris Albertson Redondo Beach, California

Thank you. I saw them. Don't remember what stopped me - I should order a few and test with TaskScheduler just to make sure it works on this as well...

Don't remember what stopped me
Ah! This thing did not have a bootloader initially - but you can burn one, while Mini comes with it already.


GitLab CI support

GitLab CI exposes a fair number of information about the job in the form of environment variables. Would you be open to supporting them behind a feature flag? Something similar probably goes for GitHub, but I have no experience with their CI.

I would like to.
Could you please provide detail example about?

Here's the full reference.
Not all of the might be applicable, definitely CI_JOB_* and CI_PIPELINE_* are probably reasonable. CI_COMMIT_* is probably redundant. I'd exclude authorization-related stuff.


🐛 BUG: ✘ [ERROR] triggers.map is not a function

Which Cloudflare product(s) does this pertain to?
Workers for Platforms, Wrangler core
What version(s) of the tool(s) are you using?
"wrangler": "^3.0.0"
What version of Node are you using?
20.10.0
What operating system and version are you using?
Mac Sonoma 14.3 (23D56)
Describe the Bug
Observed behavior
On npm run deploy I get the error triggers.map is not a function.
Expected behavior
I would have expected the app to deploy.
Steps to reproduce
This is my basic project index.js file
/**
 * This is a template for a Scheduled Worker that updates TLD data from DNSimple
 * and stores it in Redis. The worker is triggered based on the schedule defined
 * in the wrangler.toml configuration.
 */

export default {
    async scheduled(event, env, ctx) {
        event.waitUntil(handleScheduledEvent());
        console.log(`Update triggered at ${event.scheduledTime}`);
    },
};

async function handleScheduledEvent() {
    const dnsimpleApi = 'https://api.dnsimple.com/v2/tlds';

    try {
        // Fetching TLD data from DNSimple
        const response = await fetch(dnsimpleApi);
        const jsonData = await response.json();
        const tlds = jsonData.data;

        // Update each TLD in Redis
        for (const tld of tlds) {
			await env.KV_TLD_SYNC.put("tld", tld.tld);
        }
    } catch (error) {
        console.error('Error in scheduled event:', error);
    }
}

This is my Wrangler.toml file
#:schema node_modules/wrangler/config-schema.json
name = "tld-sync"
main = "src/index.js"
compatibility_date = "2024-05-02"

# Cron Triggers
# Docs: https://developers.cloudflare.com/workers/platform/triggers/cron-triggers/
# Configuration: https://developers.cloudflare.com/workers/wrangler/configuration/#triggers
[triggers]
crons = "0 * * * *"  # This sets the worker to run at the start of every hour

# Automatically place your workloads in an optimal location to minimize latency.
# If you are running back-end logic in a Worker, running it closer to your back-end infrastructure
# rather than the end user may result in better performance.
# Docs: https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement
# [placement]
# mode = "smart"

# Variable bindings. These are arbitrary, plaintext strings (similar to environment variables)
# Docs:
# - https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables
# Note: Use secrets to store sensitive data.
# - https://developers.cloudflare.com/workers/configuration/secrets/
# [vars]
# MY_VARIABLE = "production_value"

# Bind the Workers AI model catalog. Run machine learning models, powered by serverless GPUs, on Cloudflare’s global network
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#workers-ai
# [ai]
# binding = "AI"

# Bind an Analytics Engine dataset. Use Analytics Engine to write analytics within your Pages Function.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#analytics-engine-datasets
# [[analytics_engine_datasets]]
# binding = "MY_DATASET"

# Bind a headless browser instance running on Cloudflare's global network.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#browser-rendering
# [browser]
# binding = "MY_BROWSER"

# Bind a D1 database. D1 is Cloudflare’s native serverless SQL database.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#d1-databases
# [[d1_databases]]
# binding = "MY_DB"
# database_name = "my-database"
# database_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

# Bind a dispatch namespace. Use Workers for Platforms to deploy serverless functions programmatically on behalf of your customers.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#dispatch-namespace-bindings-workers-for-platforms
# [[dispatch_namespaces]]
# binding = "MY_DISPATCHER"
# namespace = "my-namespace"

# Bind a Durable Object. Durable objects are a scale-to-zero compute primitive based on the actor model.
# Durable Objects can live for as long as needed. Use these when you need a long-running "server", such as in realtime apps.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#durable-objects
# [[durable_objects.bindings]]
# name = "MY_DURABLE_OBJECT"
# class_name = "MyDurableObject"

# Durable Object migrations.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#migrations
# [[migrations]]
# tag = "v1"
# new_classes = ["MyDurableObject"]

# Bind a Hyperdrive configuration. Use to accelerate access to your existing databases from Cloudflare Workers.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#hyperdrive
# [[hyperdrive]]
# binding = "MY_HYPERDRIVE"
# id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# Bind a KV Namespace. Use KV as persistent storage for small key-value pairs.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#kv-namespaces
# [[kv_namespaces]]
# binding = "REDACTED"
# id = "redacted"

# Bind an mTLS certificate. Use to present a client certificate when communicating with another service.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#mtls-certificates
# [[mtls_certificates]]
# binding = "MY_CERTIFICATE"
# certificate_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

# Bind a Queue producer. Use this binding to schedule an arbitrary task that may be processed later by a Queue consumer.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#queues
# [[queues.producers]]
# binding = "MY_QUEUE"
# queue = "my-queue"

# Bind a Queue consumer. Queue Consumers can retrieve tasks scheduled by Producers to act on them.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#queues
# [[queues.consumers]]
# queue = "my-queue"

# Bind an R2 Bucket. Use R2 to store arbitrarily large blobs of data, such as files.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#r2-buckets
# [[r2_buckets]]
# binding = "MY_BUCKET"
# bucket_name = "my-bucket"

# Bind another Worker service. Use this binding to call another Worker without network overhead.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings
# [[services]]
# binding = "MY_SERVICE"
# service = "my-service"

# Bind a Vectorize index. Use to store and query vector embeddings for semantic search, classification and other vector search use-cases.
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#vectorize-indexes
# [[vectorize]]
# binding = "MY_INDEX"
# index_name = "my-index"

I don't see why this error is happening. Any help would be greatly appreciated.
Please provide a link to a minimal reproduction
No response
Please provide any relevant error logs
triggers.map is not a function

crons expects an array, so if you change your wrangler.toml to include:
crons = ["0 * * * *"]

it should work as expected.


issue: How to send commands to the integrated terminal

Did you check docs and existing issues?

[X] I have read all the LazyVim docs
[X] I have searched the existing issues of LazyVim
[X] I have searched the existing issues of plugins related to this issue

Neovim version (nvim -v)
v0.9.4
Operating system/version
MacOS 14.2.1
Describe the bug
I'm trying to create a keyboard shortcut that executes a command in the terminal that comes with lazyvim by default
vim.keymap.set("n", "<leader>glci", function()
	Util.terminal({ "ls -la ./example" }, { cwd = Util.root(), esc_esc = false, ctrl_hjkl = false })
end, { desc = "ls example" })

error

If i use only comand without args work, example: ls (alone),
Steps To Reproduce

add the code ⬇  in lua/config/keymaps.lua

vim.keymap.set("n", "<leader>glci", function()
	Util.terminal({ "ls -la ./example" }, { cwd = Util.root(), esc_esc = false, ctrl_hjkl = false })
end, { desc = "ls example" })

open lazyvim and press glci

Expected Behavior
The expected one is to create a keymap that executes commands within the lazyvim terminal with the arguments you need

You can try:
vim.keymap.set("n", "<leader>glci", function()
	require("lazy.util").float_cmd({ "ls -la ./example" })
end, { desc = "ls example" })

float_term and float_cmd

vim.keymap.set("n", "<leader>glcc", function()
  require("lazy.util").float_cmd({ "ls", "-al" })
end, { desc = "float_cmd" })

Try this. float_term is for opening executable apps in term I believe (like lazygit for example).

if you want add location, try this
vim.keymap.set("n", "<leader>glci", function()
  require("lazy.util").float_cmd({ "ls", "-la" }, { cwd = vim.fn.expand("./example") })
end, { desc = "ls example" })

vim.keymap.set("n", "<leader>glcc", function()
  require("lazy.util").float_cmd({ "ls", "-al" })
end, { desc = "float_cmd" })

Try this. float_term is for opening executable apps in term I believe (like lazygit for example).

Thanks, it is working, with simple commands like ls -la, I used this as an example, but when using commands like k9s (cli k8s) and glab (cli gitlab) the terminal freezes

I don't know what these commands do. Are they supposed to be interactive? Because when you execute :term cmd it runs in a non-interactive shell. If you'd like any kind of interaction, you should simply just open a terminal and type your commands. That's just how the Neovim terminal works. Nothing to do with LazyVim I believe, since LazyVim also uses Neovim terminal under the hood.

Yes, they are interactive commands, and the idea of creating a floating terminal with an interactive command occurred to me when I saw how lazygit is executed from lazyvim

That is just the app taking care of the interactivity. See :h :terminal

Run {cmd} in a non-interactive 'shell' in a new
|terminal-emulator| buffer. Without {cmd}, start an
interactive 'shell'.

If you want that your best bet is to start the terminal yourself and interact with the commands you want (to the best of my knowledge).


Can't install dependency 'mediator_lua' of busted via luarocks

I try to install busted and it fails, but strange is that it seems to be kind of DNS resolution problem but other packages worked just fine. I tried to purge and install again and it always fails with the same message on the same package.
$ luarocks --lua-version=5.1 install busted
Installing https://luarocks.org/busted-2.1.1-1.src.rock
Missing dependencies for busted 2.1.1-1:
   mediator_lua >= 1.1.1 (not installed)

busted 2.1.1-1 depends on lua >= 5.1 (5.1-1 provided by VM)
busted 2.1.1-1 depends on lua_cliargs 3.0 (3.0-2 installed)
busted 2.1.1-1 depends on luafilesystem >= 1.5.0 (1.8.0-1 installed)
busted 2.1.1-1 depends on luasystem >= 0.2.0 (0.2.1-0 installed)
busted 2.1.1-1 depends on dkjson >= 2.1.0 (2.6-1 installed)
busted 2.1.1-1 depends on say >= 1.4-1 (1.4.1-3 installed)
busted 2.1.1-1 depends on luassert >= 1.9.0-1 (1.9.0-1 installed)
busted 2.1.1-1 depends on lua-term >= 0.1 (0.7-1 installed)
busted 2.1.1-1 depends on penlight >= 1.3.2 (1.13.1-1 installed)
busted 2.1.1-1 depends on mediator_lua >= 1.1.1 (not installed)
Installing https://luarocks.org/mediator_lua-1.1.2-0.rockspec
Warning: Failed downloading. Attempting mirror at https://raw.githubusercontent.com/rocks-moonscript-org/moonrocks-mirror/master/mediator_lua-1.1.2-0.rockspec
Warning: Failed downloading. Attempting mirror at https://luafr.org/luarocks/mediator_lua-1.1.2-0.rockspec

Error: Failed installing dependency: https://luarocks.org/mediator_lua-1.1.2-0.rockspec - Error fetching file: Failed downloading https://luarocks.org/mediator_lua-1.1.2-0.rockspec -
temporary failure in name resolution
temporary failure in name resolution
temporary failure in name resolution

I am on Fedora Silverblue 37, not sure if this makes any difference here.
Any ideas what can be the issue?

I think this is a LuaRocks issue, not a Busted one

@Tieske thank you for your fast response, then I will open an issue there.


vscode not picking up environment variables (when opened from terminal)

Does this issue occur when all extensions are disabled?: Yes/No

VS Code Version: 1.61.8
OS Version: 12.2.1

Steps to Reproduce:

Open vscode from terminal code . that has valid credentials
Create ipynb
Run code that requires AWS credentials

Running an ipynb from within vscode gives the following error that is not resolved by restarting laptop/vscode:
[WARNING] Credentials were refreshed, but the refreshed credentials are still expired.
Running directly from a web-based jupter session works fine, even when opened from the same terminal:
[   INFO] Found credentials in environment variables.
Unable to resolve issue (reinstalling vscode temporarily worked, but then subsequently dailed

Thanks for creating this issue! It looks like you may be using an old version of VS Code, the latest stable release is 1.68.1. Please try upgrading to the latest version and checking whether this issue remains.
Happy Coding!


Jesse: Watch (?-i:1LliyVMqm10tTdcSiTgcnF)(?#Spotify playlist)

Jesse requests the watch of the watch_keyword (?-i:1LliyVMqm10tTdcSiTgcnF)(?#Spotify playlist). See the MS search here and the Stack Exchange search in text, in URLs, and in code.

(?-i:1LliyVMqm10tTdcSiTgcnF)(?#Spotify playlist) has been seen in 1 true positive, 0 false positives, and 0 NAAs.

Approved by Jeff Schaller in Charcoal HQ


Fix Board.move error and a whole lot more

This fixes #12 and makes interfacing with the board a whole lot easier.
What majorly changed was:

1board.draw()is nowprint (board)`
board.game_board [row] [col] is now board [row, col]
inputParser is now board.getMove
The Players class has been moved to the Board class.

4h till Italy, ill be able to look at it then. this sounds awesome!