1. 17 Nov, 2015 1 commit
  2. 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
  3. 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
  4. 09 Oct, 2015 1 commit
  5. 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
  6. 01 Oct, 2015 1 commit
  7. 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
  8. 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
  9. 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
  10. 22 Aug, 2015 1 commit
  11. 04 Aug, 2015 1 commit
  12. 28 Jul, 2015 2 commits
  13. 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
  14. 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