1. 05 Dec, 2019 2 commits
    • Greg Spencer's avatar
      Fixes Focus and FocusScope's assignment of canRequestFocus. (#46168) · e3005e69
      Greg Spencer authored
      This fixes an issue where lines like this:
      
          focusNode.canRequestFocus = widget.canRequestFocus ?? focusNode.canRequestFocus;
      
      Were causing the canRequestFocus bit to copy the status of the enclosing scope, since canRequestFocus also looks to the enclosing scope to decide if it can focus.
      e3005e69
    • Greg Spencer's avatar
      Normalizes all of the "See also" blocks in comments. (#46121) · c6fe7bb9
      Greg Spencer authored
      This normalizes all of the "See also" blocks in comments so that they conform in style.
      
      They all look like this now:
      
        /// See also:
        ///
        ///  * [MyFavoriteWidget], because it's cool.
        class Foo {}
      
      I removed some useless "See also" blocks, and added commentary to ones that were just "bare" references.
      
      This is my penance for adding so many bullets that are "-" instead of "*". :-)
      c6fe7bb9
  2. 27 Nov, 2019 1 commit
    • Ian Hickson's avatar
      License update (#45373) · 449f4a66
      Ian Hickson authored
      * Update project.pbxproj files to say Flutter rather than Chromium
      
      Also, the templates now have an empty organization so that we don't cause people to give their apps a Flutter copyright.
      
      * Update the copyright notice checker to require a standard notice on all files
      
      * Update copyrights on Dart files. (This was a mechanical commit.)
      
      * Fix weird license headers on Dart files that deviate from our conventions; relicense Shrine.
      
      Some were already marked "The Flutter Authors", not clear why. Their
      dates have been normalized. Some were missing the blank line after the
      license. Some were randomly different in trivial ways for no apparent
      reason (e.g. missing the trailing period).
      
      * Clean up the copyrights in non-Dart files. (Manual edits.)
      
      Also, make sure templates don't have copyrights.
      
      * Fix some more ORGANIZATIONNAMEs
      449f4a66
  3. 22 Nov, 2019 1 commit
    • Alexandre Ardhuin's avatar
      make some BuildContext methods generics (#44189) · fcb40a05
      Alexandre Ardhuin authored
      * make BuildContext.{ancestorStateOfType,ancestorRenderObjectOfType,rootAncestorStateOfType} generic
      
      * make BuildContext.inheritFromWidgetOfExactType generic
      
      * make BuildContext.ancestorInheritedElementForWidgetOfExactType generic
      
      * make BuildContext.ancestorWidgetOfExactType generic
      
      * fix snippet
      
      * bump scoped_model on temp version
      
      * update names
      
      * Revert "bump scoped_model on temp version"
      
      This reverts commit d1fcbba028cdb07f44738d1652391692d1ea5ec0.
      
      * address review comments
      
      * fix ci
      
      * address review comments
      
      * repeat the deprecation notice
      
      * fix uppercase
      
      * use of recommanded deprecation syntax
      
      * address review comment
      fcb40a05
  4. 19 Nov, 2019 1 commit
    • Greg Spencer's avatar
      FocusableActionDetector widget (#44867) · 6e10719d
      Greg Spencer authored
      This adds a FocusableActionDetector, a widget which combines the functionality of Actions, Shortcuts, MouseRegion and a Focus widget to create a detector that defines actions and key bindings, and will notify that the focus or hover highlights should be shown or not. This widget can be used to give a control the required detection modes for focus and hover handling on desktop and web platforms.
      
      I replaced a bunch of similar code in many of our widgets with this widget, and found that pretty much any control that wants to be focusable wants all of these features as well: focus highlights, hover highlights, and actions to activate it.
      
      Also eliminated an extra _hasFocus variable in FocusState that wasn't being used.
      6e10719d
  5. 18 Oct, 2019 1 commit
    • Greg Spencer's avatar
      Wire up canRequestFocus and skipTraversal in FocusScopeNode (#43013) · 560873af
      Greg Spencer authored
      This adds a canRequestFocus and skipTraversal argument to FocusScope and FocusScopeNode, so that a scope can prevent being traversed.
      
      This allows a fix for a problem in the gallery where the focus while traversing the list of items would sometimes appear to disappear, since it would be focusing things that were in the backdrop that were part of the tree, but were not visible.
      
      Related Issues
      Fixes #42955
      560873af
  6. 15 Oct, 2019 1 commit
    • Greg Spencer's avatar
      Optimize focus operations by caching descendants and ancestors. (#42683) · 134ac429
      Greg Spencer authored
      This optimizes certain paths in the FocusManager, FocusNode, and FocusScopeNode classes in order to fix a regression in stock_animation_open_first_frame_average when I added more focus nodes to the tree to do focus traversal.
      
      Mainly I removed some remaining sync* iterators, and also started caching the computation of descendants and ancestors, since those are iterated over fairly often.
      
      This improves stock_animation_open_first_frame_average by about 2.8% overall (so about half of a 4.9% regression, both averaged over 10 runs).
      
      Addresses #42564
      134ac429
  7. 10 Oct, 2019 1 commit
    • Greg Spencer's avatar
      Re-land keyboard traversal PRs (#42278) · ce150971
      Greg Spencer authored
      This attempts to reland #40186 and #41220, that were reverted in #41945.
      
      The main modifications from the original PRs are that I predefine the shortcuts and actions maps instead of defining them inline in the build function, and I use a new mapEquals to do a deep comparison so that we don't rebuild modified things if the contents of the map haven't changed.
      
      I also eliminated an operator== and hashCode that were defined on the Actions widget, since widgets shouldn't have those. (it's too bad though: I get an 85% speedup if we leave this in! Too bad it prevents rebuilding of the children...)
      
      Fixes #40101
      ce150971
  8. 09 Oct, 2019 1 commit
    • Greg Spencer's avatar
      Enables setting of semantics focused and focusable attributes within Focus widgets. (#41814) · 89d6c8d9
      Greg Spencer authored
      This adds a Semantics node to the Focus and FocusScope widgets, setting the focused and focusable attributes so that the accessibility subsystem can be told when a control has the input focus.
      
      Includes an engine roll to flutter/engine@77252d2, and the following 8 engine changes:
      
      flutter/engine@77252d2 Greg Spencer Add missing focusable testing info (flutter/engine#13013)
      flutter/engine@0e42a29 skia-flutter-.. Roll src/third_party/skia 54548626a977..e27a503a0a21 (1 commits) (flutter/engine#13024)
      flutter/engine@6b56ed7 gaaclarke Refactor: FlutterDartProject (flutter/engine#13006)
      flutter/engine@393480c skia-flutter-.. Roll src/third_party/skia 77dde599c98a..54548626a977 (1 commits) (flutter/engine#13023)
      flutter/engine@080b89d skia-flutter-.. Roll src/third_party/skia 2b1a25a4d324..77dde599c98a (1 commits) (flutter/engine#13021)
      flutter/engine@90b0f30 Ben Konyi Roll src/third_party/dart f4a72bfc64..bb04f145b2 (18 commits) (flutter/engine#13020)
      flutter/engine@049fb89 skia-flutter-.. Roll fuchsia/sdk/core/linux-amd64 from q_uYX... to cknsi... (flutter/engine#13019)
      flutter/engine@6925b2a skia-flutter-.. Roll fuchsia/sdk/core/mac-amd64 from wuAtw... to u0JpE... (flutter/engine#13018)
      
      Related Issues
      Addresses #40101
      
      Landing on red in order to fix the build: it's red because of the needed engine roll.
      89d6c8d9
  9. 04 Oct, 2019 1 commit
  10. 02 Oct, 2019 1 commit
    • Greg Spencer's avatar
      Add an ActivateAction to controls that use InkWell. (#41220) · 4512a1c1
      Greg Spencer authored
      Adds an ActivateAction to controls that use InkWell. Make InkWell host the Focus for those controls, and add the top level binding to the ENTER key. This will make it possible to trigger a button using the enter key, and to get an ink response when the button is triggered.
      
      This is a breaking change because it moves the Focus widget into the InkWell. If you have a component that uses the InkWell directly and you used to wrap that InkWell in a Focus widget to give it its notion of focus, it will now not look for that Focus ancestor for its focus state anymore. In order to control focus on the InkWell, you need to give it a FocusNode directly, via the new focusNode parameter. This should not affect users of widgets like OutlineButton or FloatingActionButton and the like, since those have been modified in this PR.
      4512a1c1
  11. 26 Sep, 2019 1 commit
    • Greg Spencer's avatar
      Added proper focus handling when pushing and popping routes (#40166) · 1a7bb1f5
      Greg Spencer authored
      The proposed change will change focus handling when pushing and popping routes so that the FocusScopeNode for the route receives focus when pushed, and that the FocusScopeNode in the navigator receives focus when the route is popped.
      
      This means that the last setFirstFocus call on the scope is used to determine which control actually receives focus. When the focus scope receives focus, it traverses its children, trying to find a non-scope node that is the "first focus" of itself or a child node.
      
      This is a breaking change, because the focus behavior has changed. If you push a route after this change, and had a 'first focus' set on a widget via FocusScopeNode.setFirstFocus, it won't currently receive focus immediately, but after this change it will. Similarly, if you pop a route after this change, the focus will go back to where it was before the route was pushed, which is correct, but different from what happens now.
      1a7bb1f5
  12. 10 Sep, 2019 1 commit
  13. 16 Aug, 2019 1 commit
    • Greg Spencer's avatar
      Adds canRequestFocus toggle to FocusNode (#38704) · d6938c56
      Greg Spencer authored
      * Add an 'unfocusable' focus node to allow developers to indicate when they don't want a Focus widget to be active
      
      * more unfocusable changes. not working.
      
      * Switch to focusable attribute
      
      * Rename to canRequestFocus
      
      * Turn off debug output
      
      * Update docs
      
      * Removed unused import
      d6938c56
  14. 15 Aug, 2019 1 commit
  15. 16 May, 2019 1 commit
    • Greg Spencer's avatar
      Fix Focus.of to not find FocusScope nodes. (#32826) · 3c16cf6a
      Greg Spencer authored
      Until this change, Focus.of would return a FocusScopeNode if it found a FocusScope widget. This isn't really all that useful, and can easily lead to bad situations where many widgets think that the scope they are in (or the root scope!) is their indication of being focused.
      
      This changes Focus.of to throw an exception if it doesn't find a Focus widget before reaching the nearest FocusScope widget, or the root of the widget hierarchy.
      
      It also adds a nullOk optional bool to Focus.of so that if a caller expects to not find a Focus widget, it can deal with that as it sees fit. I modified InkWell to use this new behavior.
      
      This fixes an unreported issue that widgets using an InkWell will be drawn as focused the first time they are visited.
      3c16cf6a
  16. 15 May, 2019 1 commit
    • Greg Spencer's avatar
      Implements focus handling and hover for Material buttons. (#31438) · bb3c6605
      Greg Spencer authored
      This implements focus and hover handling for Material buttons. It inserts Focus widgets into the tree in order to allow buttons to be focusable via keyboard traversal (a.k.a. TAB traversal), and Listener widgets into the InkWell to allow the detection of hover states for widgets.
      
      Addresses #11344, #1608, and #13264.
      bb3c6605
  17. 10 May, 2019 1 commit
  18. 25 Apr, 2019 1 commit
    • Greg Spencer's avatar
      [Re-Land] Implement focus traversal for desktop platforms. (#31614) · 7775c237
      Greg Spencer authored
      This re-lands the Focus changes in #30040. Correctness changes in routes.dart, and removes the automatic requesting of focus on reparent when there is no current focus, which caused undesirable selections.
      
      Addresses #11344, #1608, #13264, and #1678
      Fixes #30084
      Fixes #26704
      7775c237
  19. 23 Apr, 2019 1 commit
  20. 22 Apr, 2019 1 commit
    • Greg Spencer's avatar
      Implement focus traversal for desktop platforms, shoehorn edition. (#30040) · 4218c0bc
      Greg Spencer authored
      Implements focus traversal for desktop platforms, including re-implementing the existing focus manager and focus tree.
      
      This implements a Focus widget that can be put into a widget tree to allow input focus to be given to a particular part of a widget tree.
      
      It incorporates with the existing FocusScope and FocusNode infrastructure, and has minimal breakage to the API, although FocusScope.reparentIfNeeded is removed, replaced by a call to FocusAttachment.reparent(), so this is a breaking change:
      
      FocusScopeNodes must now be attached to the focus tree using FocusScopeNode.attach, which takes a context and an optional onKey callback, and returns a FocusAttachment that should be kept by the widget that hosts the FocusScopeNode. This is necessary because of the need to make sure that the focus tree reflects the widget hierarchy.
      
      Callers that used to call FocusScope(context).reparentIfNeeded in their build method will call reparent  on a FocusAttachment instead, which they will obtain by calling FocusScopeNode.attach in their initState method. Widgets that own FocusNodes will need to call dispose on the focus node in their dispose method.
      
      Addresses #11344, #1608, #13264, and #1678
      Fixes #30084
      Fixes #26704
      4218c0bc
  21. 08 Mar, 2019 1 commit
    • Greg Spencer's avatar
      Add/rewrite tests for FocusScope. (#28169) · 89512e46
      Greg Spencer authored
      In anticipation of changing a lot of the focus code, I'm adding some tests for the FocusScope.
      
      As a result, I was able to find and fix a bug where there was an incorrect assert.
      
      I also added some more documentation.
      
      Several of the tests enforce what I think is incorrect behavior related to passing focus off when the widget tree gets rebuilt without focus nodes that were previously there, but I'm not going to change that behavior in this PR.
      
      I also renamed focus_test.dart to focus_scope_test.dart to be more in line with our naming conventions.
      89512e46
  22. 05 Feb, 2019 1 commit
  23. 12 Sep, 2018 1 commit
  24. 16 Jul, 2018 1 commit
  25. 05 Jun, 2018 1 commit
  26. 03 May, 2018 1 commit
  27. 21 Dec, 2017 1 commit
  28. 04 Dec, 2017 1 commit
    • krisgiesing's avatar
      Separate focus management by build owner (#13334) · 898646f0
      krisgiesing authored
      Separate focus management by build owner
      
      Currently the focus manager is held by the singleton WidgetBinding.
      This change places a focus manager in each build owner object,
      which allows clients to run offscreen pipelines without disturbing
      focus management for the main UI.
      898646f0
  29. 18 Oct, 2017 1 commit
    • Michael Goderbauer's avatar
      Redesign Semantic Tree Compilation Algorithm (#12605) · f8a2bd20
      Michael Goderbauer authored
      * Oct 12 10:12am
      
      * implicit_semantics_test.dart passes
      
      * refactoring
      
      * works in nice
      
      * minor rename
      
      * more doc comments
      
      * to be explicit check better
      
      * fix test
      
      * ++
      
      * ++
      
      * semantics_9_test (BlockSemantics) and implicit_semantics_test are passing
      
      * doc updates
      
      * tiny refactor
      
      * fix static errors in tests
      
      * fix gesture detector
      
      * ++
      
      * ++
      
      * geometry
      
      * ++
      
      * remove noGeometry
      
      * revert test
      
      * +
      
      * all tests but scrolling/clipping pass
      
      * clipping works
      
      * scrolling halfway
      
      * sliver tests pass
      
      * ALL TESTS PASS
      
      * SemanticsNode changed
      
      * docs and tiny fixes
      
      * card test
      
      * more doc comments
      
      * remove missed print
      
      * more tests
      
      * make test pass on Linux
      
      * remove changes to intellij proj file
      
      * review comments
      f8a2bd20
  30. 23 Apr, 2017 1 commit
  31. 11 Apr, 2017 1 commit
    • xster's avatar
      Rename State.config to widget everywhere (#9273) · 89a7fdfc
      xster authored
      Rename State.config to State.widget
      Rename State.didUpdateConfig to State.didUpdateWidget
      Renamed all State subclasses' local variables named config to something else
      89a7fdfc
  32. 05 Apr, 2017 1 commit
  33. 31 Mar, 2017 1 commit
    • Adam Barth's avatar
      Improve focus management (#9074) · 89aaaa9c
      Adam Barth authored
      We now have an explicit focus tree that we manage. Instead of using
      GlobalKeys to manage focus, we use FocusNode and FocusScopeNode objects.
      The FocusNode is Listenable and notifies when its focus state changes.
      
      Focus notifications trigger by tree mutations are now delayed by one
      frame, which is necessary to handle certain complex tree mutations. In
      the common case of focus changes being triggered by user input, the
      focus notificiation still arives in the same frame.
      89aaaa9c