63 Commits

Author SHA1 Message Date
Kate Lovett
9d96df2364
Modernize framework lints (#179089)
WIP

Commits separated as follows:
- Update lints in analysis_options files
- Run `dart fix --apply`
- Clean up leftover analysis issues 
- Run `dart format .` in the right places.

Local analysis and testing passes. Checking CI now.

Part of https://github.com/flutter/flutter/issues/178827
- Adoption of flutter_lints in examples/api coming in a separate change
(cc @loic-sharma)

## 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].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.

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

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#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/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2025-11-26 01:10:39 +00:00
emakar
77ac8dbbb0
don't break sheet's snap from physics (#171157)
Fixes https://github.com/flutter/flutter/issues/169712

## 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].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [ ] 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] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].
2025-10-21 23:41:14 +00:00
Kate Lovett
a04fb324be
Bump Dart to 3.8 and reformat (#171703)
Bumps the Dart version to 3.8 across the repo (excluding
engine/src/flutter/third_party) and applies formatting updates from Dart
3.8.

## 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].
- [x] 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 `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [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/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#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/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2025-07-07 17:58:32 +00:00
Chikamatsu Kazuya
cd0082f04f
Fix: DraggableScrollableSheet may not close if snapping is enabled (#165557)
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

fixes #140701

This PR fixes an issue where a DraggableScrollableSheet with `snap` set
to true and `shouldCloseOnMinExtent` set to true may not close when
dragged downward.

The issue was caused by round-off errors accumulated by `addPixelDelta`
method, which could lead to `extent.currentSize` not matching the
`extent.minSize` exactly when the bottom is reached. I added logic to
correct it when the snapping ballistic animation is complete.

<details>
<summary>Sample code</summary>

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("DraggableScrollableSheet Test"),
      ),
      body: Center(
        child: ElevatedButton(
          child: Text("Open"),
          onPressed: () {
            showModalBottomSheet(
              context: context,
              showDragHandle: true,
              isScrollControlled: true,
              builder: (context) => _buildBottomSheet(),
            );
          },
        ),
      ),
    );
  }

  Widget _buildBottomSheet() {
    return NotificationListener<DraggableScrollableNotification>(
      onNotification: (notification) {
        print(notification.extent);
        return false;
      },
      child: DraggableScrollableSheet(
        expand: false,
        snap: true,
        shouldCloseOnMinExtent: true,
        maxChildSize: 0.9,
        minChildSize: 0.25,
        builder: (context, scrollController) {
          return ListView.builder(
            controller: scrollController,
            itemCount: 100,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text("Item $index"),
              );
            },
          );
        },
      ),
    );
  }
}
```

</details>

| Before applying fix | After |
| --- | --- |
| * Occurs with probability <video
src="https://github.com/user-attachments/assets/ffd2d097-3ed5-4775-90d5-950092d49591">
| <video
src="https://github.com/user-attachments/assets/0f20cb81-3444-40a3-a84d-ed4bff15887e">
|


## 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].
- [x] 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] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [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/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#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/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2025-04-08 04:23:34 +00:00
Michael Goderbauer
9cab4ffee1
Use wildcards (#161548)
https://dart.dev/language/pattern-types#wildcard
2025-01-14 05:13:41 +00:00
Michael Goderbauer
5491c8c146
Auto-format Framework (#160545)
This auto-formats all *.dart files in the repository outside of the
`engine` subdirectory and enforces that these files stay formatted with
a presubmit check.

**Reviewers:** Please carefully review all the commits except for the
one titled "formatted". The "formatted" commit was auto-generated by
running `dev/tools/format.sh -a -f`. The other commits were hand-crafted
to prepare the repo for the formatting change. I recommend reviewing the
commits one-by-one via the "Commits" tab and avoiding Github's "Files
changed" tab as it will likely slow down your browser because of the
size of this PR.

---------

Co-authored-by: Kate Lovett <katelovett@google.com>
Co-authored-by: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com>
2024-12-19 20:06:21 +00:00
Aparin Kirill
7a57b69fcf
fix: ensure draggable_scrollable_sheet respects shouldCloseOnMinExten… (#156338)
This PR fixes the `shouldCloseOnMinExtent` flag in `draggable_scrollable_sheet.dart`.

*The `shouldCloseOnMinExtent` flag was not functioning correctly in the `DraggableScrollableSheet` widget. This PR ensures that the flag is properly handled, preventing the sheet from closing when it reaches the minimum extent if the flag is set to false. Before/after screenshots are not applicable for this change.*

In the code sample below, before my fix, the sheet would close when scrolled down. After my fix, it behaves as expected by respecting the `shouldCloseOnMinExtent` parameter.

### Code Sample
```dart

import 'package:flutter/material.dart';

Future<void> main() async {
  runApp(const MaterialApp(
    home: Home(),
  ));
}

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

  @override
  Widget build(BuildContext context) => Scaffold(
        body: Center(
          child: FilledButton(
            onPressed: () async => showModalBottomSheet(
              context: context,
              isScrollControlled: true,
              isDismissible: false,
              builder: (context) => DraggableScrollableSheet(
                expand: false,
                maxChildSize: 0.9,
                minChildSize: 0.25,
                initialChildSize: 0.5,
                shouldCloseOnMinExtent: false,
                builder: (context, scrollController) => Navigator(
                  onGenerateRoute: (settings) => MaterialPageRoute(
                    settings: settings,
                    builder: (context) => ListView.builder(
                      controller: scrollController,
                      itemExtent: 100,
                      itemCount: 100,
                      itemBuilder: (context, index) => Center(
                        child: Text('$index'),
                      ),
                    ),
                  ),
                ),
              ),
            ),
            child: const Text('Open sheet'),
          ),
        ),
      );
}
```
2024-11-06 00:55:06 +00:00
FMorschel
c40f418c05
Removing unnecessary parenthesis (#156928)
This is simply removing unnecessary parenthesis from various places. This change is because of a change to the unnecessary_parentesis lint that will trigger there. Here is the CL https://dart-review.googlesource.com/c/sdk/+/390161.

- https://github.com/dart-lang/linter/issues/4996

If anything else is needed please let me know. 

I'd like to ask for this PR to wait a bit until the bots are run again on that CL so that I can be sure nothing else will trigger, I will come back here and update this whenever everything is complete. Thanks!
2024-10-17 23:46:25 +00:00
Kostia Sokolovskyi
47bfa827ba
Memory leaks clean up 1 (#145691) 2024-03-25 10:36:42 -07:00
Michael Goderbauer
cc544169be
Make pumpWidget's arguments named (#141728)
Much nicer calling API and simplifies evolving this API in the future.

I wish we could write a dart fix for this, but that's blocked on https://github.com/dart-lang/sdk/issues/54668.
2024-01-19 18:29:07 +00:00
Polina Cherkasova
baf739c8e6
Remove usage of testWidgetsWithLeakTracking. (#140239) 2023-12-15 14:13:31 -08:00
Kostia Sokolovskyi
fdde24195f
DraggableScrollableController should dispatch creation in constructor. (#135423) 2023-09-29 17:45:35 -07:00
Kostia Sokolovskyi
5d5da38810
Fix memory leak in _DraggableScrollableSheetState (#134212) 2023-09-08 15:06:26 -07:00
Daniel Iglesia
a6d62ca8de
Support keeping a bottom sheet with a DraggableScrollableSheet from closing on drag/fling to min extent (#127339) 2023-05-22 16:14:35 -07:00
Dan Field
e1e8ad8038
Fix crasher in DragableScrollableSheet when controller is animating and switching widgets (#125721)
We were failing to dispose of animation controllers created by `animateTo` when `didUpdateWidget` happens and we null out the `_attachedController`. This would cause the listener added here to fail on a null assertion:

fef41cfce0/packages/flutter/lib/src/widgets/draggable_scrollable_sheet.dart (L135)

Without the code change, the test ends up throwing exceptions related to that line. I don't have a great way to verify what this does visually though, hoping for help on that from internal customer.

b/279930163

See cl/527868355 as well.

Fixes https://github.com/flutter/flutter/issues/125709
2023-04-29 05:38:08 +00:00
xubaolin
328635b3df
DraggableScrollableSheet & NestedScrollView should respect NeverScrollableScrollPhysics (#123109)
DraggableScrollableSheet & NestedScrollView  should respect NeverScrollableScrollPhysics
2023-04-12 00:01:11 +00:00
Michael Goderbauer
81bc54be75
Enable use_colored_box lint (#117370) 2022-12-20 14:09:55 -08:00
xubaolin
8469896c5a
Fix DDS do not support Curves.easeInOutBack curve (#114222) 2022-10-28 17:24:58 +00:00
xubaolin
5c522996be
fix some DSS bugs (#112142) 2022-09-29 05:04:19 +00:00
Callum Moffat
4c5817c5f4
Reland "Fix DraggableScrollableSheet rebuilding during drag" (#112479) 2022-09-28 19:32:20 +00:00
Casey Hillers
8384f1ea65
Revert DraggableScrollableSheet controller changes (#112293) 2022-09-23 20:31:04 +00:00
Callum Moffat
70b19ff987
Add macOS-specific scroll physics (#108298) 2022-09-19 20:08:03 +00:00
Callum Moffat
0322b57796
Fix changing DraggableScrollableSheet controller (#111445) 2022-09-16 23:17:04 +00:00
Callum Moffat
7b5241b39b
Fix DraggableScrollableSheet rebuilding during drag (#111010) 2022-09-13 19:31:19 +00:00
Casey Rogers
72163a8919
Fixes issue with sheet reset on rebuild (#107876) 2022-07-25 15:03:09 +00:00
hangyu
b753476004
Add a snapAnimationDuration param in DraggableScrollableSheet (#107396)
* Add a snapAnimationDuration param in DraggableScrollableSheet

* snapAnimationDuration.inMilliseconds > 0

* Update draggable_scrollable_sheet.dart
2022-07-12 23:06:21 +08:00
Kate Lovett
90d6303ff5
Fix DraggableScrollableSheet crash when switching out scrollables (#105549) 2022-06-30 20:26:10 +00:00
xubaolin
6efdf0ae7b
fix a _DraggableScrollableSheetScrollPosition update bug (#103328) 2022-05-25 14:48:10 -07:00
Bruno Leroux
750ad32870
Fix DraggableScrollableSheet leaks Ticker (#102916) 2022-05-05 01:29:07 -07:00
Phil Quitslund
bca071815f
rename local functions with _s (#102615) 2022-04-27 09:14:57 -07:00
Alexandre Ardhuin
07f1c20474
add missing trailing commas in list/set/map literals (#102585) 2022-04-27 09:15:35 +02:00
Bruno Leroux
bc7d3bbc65
Fix DraggableScrollableController.animateTo leaks Ticker (#102504) 2022-04-26 02:24:05 -07:00
Mahesh Jamdade
c815aaed2f
adds isAttached getter to DraggableScrollableController (#100269) 2022-04-14 15:44:08 -07:00
Casey Rogers
f12c83ea3e
Fix animate to curve argument (#96627)
* copied over changes from

* copied over changes from
2022-01-18 13:11:25 -08:00
Casey Rogers
b4777c3505
Make DraggableScrollableController a ChangeNotifier (#96089) 2022-01-12 20:35:15 -08:00
Casey Rogers
a6702f6aa1
Allow Programmatic Control of Draggable Sheet (#92440) 2021-11-04 11:13:04 -07:00
Ian Hickson
61a0add286
Enable avoid_redundant_argument_values lint (#91409) (#91462) 2021-10-08 09:25:14 -07:00
Zachary Anderson
b9d2177da0
Revert "Enable avoid_redundant_argument_values lint (#91409)" (#91461)
This reverts commit 5fd259be244244e14ff87fee9b6a721625f952cd.
2021-10-07 21:11:07 -07:00
Ian Hickson
5fd259be24
Enable avoid_redundant_argument_values lint (#91409) 2021-10-07 20:13:02 -07:00
Casey Rogers
ec2e041e3d
Make DraggableScrollableSheet Reflect Parameter Updates (#90354) 2021-09-22 14:58:05 -07:00
Yegor
d672d20f69
fix draggable_scrollable_sheet_test.dart (#90204) 2021-09-16 13:51:33 -07:00
Casey Rogers
e7df5ec5d0
Add Snapping Behavior to DraggableScrollableSheet (#84394) 2021-09-15 15:30:35 -05:00
xubaolin
cec1457476
fix a DraggableScrollableSheet bug (#89335) 2021-09-08 17:17:06 -07:00
Casey Rogers
4ab29de67f
Cancel DraggableScrollableSheet ballistic animation if a new activity begins (#86614) 2021-07-20 16:05:33 -07:00
Alexandre Ardhuin
157bc92d4a
end of sort_child_properties_last (#82457) 2021-05-13 13:39:04 -07:00
Kate Lovett
e40610d67e
Automatically applying Scrollbars on desktop platforms with configurable ScrollBehaviors (#78588) 2021-04-02 16:40:17 -05:00
Sam Rawlins
408c092faf
Remove "unnecessary" imports in test/widgets (#75796) 2021-02-10 17:21:03 -08:00
Ian Hickson
824042f9b2
Catch cases in tests where people try to tap on widgets that aren't reachable. (#74798) 2021-02-03 16:11:02 -08:00
Dan Field
a2aa2ed02d
Revert "Fix excessive rebuilds of DSS (#69724)" (#71459)
This reverts commit 16dce765775da51416f119a21fc88a8de9ee5fd3.
2020-12-02 11:42:38 -08:00
Dan Field
16dce76577
Fix excessive rebuilds of DSS (#69724) 2020-11-06 12:09:02 -08:00