1. 28 Jul, 2016 2 commits
  2. 21 Jun, 2016 1 commit
    • Adam Barth's avatar
      Nesting MaterialApps should not assert (#4636) · e071f0ba
      Adam Barth authored
      Turns out we weren't managing focus correct between navigator routes because we
      were missing a Focus widget above the routes. However, adding this widget
      caused us to explode at startup because the initial route was trying to move
      focus during the build phase.
      
      This patch teaches Focus to have an initiallyFocusedScope, which can be use to
      initialize the child focus scope.
      
      Fixes #4065
      e071f0ba
  3. 06 Jun, 2016 1 commit
  4. 20 May, 2016 1 commit
  5. 25 Mar, 2016 1 commit
    • Adam Barth's avatar
      Add a default MediaQuery value · 3c6d4f66
      Adam Barth authored
      Now MediaQuery.of always returns a non-null value. By default, you get the
      values associated with the current ui.Window.
      
      Fixes #2894
      3c6d4f66
  6. 18 Mar, 2016 1 commit
  7. 14 Mar, 2016 1 commit
  8. 12 Mar, 2016 2 commits
  9. 05 Feb, 2016 1 commit
  10. 27 Jan, 2016 2 commits
  11. 22 Jan, 2016 2 commits
  12. 21 Jan, 2016 1 commit
  13. 07 Jan, 2016 1 commit
  14. 28 Dec, 2015 1 commit
    • Ian Hickson's avatar
      Various Input and Focus fixes · b1dae4c4
      Ian Hickson authored
      Require a Key on Input.
      
      Simplify the API for Focus.at() and Focus.moveTo().
      Fixes #236.
      This will require an e-mail to flutter-dev.
      
      Make Input grab focus onTap not onPointerDown.
      Fixes #189.
      
      Complain when you use Focus.at() with two different GlobalKeys that
      are both in the tree at the same time.
      Fixes #181.
      
      Add dartdocs for Focus.moveTo() and Focus.moveScopeTo().
      b1dae4c4
  15. 09 Dec, 2015 1 commit
    • Adam Barth's avatar
      Cleanup the global scope a bit: · 13f9e91f
      Adam Barth authored
      - Remove unused FocusChanged typedef.
      - Remove unused centerOfAttentionHeroTag.
      - Modernize static functions for interacting with Scrollable by moving them
        into the Scrollable class.
      13f9e91f
  16. 18 Nov, 2015 1 commit
    • Hixie's avatar
      Pave the Foo.of() cowpath. · 65d81451
      Hixie authored
      I'm planning on adding more .of() functions and so to avoid further
      copypasta I'm providing some general utility functions here.
      65d81451
  17. 17 Nov, 2015 1 commit
  18. 27 Oct, 2015 1 commit
    • Ian Hickson's avatar
      Track scroll position · 8a900f90
      Ian Hickson authored
      - Change RouteArguments to pass the route's BuildContext rather than
        the Navigator. This caused the bulk of the examples/ and .../test/
        changes (those are mostly mechanical changes). It also meant I could
        simplify Navigator.of().
      
      - Make initState() actually get called when the State's Element is in
        the tree, so you can use Foo.of() functions there. Added a test for
        this also.
      
      - Provide a RouteWidget so that routes have a position in the Widget
        tree. The bulk of the route logic is still in a longer-lived Route
        object for now.
      
      - Make Route.setState() only rebuild the actual route, not the whole
        navigator.
      
      - Provided a Route.of().
      
      - Provided a Route.writeState / Route.readState API that tries to
        identify the clients by their runtimeType, their key, and their
        ancestors keys, up to the nearest ancestor with a GlobalKey.
      
      - Made scrollables hook into this API to track state. Added a test to
        make sure this works.
      
      - Fix the debug output of GestureDetector and the hashCode of
        MixedViewport.
      
      - Fixed ScrollableWidgetListState<T> to handle infinite lists.
      8a900f90
  19. 18 Oct, 2015 1 commit
    • Hixie's avatar
      toString()ify more stuff · 7c0c1c96
      Hixie authored
      - truncate pixel values to 1dp since there's really no point being told
        the Size is 302.98732587287 by 648.28498579187.
      
      - describe more Widgets so that debugDumpApp() is more useful.
      
      - remove bufferValue from ProgressIndicator (cc @hansmuller) since it's
        not yet implemented.
      
      - half-hearted toString() for ThemeData. There's no point making a
        complete one, since it would cause line-wrap even on big monitors in
        debugDumpApp dumps, and you can easily get the actual values from a
        debugging if that's the issue.
      
      - flesh out BoxConstraints.toString() so that fully unconstrained and
        fully infinite constraints are called out explicitly. I experimented
        with adding even more special cases, e.g. calling out unconstrained
        widths with fixed heights, etc, but it made the output less readable.
      
      - remove a redundant _updateVariable() in AnimatedContainer (cc
        @abarth).
      
      - add more information to RenderView.toString().
      7c0c1c96
  20. 09 Oct, 2015 1 commit
  21. 05 Oct, 2015 1 commit
    • Hixie's avatar
      Fix Focus · fbf8174c
      Hixie authored
      Focus.at() and company should be on Focus, not FocusState.
      
      _notifyDescendants() was using the wrong runtimeType.
      
      Let InheritedWidget update the descendants during build.
      
      When you setState() during build, assert that you're not
      markNeedsBuild()ing someone who isn't a descendant.
      
      Typo in Widget.toString().
      fbf8174c
  22. 01 Oct, 2015 1 commit
  23. 17 Sep, 2015 1 commit
    • Hixie's avatar
      Improve debugging aids for widgets, rendering. · 970c8ce8
      Hixie authored
      We need a short name more often than a tree dump, so toString() should
      be the short name.
      
      Make debugDumpRenderTree() a global like debugDumpApp(), for
      consistency. It's hard to remember the
      SkyBinding.instance.dumpRenderTree() incantation.
      
      Fixes #1179.
      970c8ce8
  24. 02 Sep, 2015 1 commit
    • Adam Barth's avatar
      Move widgets and rendering inside src · 693ddcd8
      Adam Barth authored
      Code outside of package:sky should import this code using
      
      package:sky/rendering.dart
      package:sky/widgets.dart
      
      Moving this code into the "src" directory is a convention that signifies that
      and it cleans up the generated dartdoc because the libraries in the src
      directory aren't included in the generated documentation. Instead, the classes
      are documented in the widgets.dart and rendering.dart libraries.
      693ddcd8
  25. 24 Aug, 2015 1 commit
    • Adam Barth's avatar
      Add GlobalKey.registerSyncListener · 16328cc8
      Adam Barth authored
      This lets clients listen for when a widget with a given global key goes through
      a sync operation. We'll need this for mimic to track its mimicable when it
      moves around the tree.
      16328cc8
  26. 22 Aug, 2015 1 commit
  27. 04 Aug, 2015 1 commit
  28. 28 Jul, 2015 2 commits
  29. 25 Jul, 2015 1 commit
    • Hixie's avatar
      Scoped focus, so you can have a dialog with input controls and not lose your... · 60177a71
      Hixie authored
      Scoped focus, so you can have a dialog with input controls and not lose your focus in the background.
      
      This introduces a GlobalKey registry so that you can tell when a key
      has gone away (so you can unfocus dead dialogs).
      
      Also I added an assert that you're not calling setState() during a
      build. It turns out that doing so means you have a bug, because since
      you're dirty already (you're building), you won't get rebuilt.
      
      The focus code itself is gnarly. It uses a Component and an internal
      Inherited TagNode to manage the focus state, and does crazy things
      like updating its state during build to pretend retroactively that it
      was built with some other state, once someone asks for focus the first
      time (i.e. the first time it's examined, so you can't tell that it was
      in a different state before). It does this so that it can autofocus
      controls which otherwise wouldn't be focused.
      
      This moves all the focus management into Navigator and showDialog(),
      so the complexity is all buried deep and not visible to apps,
      hopefully.
      
      To do something like two tabs that each have an Input widget that
      needs to be focused when you switch panes, you'd need to have two
      Focus objects, one in each tab, and you need to set their autofocus to
      true (maybe that should be the default?).
      60177a71
  30. 23 Jul, 2015 3 commits
    • Hixie's avatar
      Track global keys globally. · eb90899a
      Hixie authored
      Assert that there are no duplicates.
      Export GlobalKey from basic.dart, so that people don't have to import widgets.dart just for that.
      Fix the "initialFocus" feature which actually didn't work.
      eb90899a
    • Hixie's avatar
      Rename defaultFocus to initialFocus. · 3aa0437f
      Hixie authored
      3aa0437f
    • Eric Seidel's avatar
      Focus support. · 4da27671
      Eric Seidel authored
      This patch provides a class to manage focus, Focus, and a class to
      manage ownership of the keyboard, KeyboardHandle.
      
      Inherited (in widgets.dart) is adjusted to support subclasses that
      need to copy state from instance to instance.
      
      A GlobalKey key type is introduced that is basically the same as
      UniqueKey. Component classes that need a globally-unique key can
      specify that their 'key' constructor argument is a GlobalKey.
      
      Focus
      -----
      
      You can use `Focus.at(this)` to determine if you, a Component, are
      currently focused.
      
      You can use `Focus.moveTo(this)` to take the focus or give it to a
      particular component.
      
      For this to work, there has to be a Focus class in the widget
      hierarchy.
      
      Currently, there can only be one Focus class, because nested scopes
      aren't supported. We should add support for that in a future patch.
      See issue #229.
      
      KeyboardHandle
      --------------
      
      Instead of directly interacting with the keyboard service, you now ask
      for a KeyboardHandle using `_keyboard.show(client)`. This returns a
      KeyboardHandle class. On that class, you can call `handle.release()`
      when you want to hide the keyboard. If `handle.attached` is still
      true, and you need to reshow the keyboard after the user hid it, then
      you can can `handle.showByRequest()`.
      
      The point of this is that the `keyboard.show()` method maintains the
      invariant that only one KeyboardHandle is live at a time.
      
      There are some issues with the keyboard service that I filed as a
      result of doing this patch: #226 #227
      4da27671