Giter Club home page Giter Club logo

developer_quest's Introduction

Developer Quest

Become a tech lead, slay bugs, and don't get fired.

All in Flutter.

Research tree

The game progression is based on a "research tree" of tasks. The tree is defined in code in lib/src/shared_state/task_tree but for clarity it is also kept as a diagram in assets/docs. Here's the PNG.

The task "research tree"

Performance testing

Attach a real device and run the following command from the root of the repo:

flutter drive --target=test_driver/performance.dart --profile

This will do an automated run-through of the app, and will save the output to files.

  • Look into to build/walkthrough-*.json files for detailed summaries of each run.
  • Look at test_driver/perf_stats.tsv to compare latest runs with historical data.
  • Run Rscript test_driver/generate-graphs.R (assuming you have R installed) to generate boxplots of the latest runs. This will show up as test_driver/*.pdf files.
  • Peruse the raw data file (used by R to generate the boxplots) by opening the durations.tsv file. These files contain build and rasterization times for each frame for every run.

If you want to get several runs at once, you can use something like the following command:

DESC="my change" bash -c 'for i in {1..5}; do flutter drive --target=test_driver/performance.dart --profile; sleep 1; done'

Why run several times when we get so many data points on each walkthrough? With several identical walkthroughs it's possible to visually check variance between runs. Even with box plots, these nuances get lost in the summary stats, so it's hard to see whether a change actually brought any performance improvement or not. Running several times also eliminates the effect of extremely bad luck, like for example when Android decides to update some app while test is running.

Lock CPU and GPU speed for your performance test device

Run the following command when your performance test device is attached via USB.

./tool/lock_android_scaling.sh

WARNING:

Where to store the profiling data

You probably don't want to check the *.tsv output files into the repo. For that, run git update-index --assume-unchanged test_driver/*.tsv in the root dir. This is a one time command per machine.

developer_quest's People

Contributors

bean5 avatar brianegan avatar efortuna avatar emshack avatar filiph avatar luigi-rosso avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

developer_quest's Issues

Minor Team Tab Design Tweaks

These are lower priority, but it would be nice to have the characters fit in the buttons a bit bigger and overflow a tad. This is what they currently look like:
Simulator Screen Shot - iPhone 6s Plus - 2019-04-26 at 16 15 30

How they look in the designs:
Team Tab Hired

I assume this is challenging based on different resolutions, but perhaps there's a way we can give them absolute positioning relative to their parent. In CSS we'd use absolute positioning inside a relative container with custom top/left/right/bottom values to make it look relatively the same on different resolutions. I'm sure there's something similar if not better in Flutter!

Even more minor: can we move the notification bubble over a tad, so it's positioned at 2/3rds of the width of the tab?

New logo/icon proposal

Good day sir. I am a graphic designer and i am interested in designing a logo for your good project. I will be doing it as a gift for free. I just need your permission first before I begin my design. Hoping for your positive feedback. Thanks

i18n Solution

I'm just dumping Strings directly into the build methods. Should we setup LocalizationDelegates?

restart button/timeout

Presumably this just hasn't been implemented yet, but I don't see a "restart" button and/or a timeout pop-up

Not compiling

Hello, I just cloned the repo and when compiling/running, I get this error:

Compiler message:
file:///Users/david/development/flutter/.pub-cache/git/Flare-Flutter-4aebb0ff5b98c7bcf2183c6bac8226cc7ddf5402/flare_flutter/lib/flare.dart:1023:18: Error: The argument type 'Int32List' can't be assigned to the parameter type 'Uint16List'.
 - 'Int32List' is from 'dart:typed_data'.
 - 'Uint16List' is from 'dart:typed_data'.
Try changing the type of the parameter, or casting the argument to 'Uint16List'.
        indices: _indices, textureCoordinates: _uvBuffer);
                 ^
Compiler failed on /Users/david/development/projects/developer_quest/lib/main.dart
Gradle task assembleDebug failed with exit code 1

This is my flutter doctor:

[✓] Flutter (Channel dev, v1.5.8, on Mac OS X 10.14.4 18E226, locale en-BR)
• Flutter version 1.5.8 at /Users/david/development/flutter
• Framework revision 0ba67226ee (2 weeks ago), 2019-04-24 17:18:28 -0700
• Engine revision c63d1cf9c9
• Dart version 2.3.0 (build 2.3.0-dev.0.1 1f1592edce)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
• Android SDK at /Users/david/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• ANDROID_HOME = /Users/david/Library/Android/sdk
• ANDROID_SDK_ROOT = /Users/david/Library/Android/sdk
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
• All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 10.2.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 10.2.1, Build version 10E1001
• ios-deploy 1.9.4
• CocoaPods version 1.7.0.beta.1

[✓] Android Studio (version 3.4)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 35.2.1
• Dart plugin version 183.6270
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)

[✓] VS Code (version 1.33.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.0.1

[✓] Connected device (2 available)
• Redmi Go • 106ad4f17d85 • android-arm • Android 8.1.0 (API 27)
• OnePlus 6 • 9dc80123 • android-arm64 • Android 9 (API 28)

• No issues found!

Any hints on what is breaking the project?

David

PointerExit bug/crash. [p0]

This one's only happening in the demo branch, only when using a mouse. It happens if your cursor was over one of the characters and the inactivity timeout pops you back to the welcome screen. The stack seems to suggest that in the process of detaching, the Listener fires the onPointerExit callback. We call setState when that happens, which causes this error. The error message, however, mentions that we are in a build phase...either way, is there a good way to detect either condition and avoid calling setState, or is there something more fundamental going on here?

This ends up putting the demo in an unrecoverable state.

I/flutter ( 6197): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter ( 6197): The following assertion was thrown building Overlay-[LabeledGlobalKey<OverlayState>#e7924](state:
I/flutter ( 6197): OverlayState#1e814(tickers: tracking 0 tickers, entries: [OverlayEntry#56a87(opaque: false;
I/flutter ( 6197): maintainState: false), OverlayEntry#e61e6(opaque: false; maintainState: true),
I/flutter ( 6197): OverlayEntry#5b713(opaque: true; maintainState: false), OverlayEntry#5be4e(opaque: false;
I/flutter ( 6197): maintainState: true)])):
I/flutter ( 6197): setState() or markNeedsBuild() called during build.
I/flutter ( 6197): This CharacterListItem widget cannot be marked as needing to build because the framework is already
I/flutter ( 6197): in the process of building widgets. A widget can be marked as needing to be built during the build
I/flutter ( 6197): phase only if one of its ancestors is currently building. This exception is allowed because the
I/flutter ( 6197): framework builds parent widgets before children, which means a dirty descendant will always be
I/flutter ( 6197): built. Otherwise, the framework might not visit this widget during this build phase.
I/flutter ( 6197): The widget on which setState() or markNeedsBuild() was called was:
I/flutter ( 6197):   CharacterListItem(state: _CharacterListItemState#9f280)
I/flutter ( 6197): The widget which was currently being built when the offending call was made was:
I/flutter ( 6197):   Overlay-[LabeledGlobalKey<OverlayState>#e7924](state: OverlayState#1e814(tickers: tracking 0
I/flutter ( 6197):   tickers, entries: [OverlayEntry#56a87(opaque: false; maintainState: false),
I/flutter ( 6197):   OverlayEntry#e61e6(opaque: false; maintainState: true), OverlayEntry#5b713(opaque: true;
I/flutter ( 6197):   maintainState: false), OverlayEntry#5be4e(opaque: false; maintainState: true)]))
I/flutter ( 6197):
I/flutter ( 6197): When the exception was thrown, this was the stack:
I/flutter ( 6197): #0      Element.markNeedsBuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:3503:11)
I/flutter ( 6197): #1      Element.markNeedsBuild (package:flutter/src/widgets/framework.dart:3529:6)
I/flutter ( 6197): #2      State.setState (package:flutter/src/widgets/framework.dart:1133:14)
I/flutter ( 6197): #3      _CharacterListItemState._stopPlaying (package:dev_rpg/src/game_screen/character_pool_page.dart:91:44)
I/flutter ( 6197): #4      MouseTracker.detachAnnotation (package:flutter/src/gestures/mouse_tracking.dart:125:20)
I/flutter ( 6197): #5      RenderPointerListener.detach (package:flutter/src/rendering/proxy_box.dart:2593:45)
I/flutter ( 6197): #6      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #7      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #8      _RenderSliverMultiBoxAdaptor&RenderSliver&ContainerRenderObjectMixin.detach (package:flutter/src/rendering/object.dart:3032:13)
I/flutter ( 6197): #9      RenderSliverMultiBoxAdaptor.detach (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:305:11)
I/flutter ( 6197): #10     _RenderSliverPadding&RenderSliver&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #11     _RenderViewportBase&RenderBox&ContainerRenderObjectMixin.detach (package:flutter/src/rendering/object.dart:3032:13)
I/flutter ( 6197): #12     RenderViewportBase.detach (package:flutter/src/rendering/viewport.dart:285:11)
I/flutter ( 6197): #13     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #14     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #15     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #16     RenderPointerListener.detach (package:flutter/src/rendering/proxy_box.dart:2595:11)
I/flutter ( 6197): #17     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #18     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #19     RenderPointerListener.detach (package:flutter/src/rendering/proxy_box.dart:2595:11)
I/flutter ( 6197): #20     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #21     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #22     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #23     RenderCustomPaint.detach (package:flutter/src/rendering/custom_paint.dart:496:11)
I/flutter ( 6197): #24     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #25     _RenderStack&RenderBox&ContainerRenderObjectMixin.detach (package:flutter/src/rendering/object.dart:3032:13)
I/flutter ( 6197): #26     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #27     _RenderFlex&RenderBox&ContainerRenderObjectMixin.detach (package:flutter/src/rendering/object.dart:3032:13)
I/flutter ( 6197): #28     _RenderCustomMultiChildLayoutBox&RenderBox&ContainerRenderObjectMixin.detach (package:flutter/src/rendering/object.dart:3032:13)
I/flutter ( 6197): #29     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #30     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #31     _RenderCustomClip.detach (package:flutter/src/rendering/proxy_box.dart:1189:11)
I/flutter ( 6197): #32     __RenderLayoutBuilder&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #33     __RenderLayoutBuilder&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #34     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #35     RenderPointerListener.detach (package:flutter/src/rendering/proxy_box.dart:2595:11)
I/flutter ( 6197): #36     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #37     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #38     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #39     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #40     RenderAnimatedOpacity.detach (package:flutter/src/rendering/proxy_box.dart:887:11)
I/flutter ( 6197): #41     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #42     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #43     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #44     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #45     AbstractNode.dropChild (package:flutter/src/foundation/node.dart:147:13)
I/flutter ( 6197): #46     RenderObject.dropChild (package:flutter/src/rendering/object.dart:1169:11)
I/flutter ( 6197): #47     _RenderStack&RenderBox&ContainerRenderObjectMixin.remove (package:flutter/src/rendering/object.dart:2977:5)
I/flutter ( 6197): #48     MultiChildRenderObjectElement.removeChildRenderObject (package:flutter/src/widgets/framework.dart:4957:18)
I/flutter ( 6197): #49     RenderObjectElement.detachRenderObject (package:flutter/src/widgets/framework.dart:4744:36)
I/flutter ( 6197): #50     Element.detachRenderObject.<anonymous closure> (package:flutter/src/widgets/framework.dart:2867:13)
I/flutter ( 6197): #51     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3770:14)
I/flutter ( 6197): #52     Element.detachRenderObject (package:flutter/src/widgets/framework.dart:2866:5)
I/flutter ( 6197): #53     Element.detachRenderObject.<anonymous closure> (package:flutter/src/widgets/framework.dart:2867:13)
I/flutter ( 6197): #54     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3770:14)
I/flutter ( 6197): #55     Element.detachRenderObject (package:flutter/src/widgets/framework.dart:2866:5)
I/flutter ( 6197): #56     Element.detachRenderObject.<anonymous closure> (package:flutter/src/widgets/framework.dart:2867:13)
I/flutter ( 6197): #57     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3770:14)
I/flutter ( 6197): #58     Element.detachRenderObject (package:flutter/src/widgets/framework.dart:2866:5)
I/flutter ( 6197): #59     Element.deactivateChild (package:flutter/src/widgets/framework.dart:2996:11)
I/flutter ( 6197): #60     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4694:11)
I/flutter ( 6197): #61     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4992:17)
I/flutter ( 6197): #62     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter ( 6197): #63     _TheatreElement.update (package:flutter/src/widgets/overlay.dart:607:16)
I/flutter ( 6197): #64     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter ( 6197): #65     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter ( 6197): #66     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter ( 6197): #67     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2278:33)
I/flutter ( 6197): #68     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:700:20)
I/flutter ( 6197): #69     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:286:5)
I/flutter ( 6197): #70     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1012:15)
I/flutter ( 6197): #71     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:952:9)
I/flutter ( 6197): #72     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:864:5)
I/flutter ( 6197): #76     _invoke (dart:ui/hooks.dart:219:10)
I/flutter ( 6197): #77     _drawFrame (dart:ui/hooks.dart:178:3)
I/flutter ( 6197): (elided 3 frames from package dart:async)
I/flutter ( 6197): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 6197): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2276 pos 16: '!_dirtyElements[index]._active || _dirtyElements[index]._debugIsInScope(context)': is not true.
I/flutter ( 6197): Another exception was thrown: Navigator operation requested with a context that does not include a Navigator.
I/flutter ( 6197): Another exception was thrown: Navigator operation requested with a context that does not include a Navigator.
I/flutter ( 6197): Another exception was thrown: Navigator operation requested with a context that does not include a Navigator.
I/flutter ( 6197): Another exception was thrown: Navigator operation requested with a context that does not include a Navigator.
I/flutter ( 6197): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2276 pos 16: '!_dirtyElements[index]._active || _dirtyElements[index]._debugIsInScope(context)': is not true.
I/flutter ( 6197): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2276 pos 16: '!_dirtyElements[index]._active || _dirtyElements[index]._debugIsInScope(context)': is not true.
I/flutter ( 6197): Another exception was thrown: Duplicate GlobalKeys detected in widget tree.

Smaller screens show highlight "overflow" on entry screen

See image, on the right side:
IMG_1055

When the glowfor the "refactorer" gets large, it overflows the box behind it and you can see a line. I don't think this intended. Viewable on an iPhone 8 or phones with smaller screens (or height-width ratios that are closer to square)

Assertion thrown in Color.withOpacity / FlutterActorImage.draw

Cannot investigate, so I'm just capturing.

In this state (after the first task got completed and after I tapped to add a new task):

screenshot-1556062370334

I got this assertion error

I/flutter ( 6244): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 6244): The following assertion was thrown during paint():
I/flutter ( 6244): 'dart:ui/painting.dart': Failed assertion: line 187: '<optimized out>': is not true.
I/flutter ( 6244): 
I/flutter ( 6244): Either the assertion indicates an error in the framework itself, or we should provide substantially
I/flutter ( 6244): more information in this error message to help you determine and fix the underlying cause.
I/flutter ( 6244): In either case, please report this assertion by filing a bug on GitHub:
I/flutter ( 6244):   https://github.com/flutter/flutter/issues/new?template=BUG.md
I/flutter ( 6244): 
I/flutter ( 6244): When the exception was thrown, this was the stack:
I/flutter ( 6244): #2      Color.withOpacity (dart:ui/painting.dart:187:12)
I/flutter ( 6244): #3      FlutterActorImage.draw (package:flare_flutter/flare.dart:1009:33)
I/flutter ( 6244): #4      FlutterActorArtboard.draw (package:flare_flutter/flare.dart:675:44)
I/flutter ( 6244): #5      HiringBustRenderObject.paintFlare (package:dev_rpg/src/widgets/flare/hiring_bust.dart:190:16)
I/flutter ( 6244): #6      FlareRenderBox.paint (package:flare_flutter/flare_render_box.dart:192:7)
I/flutter ( 6244): #7      RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #8      PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #9      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 6244): #10     RenderDecoratedBox.paint (package:flutter/src/rendering/proxy_box.dart:1945:11)
I/flutter ( 6244): #11     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #12     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #13     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 6244): #14     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #15     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #16     _RenderWrap&RenderBox&ContainerRenderObjectMixin&RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2273:15)
I/flutter ( 6244): #17     RenderWrap.paint (package:flutter/src/rendering/wrap.dart:762:7)
I/flutter ( 6244): #18     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #19     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #20     _RenderFlex&RenderBox&ContainerRenderObjectMixin&RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2273:15)
I/flutter ( 6244): #21     RenderFlex.paint (package:flutter/src/rendering/flex.dart:942:7)
I/flutter ( 6244): #22     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #23     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #24     _RenderFlex&RenderBox&ContainerRenderObjectMixin&RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2273:15)
I/flutter ( 6244): #25     RenderFlex.paint (package:flutter/src/rendering/flex.dart:942:7)
I/flutter ( 6244): #26     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #27     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #28     RenderShiftedBox.paint (package:flutter/src/rendering/shifted_box.dart:70:15)
I/flutter ( 6244): #29     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #30     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #31     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 6244): #32     RenderPointerListener.paint (package:flutter/src/rendering/proxy_box.dart:2608:11)
I/flutter ( 6244): #33     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #34     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #35     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 6244): #36     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #37     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #38     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 6244): #39     _RenderInkFeatures.paint (package:flutter/src/material/material.dart:510:11)
I/flutter ( 6244): #40     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #41     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #42     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 6244): #43     RenderCustomPaint.paint (package:flutter/src/rendering/custom_paint.dart:564:11)
I/flutter ( 6244): #44     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #45     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #46     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 6244): #47     PaintingContext.pushClipPath.<anonymous closure> (package:flutter/src/rendering/object.dart:444:81)
I/flutter ( 6244): #48     ClipContext._clipAndPaint (package:flutter/src/painting/clip.dart:29:12)
I/flutter ( 6244): #49     ClipContext.clipPathAndPaint (package:flutter/src/painting/clip.dart:41:5)
I/flutter ( 6244): #50     PaintingContext.pushClipPath (package:flutter/src/rendering/object.dart:444:7)
I/flutter ( 6244): #51     RenderClipPath.paint (package:flutter/src/rendering/proxy_box.dart:1493:15)
I/flutter ( 6244): #52     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #53     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #54     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 6244): #55     RenderDecoratedBox.paint (package:flutter/src/rendering/proxy_box.dart:1945:11)
I/flutter ( 6244): #56     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #57     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #58     RenderShiftedBox.paint (package:flutter/src/rendering/shifted_box.dart:70:15)
I/flutter ( 6244): #59     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #60     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 6244): #61     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:123:15)
I/flutter ( 6244): #62     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2104:7)
I/flutter ( 6244): #63     PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:128:11)
I/flutter ( 6244): #64     PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:96:5)
I/flutter ( 6244): #65     PipelineOwner.flushPaint (package:flutter/src/rendering/object.dart:859:29)
I/flutter ( 6244): #66     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:349:19)
I/flutter ( 6244): #67     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:701:13)
I/flutter ( 6244): #68     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:286:5)
I/flutter ( 6244): #69     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1012:15)
I/flutter ( 6244): #70     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:952:9)
I/flutter ( 6244): #71     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:864:5)
I/flutter ( 6244): #75     _invoke (dart:ui/hooks.dart:219:10)
I/flutter ( 6244): #76     _drawFrame (dart:ui/hooks.dart:178:3)
I/flutter ( 6244): (elided 5 frames from class _AssertionError and package dart:async)
I/flutter ( 6244): 
I/flutter ( 6244): The following RenderObject was being processed when the exception was fired:
I/flutter ( 6244):   HiringBustRenderObject#4aafe
I/flutter ( 6244):   creator: HiringBust ← DecoratedBox ← ConstrainedBox ← Container ← Wrap ← WorkTeam ← Column ←
I/flutter ( 6244):   TeamProgressIndicator ← Column ← Padding ← Listener ← _GestureSemantics ← ⋯
I/flutter ( 6244):   parentData: <none> (can use size)
I/flutter ( 6244):   constraints: BoxConstraints(w=71.0, h=71.0)
I/flutter ( 6244):   size: Size(71.0, 71.0)
I/flutter ( 6244): This RenderObject has no descendants.
I/flutter ( 6244): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 6244): Another exception was thrown: 'dart:ui/painting.dart': Failed assertion: line 187: '<optimized out>': is not true.
I/chatty  ( 6244): uid=10192(dev.flutter.devRpg) 1.ui identical 12 lines
I/flutter ( 6244): Another exception was thrown: 'dart:ui/painting.dart': Failed assertion: line 187: '<optimized out>': is not true.
I/flutter ( 6244): Another exception was thrown: 'dart:ui/painting.dart': Failed assertion: line 187: '<optimized out>': is not true.
I/chatty  ( 6244): uid=10192(dev.flutter.devRpg) 1.ui identical 4 lines
I/flutter ( 6244): Another exception was thrown: 'dart:ui/painting.dart': Failed assertion: line 187: '<optimized out>': is not true.
I/flutter ( 6244): Another exception was thrown: 'dart:ui/painting.dart': Failed assertion: line 187: '<optimized out>': is not true.
I/chatty  ( 6244): uid=10192(dev.flutter.devRpg) 1.ui identical 16 lines
I/flutter ( 6244): Another exception was thrown: 'dart:ui/painting.dart': Failed assertion: line 187: '<optimized out>': is not true.
I/flutter ( 6244): Another exception was thrown: 'dart:ui/painting.dart': Failed assertion: line 187: '<optimized out>': is not true.
I/chatty  ( 6244): uid=10192(dev.flutter.devRpg) 1.ui identical 10 lines

It's an assertion, so won't show up in production, but it definitely signifies something fishy. Especially since it's thrown from dart:ui/painting.dart. Unfortunately, the exact line is optimized out (even though we're in debug mode, which is a surprise to me).

build failed (flare_flutter/lib/flare.dart:1023)

file:///C:/Users/17080854/AppData/Roaming/Pub/Cache/git/Flare-Flutter-4aebb0ff5b98c7bcf2183c6bac8226cc7ddf5402/flare_flutter/lib/flare.dart:1023:18: Error: The argument type 'Int32List' can't be assigned to the parameter type 'Uint16List'.

  • 'Int32List' is from 'dart:typed_data'.
  • 'Uint16List' is from 'dart:typed_data'.
    Try changing the type of the parameter, or casting the argument to 'Uint16List'.
    indices: _indices, textureCoordinates: _uvBuffer);

Character modal should have a max height

This modal should probably not scale more than its contents' height. Separately, and not as important, we might want to give the character area a darker background… the glows don't look great on the white background.

Simulator Screen Shot - iPad Pro (12 9-inch) (2nd generation) - 2019-04-26 at 16 19 46

3 characters across grid and tweak relative grid sizing

for the super large layout, we should have 3 characters across the top.
Also, let's be honest, they are the most visually exciting thing on the app -- we could make that column take up more screen real-estate in general (50% ? 40%?)
The tasks to be worked on can be the same size, but make the "completed"/launch column narrower.

Some of the characters (Jack and Sourcerer especially) are too big for the space

If you tap on the Sourcerer or Jack to see the detailed view on the teams page, their heads are a bit big and get cut off on the screen. We probably want to make them a little smaller (the Refactorer doesn't have this issue).

the User Experience Researcher, Program Manager, Test Engineer, and Avante Garde Designer are also a little large, but the first two mentioned are the most problematic.

home about

HUAWEI Honor 8
about page bottom overflowed by 78pixels

Problem assigning developer to a task

Env: iPad Pro 10.5, the game is from App Store

Steps to reproduce:

  1. open new task or bug dialog
  2. scroll to the right to select a developer
  3. select developer (fast)

Current result: dialog is closed without developer selected
Expected result: the developer is selected

It's easy to reproduce in my env. Very annoying when I'm tried to play.

increase font size for TV [p1]

As mentioned before, we have a lot of whitespace on the TV screens. While the current text is certainly legible, we can benefit from making it more viewable across the room by increasing the font size (a fair bit I think).

Tasks

HUAWEI Honor 8
Tasks add tasks item overflowed 2.0 pixels

"fadeOverlay" on teams page prevents proper vertical scrolling behavior

There is this gradient widget:
https://github.com/2d-inc/dev_rpg/blob/master/lib/src/game_screen/character_pool_page.dart#L41
that gives a nice fade-effect at the bottom of the character list, but it doesn't respond to touch events, and so if you attempt to scroll up-down, it ends up trying to switch tabs. We need it to hand the touch events it receives back to the GridView so that it can scroll properly, even if the user touches on that faded area.

Minigame launch warning?

I just did some user testing on the app with Flutter team-members.
The launching of the minigame was a bit of a surprise for them. Perhaps we should introduce a quick little modal before the fullscreen that says "to launch [Alpha/Beta/1.0] you must first complete this minigame"?

I think we need three layouts :-( [p0]

The new version of the three column layout may work for the TV (? Might be weird there too), but I think the characters are too small for laptop, and we ARE going to have some laptops/tablets with this game. See picture.
IMG_1085

final screen not launching? [p0]

I played through the game (defeated the style sphinx) but I never saw the pop up come to say how well I did. After that I was unable to assign team members to new tasks or "launch" other "finished" tasks.

Completed tasks not visible

I suspect this is because it's going to desktop mode in the other column? This is the iPhone X simulator btw (homepage looked correct here, I wasn't getting the desktop/tablet mode).

Screen Recording 2019-04-26 at 5 16 35 PM

Perceivable jank in the team tab

I'm pretty sure the jank is there even in production, even on high end phones.

If it's not just me holding it wrong, I think this is a blocker, and we should do everything in our power to fix it.

AFAIK, this is mostly about the Flare widgets being shown for the first time. An initial idea, if that's the case, is to scatter the showing of the flare files. A more drastic measure is to use a bitmap instead, and only use Flare when we must.

But first, @efortuna — can you please try and run the app in --production on some real world device? I've tried the two (Android and iOS) devices available to me and I'm pretty sure I see jank on both.

Open Source Animations in Flare?

Hi!
Thank you very much for an amazing repo and showcase of both Flutter and Flare.

I am sorry if this is not the correct channel for this type of question, but I was not sure where to reach out to you.
I wanted to ask if you would open source the source Flare file for the animations used in this project? I was inspired by this project to start work on a similar game, and it would be very educational and interesting to see how these amazing animations were made.

Thanks again.

Notification bubble should highlight tasks when you have new tasks available

I think the notification bubble should appear when there's something new, and it should be cleared when you navigate to that tab. Right now it seems to always stay on the Team tab for me.

Right now, after you've hired someone, a task becomes available, but we don't highlight the tasks tab... so if you're a newcomer you don't know what to do next.

Note: the image below is a design comp, not the app.

Team Tab Hired

should the two "founders" be not-upgrade-able?

right now you can play through and just upgrade the two founders because they cover all the bases. I want us to force the player to hire some more folks to their team. Perhaps we should make these first two that you hire non-upgradeable? @filiph thoughts?

RenderFlex overflowed in Skills Required

flutter: ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
flutter: The following message was thrown during layout:
flutter: A RenderFlex overflowed by 21 pixels on the right.
flutter:
flutter: The overflowing RenderFlex has an orientation of Axis.horizontal.
flutter: The edge of the RenderFlex that is overflowing has been marked in the rendering with a yellow and
flutter: black striped pattern. This is usually caused by the contents being too big for the RenderFlex.
flutter: Consider applying a flex factor (e.g. using an Expanded widget) to force the children of the
flutter: RenderFlex to fit within the available space instead of being sized to their natural size.
flutter: This is considered an error condition because it indicates that there is content that cannot be
flutter: seen. If the content is legitimately bigger than the available space, consider clipping it with a
flutter: ClipRect widget before putting it in the flex, or using a scrollable container rather than a Flex,
flutter: like a ListView.
flutter: The specific RenderFlex in question is:
flutter: RenderFlex#2f6d7 relayoutBoundary=up11 OVERFLOWING
flutter: creator: Row ← Padding ← Column ← DecoratedBox ← Container ← ClipRRect ← ConstrainedBox ← Align ←
flutter: LayoutBuilder ← RpgLayoutBuilder ← TeamPickerModal ← DefaultTextStyle ← ⋯
flutter: parentData: offset=Offset(15.0, 0.0) (can use size)
flutter: constraints: BoxConstraints(w=370.0, 0.0<=h<=Infinity)
flutter: size: Size(370.0, 32.0)
flutter: direction: horizontal
flutter: mainAxisAlignment: start
flutter: mainAxisSize: max
flutter: crossAxisAlignment: center
flutter: textDirection: ltr
flutter: verticalDirection: down

image

save data

Why is there no storage function, I have no data to re-enter it?

Possible Flare bug in hit-test / sizing

Repro:

The easiest way to fix this is to remove the only Flare widget on that screen:

Now Flutter Driver should successfully tap the button. (It will fail just after that, probably because of the same issue.)

I assume this is somehow related to either hitTest or sizing. But I didn't have luck fixing it with things like bool hitTest(...) => false or changing the size.

Landscape / large screen layout needed

I know you know, I just wanted an issue to track this.

Here's the current design on the actual device, as a video walkthrough.
https://photos.app.goo.gl/C5kmmCE2RgFJZ8D77

Hopefully the problems you see above are the same you'll see on a table device. If not, do borrow the chromebox to be sure.

Things to fix:

  • Huge face on first screen
  • Buttons are too horizontal (plus relatively small vertical target size)
  • Too-big grid tiles in team page
  • Bottom tabs too small and far apart
  • Portraits on the team assignment screen are weirdly positioned and cut off (0:45)
  • Close buttons of modals are probably too small, relatively speaking

Note: There's still a little bit of jank on first "Start" (watch the ink splash freeze), but that's not the point of this issue. (If you want, we can track this elsewhere.)

Character modal overflows on smaller screen for characters with three skills

Two of the characters (Jack of all Trades and Sourcerer) intentionally have three different skills... which means that on smaller screens like the iPhone 8, the upgrade/hire button falls off the screen. I already tried to shorten the descriptions, but it's still a bit large. Perhaps we should shrink the padding between the skills slightly?

If we absolutely have to I can trim the descriptions further but they already feel pretty basic at this point.

Split AspectContainer out into separate package?

Hi. Would you please consider releasing AspectContainer as a separate package?

More info

Just watched the Google I/O Pragmatic State Management talk (really great by the way!) and came here to look through the code and learn more about using package:provider for state management. The talk mentioned that you can provide anything with package:provider. It's really interesting that instead of providing ChangeNotifier this app is providing AspectContainer.

My question is: do you think the community would benefit from having AspectContainer as a separate package?

I imagine 'heavily interdependent changing all the time game-simulation-like' state is needed in other apps. The released package could link to developer_quest as an example of how to use the package.

For anyone coming to this that wants to look into AspectContainer:

See usage here:
https://github.com/2d-inc/developer_quest/blob/master/lib/src/shared_state/game/world.dart#L14

@filiph 's pull request:
fcd5382#diff-39e5cc7bb8c3938d1bb45de6cd3a76af

What is it all about?

/// An aspect of the game world that can be listened to.
///
/// This is like a [ChangeNotifier], but it uses the concept of dirtiness.
///
/// This is a very game-centric approach, geared toward state that is heavily
/// interdependent (like in a game simulation) and that is changed all the time
/// (again, like in a game simulation). You probably do not need this
/// for a regular app. Use regular [ChangeNotifier], which is cleaner.

Sources here:

https://github.com/2d-inc/developer_quest/tree/master/lib/src/shared_state/game/src
https://github.com/2d-inc/developer_quest/blob/master/lib/src/shared_state/game/src/aspect_container.dart
https://github.com/2d-inc/developer_quest/blob/master/lib/src/shared_state/game/src/child_aspect.dart

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.