2992 Commits

Author SHA1 Message Date
Ali Ghassemi
6befb6308a Updating Reference: FlutterBinding -> RendererBinding (#4602) 2016-06-16 16:12:58 -07:00
Hans Muller
6ba5674d12 AppBar size can be lost after a Navigator.pop() (#4594) 2016-06-16 15:33:23 -07:00
Ian Hickson
e9edf7a0af Update LayoutBuilder docs a bit (#4593) 2016-06-16 10:47:48 -07:00
Phil Quitslund
9fe7617184 Merge pull request #4588 from pq/1.18.0-dev.1.0_prep
Dead code, switch cleanup and `crypto` bump.
2016-06-16 10:01:34 -07:00
Ian Hickson
2dfdc840b1 Refactor everything to do with images (#4583)
Overview
========

This patch refactors images to achieve the following goals:

* it allows references to unresolved assets to be passed
  around (previously, almost every layer of the system had to know about
  whether an image came from an asset bundle or the network or
  elsewhere, and had to manually interact with the image cache).

* it allows decorations to use the same API for declaring images as the
  widget tree.

It requires some minor changes to call sites that use images, as
discussed below.

Widgets
-------

Change this:

```dart
      child: new AssetImage(
        name: 'my_asset.png',
        ...
      )
```

...to this:

```dart
      child: new Image(
        image: new AssetImage('my_asset.png'),
        ...
      )
```

Decorations
-----------

Change this:

```dart
      child: new DecoratedBox(
        decoration: new BoxDecoration(
          backgroundImage: new BackgroundImage(
            image: DefaultAssetBundle.of(context).loadImage('my_asset.png'),
            ...
          ),
          ...
        ),
        child: ...
      )
```

...to this:

```dart
      child: new DecoratedBox(
        decoration: new BoxDecoration(
          backgroundImage: new BackgroundImage(
            image: new AssetImage('my_asset.png'),
            ...
          ),
          ...
        ),
        child: ...
      )
```

DETAILED CHANGE LOG
===================

The following APIs have been replaced in this patch:

* The `AssetImage` and `NetworkImage` widgets have been split in two,
  with identically-named `ImageProvider` subclasses providing the
  image-loading logic, and a single `Image` widget providing all the
  widget tree logic.

* `ImageResource` is now `ImageStream`. Rather than configuring it with
  a `Future<ImageInfo>`, you complete it with an `ImageStreamCompleter`.

* `ImageCache.load` and `ImageCache.loadProvider` are replaced by
  `ImageCache.putIfAbsent`.

The following APIs have changed in this patch:

* `ImageCache` works in terms of arbitrary keys and caches
  `ImageStreamCompleter` objects using those keys. With the new model,
  you should never need to interact with the cache directly.

* `Decoration` can now be `const`. The state has moved to the
  `BoxPainter` class. Instead of a list of listeners, there's now just a
  single callback and a `dispose()` method on the painter. The callback
  is passed in to the `createBoxPainter()` method. When invoked, you
  should repaint the painter.

The following new APIs are introduced:

* `AssetBundle.loadStructuredData`.

* `SynchronousFuture`, a variant of `Future` that calls the `then`
  callback synchronously. This enables the asynchronous and
  synchronous (in-the-cache) code paths to look identical yet for the
  latter to avoid returning to the event loop mid-paint.

* `ExactAssetImage`, a variant of `AssetImage` that doesn't do anything clever.

* `ImageConfiguration`, a class that describes parameters that configure
  the `AssetImage` resolver.

The following APIs are entirely removed by this patch:

* `AssetBundle.loadImage` is gone. Use an `AssetImage` instead.

* `AssetVendor` is gone. `AssetImage` handles everything `AssetVendor`
  used to handle.

* `RawImageResource` and `AsyncImage` are gone.

The following code-level changes are performed:

* `Image`, which replaces `AsyncImage`, `NetworkImage`, `AssetImage`,
  and `RawResourceImage`, lives in `image.dart`.

* `DecoratedBox` and `Container` live in their own file now,
  `container.dart` (they reference `image.dart`).

DIRECTIONS FOR FUTURE RESEARCH
==============================

* The `ImageConfiguration` fields are mostly aspirational. Right now
  only `devicePixelRatio` and `bundle` are implemented. `locale` isn't
  even plumbed through, it will require work on the localisation logic.

* We should go through and make `BoxDecoration`, `AssetImage`, and
  `NetworkImage` objects `const` where possible.

* This patch makes supporting animated GIFs much easier.

* This patch makes it possible to create an abstract concept of an
  "Icon" that could be either an image or a font-based glyph (using
  `IconData` or similar). (see
  https://github.com/flutter/flutter/issues/4494)

RELATED ISSUES
==============

Fixes https://github.com/flutter/flutter/issues/4500
Fixes https://github.com/flutter/flutter/issues/4495
Obsoletes https://github.com/flutter/flutter/issues/4496
2016-06-16 09:49:48 -07:00
pq
3e9067a4ec Dead code and switch cleanup (continued).
Prep to get us ready to pull in a new dev SDK and bump our analyzer DEP.

* updates `crypto` (required by fresh analyzer)
* fixes newly flagged dead code warnings
* fixes switches that fall through and don't return
2016-06-16 09:45:37 -07:00
Hans Muller
5766cdacd3 Define LayoutWidgetBuilder in terms of BoxConstraints instead of Size (#4578) 2016-06-15 14:11:58 -07:00
Ali Ghassemi
fc2dbdeeb7 Remove unused consts in floating action button code (#4574) 2016-06-15 10:22:25 -07:00
Ali Ghassemi
e2299fdbc4 Remove unused consts in floating action button code.
FAB segue animation is done in scaffold and the consts are there.
2016-06-15 09:40:06 -07:00
Eric Seidel
3ee2f6f727 Fix the switch to match the Material Design spec.
Our track and head were slightly off in size.
These now exactly match the sizes in
https://material.google.com/components/selection-controls.html#selection-controls-switch
We took the liberty of assuming the head overlaps the edge
of the track by 2 pixels (instead of the head and the track ending at the same point)
which the provided designs were conflicted about.

Huge thanks to @DaveShuckerow for noticing this issue!

@abarth
2016-06-15 09:11:27 -07:00
pq
d3b4186744 Review nits. 2016-06-14 15:32:42 -07:00
pq
f5a4e63237 Added asserts. 2016-06-14 15:19:14 -07:00
pq
7a95548746 Add missing returns.
As of `1.18.0-dev-0`, these cases will get flagged.  In the meantime, the
2016-06-14 12:13:56 -07:00
Adam Barth
d8c52527cc Two minor improvements (#4554)
Add `@required` for some required parameters in `RRect`. Use elvis
operator to simplify a function.
2016-06-14 09:33:41 -07:00
Adam Barth
d2e3493a6c Add an example to MediaQuery docs. (#4532)
Fixes #4511
2016-06-13 11:36:52 -07:00
Adam Barth
053df166c4 AnimationController.fling should respect upper and lower bounds (#4533)
Instead of flinging to between 0.0 and 1.0, we should adapt the default
spring to the controller's upper and lower bounds.

Fixes #3545
2016-06-13 11:32:13 -07:00
Adam Barth
1a3adae101 Use @required for onPressed and onChanged (#4534)
We now use the `@required` annotation to encourage developers to
explicitly set onPressed and onChanged callbacks to null when that would
disable the widget.

Fixes #287
2016-06-12 13:25:06 -07:00
Adam Barth
0b6df634af Polish HostMessages (#4515)
Cleans up a few style nits in hello_services and adds support for automatic
JSON encoding and decoding to the HostMessages interface.
2016-06-10 15:04:01 -07:00
Jason Simmons
505b28245a Remove redundant license files (#4510) 2016-06-10 12:01:07 -07:00
Adam Barth
696f4710f1 Improve hitTestSelf and hitTestChildren docs (#4484)
Fixes #4427
2016-06-09 10:10:13 -07:00
Adam Barth
2be1eb480f DropDownMenu should animation away when interrupted (#4485)
If you tap outside the drop down menu while its animating in, we should
animate it away smoothly. Previously, we jumped to the reverseCurve,
which made the menu disappear immediately. Now we hold the animations as
state, which means we keep their _curveDirection property and don't
switch curves unless the animation actually finishes.

Also, fix a subtle bug in CurvedAnimation whereby we'd never set the
_curveDirection if we didn't see a status change in the parent
animation. Now we initialize _curveDirection based on the current value
of the parent's status.

Fixes #4379
2016-06-09 10:09:07 -07:00
Adam Barth
4e3e40a174 Rename relayoutSubtreeRoot -> relayoutBoundary (#4483)
Fixes #4425
2016-06-09 08:44:48 -07:00
Adam Barth
afe3158d5b Remove clients of getTotalMatrix (#4487)
Instead of using getTotalMatrix and setMatrix, we can just use
save/restore, which is more idiomatic.

The getTotalMatrix/setMatrix pattern was introduced to improve
performance, but the original code was calling getTotalMatrix/setMatrix
at every node in the sprite tree, which is much slower than the normal
save/transform/restore pattern.

Related to #4254
2016-06-09 08:44:38 -07:00
Adam Barth
e190327fdc HitTestResult.path should be unmodifiable (#4482)
Fixes #4428
2016-06-09 00:11:46 -07:00
Ian Hickson
f75fd5c389 Header for PaginatedDataTable (#4468)
Also renames ButtonTheme.footer to ButtonTheme.bar.
2016-06-08 17:29:26 -07:00
Ian Hickson
007d0a2f39 Cache intrinsic dimensions (#4446)
Also, make sure that the parent is notified when they change.

Fixes #2298
2016-06-07 22:07:12 -07:00
Todd Volkert
6c896dcc70 Remove TODO (#4448)
It's TODONE
2016-06-07 21:34:50 -07:00
Adam Barth
6e530ea862 Make pesto demo scroll fast (#4443)
We can viewport the content using a ScrollableGrid. Also, we can use the
padding mechanisms of the grid to avoid extra padding widgets.
2016-06-07 19:52:03 -07:00
Adam Barth
35ea6a1cef Improve gallery visuals on iOS (#4437)
1. Use the primary color brightness to determine the color of the status bar.
    The status bar overlaps the toolbar, which has the primary color.
 2. Use Roboto for text.
2016-06-07 16:32:14 -07:00
Adam Barth
7d9f8d903d Introduce TapDownDetails and TapUpDetails (#4431)
We have these details objects for the same reason we now have drag details
objects: future extensibility.
2016-06-07 16:16:53 -07:00
Adam Barth
cd23ca1242 Add more data to MediaQueryData.toString (#4426)
Fixes #4421
2016-06-07 16:16:47 -07:00
Ian Hickson
68f92d4f34 Provide UI to paginate PaginatedDataTable (#4382)
Also:
* Make PaginatedDataTable able to scroll itself horizontally.
* Make drop down buttons support having an explicit text style and icon
  size given.
* Fix a bug with drop-down buttons asserting when opened partly
  off-screen.
* Make sure to pop the drop-down button's route if the drop-down button
  is discarded while the route is up.
* Remove extraneous padding on drop-down buttons. (Couldn't figure out
  why it was there, and it breaks alignment when a drop-down is mixed
  with other text.)
* Some docs improvements.
* Add Route.isActive
* Add a setState() method to ModalRoutes.
2016-06-07 16:11:30 -07:00
Alhaad Gokhale
a880ced67d Fix adding child views to container after changes to dart bindings.
@abarth
2016-06-07 15:00:55 -07:00
Todd Volkert
7ac0ce7938 Add API for specifying the system overlay style. (#4422)
Fixes 3544
2016-06-07 14:39:15 -07:00
Adam Barth
69ce7f6984 runApp inside onPressed throws an exception (#4419)
We were trying to unregister the pointer route twice. Now we only unregister it
once.

Fixes #4341
2016-06-07 13:45:06 -07:00
Adam Barth
313c17faf8 Complete dartdoc for scrollable widgets (#4415) 2016-06-07 08:47:06 -07:00
Adam Barth
130f77177d Make Shrine scroll fast (#4408)
This fix isn't completely statisfying because it has a scaling limit. The ideal
fix would actually viewport the tiles in the grid. However, this fix is much
easier at the moment.

Fixes #4395
2016-06-06 20:23:40 -07:00
Matt Perry
5de581c6c8 Fix text selection painting to draw what the engine tells us. (#4397)
BUG=https://github.com/flutter/flutter/issues/4321
BUG=https://github.com/flutter/flutter/issues/4349
2016-06-06 18:29:54 -04:00
Adam Barth
48ed80b3be Simplify integration with Scrollable (#4394)
This patch exposes a convenience function on Scrollable that helps with
updating the scroll extents and ports several clients over to using it.
2016-06-06 14:51:31 -07:00
Adam Barth
b96d1dfc24 Tab labels incorrectly fade out (#4391)
Assigning to `size` called our intrinsic sizing functions re-entrantly, which
is a destructive operation on TextPainter. Ideally we'd made that a
non-destructive operation, but in the meantime we can fix the tab fading issue
by grabbing the text size before assigning to `size`.

Fixes #4365
2016-06-06 14:00:57 -07:00
Adam Barth
d9916bbb33 Complete the dartdoc for servics.dart (#4383)
Also, add more dartdoc to widgets.dart.
2016-06-05 23:58:38 -07:00
Adam Barth
daa0e7fa52 Fix DragUpdateDetails docs (#4350)
I changed the behavior late in the code review but didn't update this dartdoc.
2016-06-03 10:20:43 -07:00
Adam Barth
f2ea70d93e Add dartdoc to basic.dart (#4345)
This patch starts working through the missing dartdocs in widgets.dart.
2016-06-02 23:59:48 -07:00
Adam Barth
2d4acb8041 Convert drag gestures to use details objects (#4343)
Previously we supplied individual parameters to the various drag and pan
callbacks. However, that approach isn't extensible because each new
parameter is a breaking change to the API.

This patch makes a one-time breaking change to the API to provide a
"details" object that we can extend over time as we need to expose more
information. The first planned extension is adding enough information to
accurately produce an overscroll glow on Android.
2016-06-02 23:45:49 -07:00
Ian Hickson
5245d3889d Clean up the way RenderIntrinsicWidth works (#4340)
The old code had gotten crufty with all the refactors. This simplifies
it down to what it really means.

Also, add a bunch of tests.
2016-06-02 19:09:29 -07:00
Ian Hickson
d8283d1c62 RenderPadding's intrinsic should clamp child dims (#4329)
We used to rely on BoxConstraints.deflate's clamping, but now we have to
roll our own.
2016-06-02 17:29:28 -07:00
Hans Muller
309b9f8010 Version 0.0 of a gallery demo of the Material Design "Shrine" app (#4327) 2016-06-02 14:23:20 -07:00
Adam Barth
a464052191 Improve docs for paintImage (#4317)
We now describe what each parameter does.

Fixes #4256
2016-06-02 14:04:08 -07:00
Adam Barth
8ec26f02da Complete dartdocs for rendering.dart (#4316)
All of the public APIs in rendering.dart now have dartdocs.
2016-06-02 11:34:52 -07:00
Adam Barth
1ff7109b02 Mark State.setState as protected (#4295)
This required refactoring some cases where we weren't following the rules for
the protected annotation.
2016-06-02 10:46:12 -07:00