2214 Commits

Author SHA1 Message Date
Maximilian Fischer
6ff02dbc83
Include size factors when computing the intrinsic size of a RenderPositionedBox (#135823)
This PR includes the `widthFactor` and `heightFactor` when computing the intrinsic size of a `RenderPositionedBox`.

<details><summary>Code sample</summary>

Red should have a height of 100, blue one of 200.

```dart
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Intrinsic Bug',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: Scaffold(
        body: Row(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Expanded(
              child: IntrinsicHeight(
                child: Align(
                  heightFactor: 0.5,
                  child: Container(
                    height: 200,
                    color: Colors.red,
                  ),
                ),
              ),
            ),
            Expanded(
              child: Container(
                height: 200,
                color: Colors.blue,
              ),
            ),
          ],
        ),
      ),
    );
  }
}
```
</details>

Before:
![grafik](https://github.com/flutter/flutter/assets/45403027/447d8b9b-e7f3-482a-900d-53e436830321)
After:
![grafik](https://github.com/flutter/flutter/assets/45403027/6d1a104b-3327-47e2-8b36-798ed0136793)

Fix #135822
2023-10-11 17:39:56 +00:00
Kostia Sokolovskyi
5d9983a125
RenderAnnotatedRegion should dispose created layers. (#136086) 2023-10-10 08:32:01 -07:00
Greg Spencer
a5e3e78591
Update MediaQuery documentation to highlight asynchronous nature of size (#135719)
## Description

This updates the documentation for `MediaQuery` and `Overlay` to include the following:

- That `MediaQueryData.size` is set asynchronously, and doesn't necessarily reflect the size of the current frame.
- That the specific `MediaQuery.sizeOf` and related methods are preferred over the more generic `MediaQuery.of`.
- That the size of the `Overlay` isn't necessarily the size returned by `MediaQueryData.size`

As well as adding some symbol links, and fixing some error in documentation.

## Tests
 - Documentation only
2023-10-09 16:55:09 +00:00
LongCatIsLooong
ebe72d3f32
Call markNeedsPaint when adding overlayChild to Overlay (#135941)
Fixes https://github.com/flutter/flutter/issues/134656

`_skipMarkNeesLayout` was meant to only skip `markNeedsLayout` calls. Re-painting is still needed when a child gets added/removed from the `Overlay`.
2023-10-06 22:12:20 +00:00
Polina Cherkasova
f0970365ca
RenderEditable should dispose created layers. (#135942) 2023-10-06 12:30:20 -06:00
Kostia Sokolovskyi
a11b21dba8
ViewportOffset should dispatch creation in constructor. (#135420) 2023-09-29 14:08:39 -07:00
Kate Lovett
3509a1dfb7
Remove assertions on getOffsetToReveal (#135634) 2023-09-28 18:01:46 -05:00
Renzo Olivares
21ad7122a1
Implement SelectionArea single click/tap gestures (#132682)
This change collapses the selection at the clicked/tapped location on single click down for desktop platforms, and on single click/tap up for mobile platforms to match native.

This is a change from how `SelectionArea` previously worked. Before this change a single click down would clear the selection. From observing a native browser it looks like when tapping on static text the selection is not cleared but collapsed. A user can still attain the selection from static text using the `window.getSelection` API.

https://jsfiddle.net/juepasn3/11/ You can try this demo out here to observe this behavior yourself. When clicking on static text the selection will change.

This change also allows `Paragraph.selections` to return selections that are collapsed. This for testing purposes to confirm where the selection has been collapsed.

Partially fixes: #129583
2023-09-28 01:42:16 +00:00
Kate Lovett
80fb7bd206
Support ensureVisible/showOnScreen/showInViewport for 2D Scrolling (#135182) 2023-09-27 16:57:24 -05:00
Mateus Felipe C. C. Pinto
eae421e433
[documentation] remove repeated "For example," in RenderSliverEdgeInsetsPadding documentation (#135297)
There was a repeated "For example," in the documentation of `RenderSliverEdgeInsetsPadding`. This PR fix this.
2023-09-27 00:17:21 +00:00
hangyu
528a281a5c
Update alwaysNeedsCompositing in RenderParagraph (#135076)
fix #111370

According to 

5b47fef613/packages/flutter/lib/src/rendering/box.dart (L1259)
: A [RenderBox] that uses methods on [PaintingContext] that introduce
new
/// layers should override the [alwaysNeedsCompositing] getter and set
it to
/// true.

set [alwaysNeedsCompositing] to true when RenderParagraph introduces
LeaderLayer for selection handles.



## Pre-launch Checklist

- [ ] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [ ] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [ ] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [ ] I signed the [CLA].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#overview
[Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene
[test-exempt]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes
[Discord]: https://github.com/flutter/flutter/wiki/Chat
2023-09-21 14:53:22 -07:00
Greg Spencer
8cda3bea23
Remove 'must not be null' comments from various libraries. (#134984)
## Description

This removes all of the comments that are of the form "so-and-so (must not be null|can ?not be null|must be non-null)" from the cases where those values are defines as non-nullable values.

This PR removes them from the animation, cupertino, foundation, gestures, semantics, and services libraries.  Each of them only had a few, so I lumped them together.

This was done by hand, since it really didn't lend itself to scripting, so it needs to be more than just spot-checked, I think. I was careful to leave any comment that referred to parameters that were nullable, but I may have missed some.

In addition to being no longer relevant after null safety has been made the default, these comments were largely fragile, in that it was easy for them to get out of date, and not be accurate anymore anyhow.

This did create a number of constructor comments which basically say "Creates a [Foo].", but I don't really know how to avoid that in a large scale change, since there's not much you can really say in a lot of cases.  I think we might consider some leniency for constructors to the "Comment must be meaningful" style guidance (which we de facto have already, since there are a bunch of these).

## Related PRs
- https://github.com/flutter/flutter/pull/134991
- https://github.com/flutter/flutter/pull/134992
- https://github.com/flutter/flutter/pull/134993
- https://github.com/flutter/flutter/pull/134994

## Tests
 - Documentation only change.
2023-09-20 15:44:49 +00:00
Greg Spencer
fe9a2c5477
Remove 'must not be null' comments from painting and rendering libraries. (#134993)
## Description

This removes all of the comments that are of the form "so-and-so (must not be null|can ?not be null|must be non-null)" from the cases where those values are defines as non-nullable values.

This PR removes them from the painting and rendering libraries.

This was done by hand, since it really didn't lend itself to scripting, so it needs to be more than just spot-checked, I think. I was careful to leave any comment that referred to parameters that were nullable, but I may have missed some.

In addition to being no longer relevant after null safety has been made the default, these comments were largely fragile, in that it was easy for them to get out of date, and not be accurate anymore anyhow.

This did create a number of constructor comments which basically say "Creates a [Foo].", but I don't really know how to avoid that in a large scale change, since there's not much you can really say in a lot of cases.  I think we might consider some leniency for constructors to the "Comment must be meaningful" style guidance (which we de facto have already, since there are a bunch of these).

## Related PRs
- https://github.com/flutter/flutter/pull/134984
- https://github.com/flutter/flutter/pull/134991
- https://github.com/flutter/flutter/pull/134992
- https://github.com/flutter/flutter/pull/134994

## Tests
 - Documentation only change.
2023-09-20 01:37:22 +00:00
Polina Cherkasova
ab66f55728
Reland Resolve breaking change of adding a method to ChangeNotifier. (#134983) 2023-09-18 20:31:54 -07:00
Zachary Anderson
a9183f696c
Revert "Resolve breaking change of adding a method to ChangeNotifier." (#134978)
Reverts flutter/flutter#134953

Several failures on CI
2023-09-18 23:04:06 +00:00
Polina Cherkasova
5c6ef59b90
Resolve breaking change of adding a method to ChangeNotifier. (#134953) 2023-09-18 15:33:06 -07:00
Michael Goderbauer
da0f9a997a
Enable private field promotion for framework (#134473)
New feature in upcoming Dart 3.2. See https://github.com/dart-lang/language/issues/2020. Feature is enabled by bumping the min SDK version to 3.2.

Part of https://github.com/flutter/flutter/issues/134476.
2023-09-18 20:51:09 +00:00
LongCatIsLooong
dc8377b1d4
Ensure OverlayPortal.overlayChild's renderObject is reachable via treewalk (#134497)
Fixes https://github.com/flutter/flutter/issues/133545

` child._layoutSurrogate.markNeedsLayout();` was called when `_skipMarkNeedsLayout` is set true so when there's no relayout boundary between the layout surrogate and the RenderTheater, no dirty render objects will be added to the PipelineOwner's dirty list.

It's ok to mark the RenderTheater dirty when there's no layout boundary between it and the layout surrogate.
2023-09-12 22:41:45 +00:00
xubaolin
a9fac73361
[New feature] Allowing the ListView slivers to have different extents while still having scrolling performance (#131393)
Fixes https://github.com/flutter/flutter/issues/113431

Currently we only support specifying all slivers to have the same extent.
This patch introduces an `itemExtentBuilder` property for `ListView`, allowing the slivers to have different extents while still having scrolling performance, especially when the scroll position changes drastically(such as scrolling by the scrollbar or controller.jumpTo()).

@Piinks Hi, Any thoughts about this?  :)
2023-09-12 02:16:48 +00:00
Kostia Sokolovskyi
e7058f568f
Fix memory leak in RenderAnimatedSize (#133653)
`AnimationController` and `CurvedAnimation` objects were not disposed in `RenderAnimatedSize`.

### Description
- Fixes https://github.com/flutter/flutter/issues/133903;
- Adds the missing `dispose()` calls for `AnimationController` and `CurvedAnimation` in `RenderAnimatedSize`.

### Tests
- Updates `animated_size_test.dart` to test that `AnimationController` and `CurvedAnimation` are disposed after `RenderSize` disposal.
2023-09-11 20:46:04 +00:00
LongCatIsLooong
621ad9872c
Remove TextPainter migration flag from the framework (#134274)
The migration flag in `ParagraphBuilder` will be removed next.
2023-09-08 22:01:52 +00:00
LongCatIsLooong
804a7b285f
Make CupertinoTextField at least as tall as its first line of placeholder (#134198)
Fixes https://github.com/flutter/flutter/issues/133241
and some CupertinoTextField cleanup.
2023-09-08 16:52:57 +00:00
Greg Spencer
3ce6174e6b
Update links to iOS embedder docs to point to new Doxygen docs (#134246)
## Description

Now that we are using Doxygen for building docs for the embedders, this updates the links to point to the correct URLs.

## Related Issues
 - https://github.com/flutter/flutter/issues/124833

## Related PRs
 - https://github.com/flutter/engine/pull/45561
2023-09-08 16:42:50 +00:00
Polina Cherkasova
af1b7494d8
RenderParagraph should dispose instances of SelectableFragments. (#133915) 2023-09-05 13:40:14 -07:00
yaakovschectman
e6e44de33c
Add MacOS AppKitView class. (#132583)
Add derived classes from the Darwin platform view base classes for
MacOS. Functionality is largely the same as the `UiKitView`, but the two
are decoupled and and can further diverge in the future as needed. Some
unit tests remain skipped for now as the gesture recognizers for MacOS
are not yet implemented.

https://github.com/flutter/flutter/issues/128519

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [ ] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#overview
[Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene
[test-exempt]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes
[Discord]: https://github.com/flutter/flutter/wiki/Chat

---------

Co-authored-by: Chris Bracken <chris@bracken.jp>
2023-08-31 17:48:12 -04:00
Polina Cherkasova
343000b6e9
_SelectableFragment should dispatch creation in constructor. (#133351) 2023-08-25 17:03:47 -07:00
Michael Goderbauer
382ceb5707
Enable literal_only_boolean_expressions (#133186)
Blocking issue (https://github.com/dart-lang/linter/issues/453) for this lint has been resolved.
2023-08-23 21:35:54 +00:00
Kate Lovett
a5b06f15a0
Fix visual overflow for SliverMainAxisGroup (#132989)
Fixes https://github.com/flutter/flutter/issues/132788

The SliverGeometry was not set properly for SliverMainAxisGroup. Omitting hasVisualOverflow affected the Viewport's choice to apply a clip, leading to the sliver being rendered outside of the bounds of the viewport.
2023-08-22 01:46:23 +00:00
Ian Hickson
8864395034
Improvements to EditableText documentation (#132532) 2023-08-17 01:02:17 +00:00
Kate Lovett
9d9427923f
Fix extent for null returning builder in GridView (#132511)
Fixes https://github.com/flutter/flutter/issues/130685

This fixes an issue where a GridView/SliverGrid with a SliverChildBuilderDelegate would still reflect a max scroll extent of infinity after returning null from the builder. This change incorporates the same way we handle this case in SliverList:

6d87a23b37/packages/flutter/lib/src/rendering/sliver_list.dart (L305-L307)
2023-08-15 22:56:09 +00:00
LongCatIsLooong
881945ddb8
Read --dart-define in RendererBinding.initInstances() (#132408)
Move `SKPARAGRAPH_REMOVE_ROUNDING_HACK` reading to the framework from `dart:ui` so `flutter run --dart-define="SKPARAGRAPH_REMOVE_ROUNDING_HACK=false"` works
2023-08-12 01:56:22 +00:00
Renzo Olivares
457d00449d
Add double click and double click + drag gestures to SelectionArea (#124817)
Adds double click to select a word.
Adds double click + drag to select word by word.

https://user-images.githubusercontent.com/948037/234363577-941c36bc-ac42-4b7f-84aa-26b106c9ff05.mov

Partially fixes #104552
2023-08-11 21:08:39 +00:00
Ian Hickson
a2e2574941
Remove the fast reassemble / single widget reload feature (#132255)
Fixes https://github.com/flutter/flutter/issues/132157
2023-08-10 21:48:06 +00:00
Ian Hickson
4d42f1a852
GridView sample code (#131900) 2023-08-10 20:53:05 +00:00
Ian Hickson
f9a578dd82
An example of parentData usage. (#131818) 2023-08-10 19:40:06 +00:00
LongCatIsLooong
aac018974f
Use pattern matching to avoid strange type annotations (#131964)
Addresses https://github.com/flutter/flutter/pull/131640#discussion_r1284861384
2023-08-09 04:43:57 +00:00
chunhtai
b01cb301cf
Adds more documentations around ignoreSemantics deprecations. (#131287)
migration guide update https://github.com/flutter/website/pull/9124

fixes the concerns in https://github.com/flutter/flutter/pull/120619
2023-08-07 23:59:48 +00:00
Tomasz Gucio
bc4cacac0d
Take paint offset into account for inline children hit test in Editable (#131675) 2023-08-05 15:36:54 +02:00
Kate Lovett
a120342922
Fix flex methods for min and max column widths (#131724)
Fixes https://github.com/flutter/flutter/issues/131467

An error in the flex methods of min and max column width would produce different results based on the position of the widths that were provided:
`MaxColumnWidth(a, b) != MaxColumnWidth(b, a)`

This fixes that.
2023-08-02 17:00:48 +00:00
Qun Cheng
71d96ddf9c
Add Expanded/Collapsed State for Semantics (#131233) 2023-07-31 12:09:27 -07:00
Ian Hickson
48f08e3db2
IgnoreBaseline widget (#131220)
Fixes https://github.com/flutter/flutter/issues/7037
2023-07-27 05:59:17 +00:00
Michael Goderbauer
283437a2d2
Update link to unbounded constraints error (#131205)
Fixes https://github.com/flutter/flutter/issues/130805.
2023-07-24 18:23:49 +00:00
Tae Hyung Kim
8a37b8ba35
Optimize SliverMainAxisGroup/SliverCrossAxisGroup paint function (#129310)
This PR changes the paint functions for SliverMainAxisGroup and SliverCrossAxisGroup so that only visible slivers are painted.

Fixes https://github.com/flutter/flutter/issues/129214.
2023-07-24 18:19:03 +00:00
Michael Goderbauer
9a726e8542
Remove obsolete work around for shadow drawing (#131066)
Fixes https://github.com/flutter/flutter/issues/130737.
2023-07-21 22:59:01 +00:00
Ian Hickson
3a1300e0c4
Automatically create the layer when setting hints in PaintingContext (#130364)
Fixes https://github.com/flutter/flutter/issues/92722
2023-07-20 03:28:57 +00:00
Ian Hickson
07cdf37ca3
Add implementation advice to debugTypicalAncestorWidgetClass (#130530)
Fixes https://github.com/flutter/flutter/issues/56500
2023-07-19 22:47:43 +00:00
Greg Price
f003911967
Fix contradictory advice in "detach" docs; cut redundancy in "attach" (#130688)
Fixes #115525.

On [AbstractNode.detach] and its two progeny [RenderNode.detach]
and [Layer.detach], the docs said both to call the inherited method
before detaching children, and to end by doing so.  The former
advice is what's enforced by an assertion in the base implementation,
so cut out the other.

The corresponding [attach] methods redundantly said twice to
call the inherited method first, so cut the redundancy.
Leave in place the version more recently added (in #76021), because
that PR shows the old version must have been easy to overlook.
2023-07-19 16:36:08 +00:00
yaakovschectman
203ef6f7a3
Extract common functionality of iOS platformviews into superclasses (#128716)
Move most functionality of `UiKitView` and its supporting classes into
superclasses named `DarwinPlatformView`, etc., and create trivial or
near-trivial subclasses with the same names as the old classes.

I am currently awaiting approval for a macOS workstation that would
allow me to run the iOS/macOS tests and make sure all existing
functionality is preserved by this refactor. I can ensure that tests
will pass, but doing so may need to wait for a while.

Addresses [Add
AppKitView](https://github.com/flutter/flutter/issues/128519)

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [ ] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#overview
[Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene
[test-exempt]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes
[Discord]: https://github.com/flutter/flutter/wiki/Chat

---------

Co-authored-by: Loïc Sharma <737941+loic-sharma@users.noreply.github.com>
Co-authored-by: Michael Goderbauer <goderbauer@google.com>
Co-authored-by: Chris Bracken <chris@bracken.jp>
2023-07-18 10:06:52 -04:00
Ian Hickson
e12d31ad75
Document stack's clipping behaviour better (#130749)
Fixes https://github.com/flutter/flutter/issues/40216
2023-07-18 03:36:18 +00:00
Greg Price
1937ae6539
Make AbstractNode-derived docs more specific on RenderObject et al. (#130689)
These methods and/or their docs were recently copied (in #128467 and #128973) from their classes' former shared base class AbstractNode. Their wording was fittingly abstract there, but that abstraction is a bit puzzling for a reader finding them on these more concrete classes and not aware of the AbstractNode history.  So make them more concrete, in similar terms to the other methods around them.

Also copy some useful points between corresponding methods on different classes (like that the parent of the root is null), and try to clean up the prose on [RenderObject.depth].

We focus on the more outward-facing parts of the API, letting methods like `redepthChildren` continue to talk generically about "nodes".
2023-07-17 18:20:27 +00:00