Skip to content

Conversation

@TahaTesser
Copy link
Member

@TahaTesser TahaTesser commented Mar 13, 2023

fixes #121511
fixes #104493
fixes #122295
fixes #115091
fixes #122530
fixes #123943

code sample
import 'package:flutter/material.dart';

const Color foregroundColor = Color(0xff00ff00);
const Color backgroundColor = Color(0xff00ffff);
const double elevation = 4.0;
const double scrolledUnderElevation = 6.0;
const Color shadowColor = Color(0xff1212ff);
const ShapeBorder shape = RoundedRectangleBorder(
  borderRadius: BorderRadius.all(Radius.circular(14.0)),
);
const IconThemeData iconTheme = IconThemeData(color: Color(0xffff0000));
const IconThemeData actionsIconTheme = IconThemeData(color: Color(0xff0000ff));
const bool centerTitle = false;
const double titleSpacing = 10.0;
const TextStyle titleTextStyle = TextStyle(
  fontSize: 22.9,
  fontStyle: FontStyle.italic,
  color: Colors.blue,
);

AppBarTheme appBarTheme = const AppBarTheme(
  foregroundColor: foregroundColor,
  backgroundColor: backgroundColor,
  elevation: elevation,
  scrolledUnderElevation: scrolledUnderElevation,
  shadowColor: shadowColor,
  shape: shape,
  iconTheme: iconTheme,
  actionsIconTheme: actionsIconTheme,
  centerTitle: centerTitle,
  titleSpacing: titleSpacing,
  titleTextStyle: titleTextStyle,
);

void main() => runApp(const SliverAppBarExample());

class SliverAppBarExample extends StatefulWidget {
  const SliverAppBarExample({super.key});

  @override
  State<SliverAppBarExample> createState() => _SliverAppBarExampleState();
}

class _SliverAppBarExampleState extends State<SliverAppBarExample> {
  // Parameters
  TextStyle titleTextStyle = const TextStyle(
    color: Colors.deepPurple,
    fontSize: 22,
    fontStyle: FontStyle.italic,
  );
  Widget leading = IconButton(
    icon: const Icon(Icons.menu),
    onPressed: () {},
  );
  PreferredSizeWidget bottomWidget = const TabBar(
    tabs: <Widget>[
      Tab(text: 'Tab 1'),
      Tab(text: 'Tab 2'),
      Tab(text: 'Tab 3'),
    ],
  );

  // Controls
  bool showSliverAppBar = false;
  bool showSliverAppBarMedium = true;
  bool showSliverAppBarLarge = false;
  bool showAll = false;
  bool showLeading = true;
  bool centerTitle = false;
  bool showTitleTextStyle = false;
  bool showTitleSpacing = true;
  bool showAppBarTheme = false;
  bool showBottom = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        appBarTheme: showAppBarTheme ? appBarTheme : null,
        useMaterial3: true,
      ),
      home: DefaultTabController(
        length: 3,
        child: Scaffold(
          body: CustomScrollView(
            slivers: <Widget>[
              if (showSliverAppBar || showAll)
                SliverAppBar(
                  leading: showLeading ? leading : null,
                  title: const Text('Sliver App Bar'),
                  titleTextStyle: showTitleTextStyle ? titleTextStyle : null,
                  centerTitle: centerTitle,
                  titleSpacing: showTitleSpacing ? null : 0.0,
                  pinned: true,
                  actions: <Widget>[
                    IconButton(
                        icon: const Icon(Icons.favorite), onPressed: () {}),
                    IconButton(
                        icon: const Icon(Icons.favorite), onPressed: () {}),
                  ],
                  bottom: showBottom ? bottomWidget : null,
                ),
              if (showSliverAppBarMedium || showAll)
                SliverAppBar.medium(
                  leading: showLeading ? leading : null,
                  title: const Text('Medium App Bar'),
                  titleTextStyle: showTitleTextStyle ? titleTextStyle : null,
                  centerTitle: centerTitle,
                  titleSpacing: showTitleSpacing ? null : 0.0,
                  actions: <Widget>[
                    IconButton(
                        icon: const Icon(Icons.favorite), onPressed: () {}),
                    IconButton(
                        icon: const Icon(Icons.favorite), onPressed: () {}),
                  ],
                  bottom: showBottom ? bottomWidget : null,
                ),
              if (showSliverAppBarLarge || showAll)
                SliverAppBar.large(
                  leading: showLeading ? leading : null,
                  title: const Text('Large App Bar'),
                  titleTextStyle: showTitleTextStyle ? titleTextStyle : null,
                  centerTitle: centerTitle,
                  titleSpacing: showTitleSpacing ? null : 0.0,
                  actions: <Widget>[
                    IconButton(
                        icon: const Icon(Icons.favorite), onPressed: () {}),
                    IconButton(
                        icon: const Icon(Icons.favorite), onPressed: () {}),
                  ],
                  bottom: showBottom ? bottomWidget : null,
                ),
              const SliverFillRemaining(
                child: Center(
                  child: Text(
                    'Scroll down to collapse the app bar',
                  ),
                ),
              ),
            ],
          ),
          bottomSheet: Padding(
            padding: const EdgeInsets.all(8.0),
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                Wrap(
                  alignment: WrapAlignment.center,
                  runAlignment: WrapAlignment.center,
                  spacing: 5.0,
                  runSpacing: 5.0,
                  children: <Widget>[
                    FilledButton(
                      onPressed: () {
                        setState(() {
                          showSliverAppBar = true;
                          showSliverAppBarMedium = false;
                          showSliverAppBarLarge = false;
                          showAll = false;
                        });
                      },
                      child: const Text('SliverAppBar'),
                    ),
                    FilledButton(
                      onPressed: () {
                        setState(() {
                          showSliverAppBar = false;
                          showSliverAppBarMedium = true;
                          showSliverAppBarLarge = false;
                          showAll = false;
                        });
                      },
                      child: const Text('SliverAppBar.medium'),
                    ),
                    FilledButton(
                      onPressed: () {
                        setState(() {
                          showSliverAppBar = false;
                          showSliverAppBarMedium = false;
                          showSliverAppBarLarge = true;
                          showAll = false;
                        });
                      },
                      child: const Text('SliverAppBar.large'),
                    ),
                    FilledButton(
                      onPressed: () {
                        setState(() {
                          setState(() {
                            showSliverAppBar = false;
                            showSliverAppBarMedium = false;
                            showSliverAppBarLarge = false;
                            showAll = true;
                          });
                        });
                      },
                      child: const Text('All'),
                    ),
                  ],
                ),
                const SizedBox(
                  height: 10.0,
                ),
                Wrap(
                  alignment: WrapAlignment.center,
                  runAlignment: WrapAlignment.center,
                  spacing: 5.0,
                  runSpacing: 5.0,
                  children: <Widget>[
                    // FilledButton.icon(
                    //   onPressed: () {
                    //     setState(() {
                    //       if (textScaleFactor >= 3.0) {
                    //         textScaleFactor = 1.0;
                    //       } else {
                    //         textScaleFactor += 1.0;
                    //       }
                    //     });
                    //   },
                    //   icon: const Icon(Icons.text_increase_rounded),
                    //   label: Text('TextScale: $textScaleFactor'),
                    // ),
                    FilledButton.icon(
                      onPressed: () {
                        setState(() {
                          showLeading = !showLeading;
                        });
                      },
                      label: const Text('Leading'),
                      icon: Icon(showLeading
                          ? Icons.visibility_off
                          : Icons.visibility),
                    ),
                    FilledButton(
                      onPressed: () {
                        setState(() {
                          centerTitle = !centerTitle;
                        });
                      },
                      child: Text('centerTitle: $centerTitle'),
                    ),
                    FilledButton.icon(
                      onPressed: () {
                        setState(() {
                          showTitleTextStyle = !showTitleTextStyle;
                        });
                      },
                      label: const Text('titleTextStyle'),
                      icon: Icon(showTitleTextStyle
                          ? Icons.visibility_off
                          : Icons.visibility),
                    ),
                    FilledButton.icon(
                      onPressed: () {
                        setState(() {
                          showTitleSpacing = !showTitleSpacing;
                        });
                      },
                      label: const Text('titleSpacing'),
                      icon: Icon(showTitleSpacing
                          ? Icons.visibility_off
                          : Icons.visibility),
                    ),
                    FilledButton.icon(
                      onPressed: () {
                        setState(() {
                          showBottom = !showBottom;
                        });
                      },
                      label: const Text('bottom'),
                      icon: Icon(
                          showBottom ? Icons.visibility_off : Icons.visibility),
                    ),
                    FilledButton.icon(
                      onPressed: () {
                        setState(() {
                          showAppBarTheme = !showAppBarTheme;
                        });
                      },
                      label: const Text('AppBarTheme'),
                      icon: Icon(showAppBarTheme
                          ? Icons.visibility_off
                          : Icons.visibility),
                    ),
                    Builder(builder: (BuildContext context) {
                      return FilledButton(
                        onPressed: () {
                          Navigator.push(
                            context,
                            MaterialPageRoute<Widget>(
                              builder: (BuildContext context) =>
                                  const SecondScreen(),
                            ),
                          );
                        },
                        child: const Text('Second Screen'),
                      );
                    }),
                  ],
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: CustomScrollView(
        slivers: <Widget>[
          SliverAppBar.medium(
            title: Text('Second Screen'),
            centerTitle: false,
          ),
          SliverFillRemaining(
            child: Center(
              child: Text(
                'Scroll down to collapse the app bar',
              ),
            ),
          ),
        ],
      ),
    );
  }
}

Description

This PR refactors SliverAppBar.medium & SliverAppBar.large and fixes a bunch of issues.

  • Refactor to get bottom widget height inside the build context.
  • Add private variant enum (similar to IconButton)
  • Move medium and large flexible spaces inside the build to account for bottom height and top padding.
  • Collapsed title in the flexible space was a mess, refactored to remove collapsed title from flexible space.
  • Remove redundant code from flexible space (flexible space only handles expanded title now, which is much cleaner)

Fix text cut off in SliverAppBar.medium

Before

Preview Outline

After

Preview Outline

Fix title disappears with the bottom widget

Before

Screenshot 2023-03-13 at 19 35 22

Screenshot 2023-03-13 at 19 35 25

Screenshot 2023-03-13 at 19 35 28

After

Screenshot 2023-03-13 at 19 34 49
Screenshot 2023-03-13 at 19 34 52
Screenshot 2023-03-13 at 19 35 01

Fix title style and action theme customization (AppBarTheme) and tittle alignment

Before

Screenshot 2023-03-13 at 19 33 11

After

Screenshot 2023-03-13 at 19 41 38

Fix center title alignment

Before

Screenshot 2023-03-13 at 19 42 57

After

Screenshot 2023-03-13 at 19 42 41

Fix automaticallyImplyLeading

Before

Screenshot 2023-03-13 at 19 31 31

After

Screenshot 2023-03-13 at 19 33 47

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.

@flutter-dashboard flutter-dashboard bot added f: material design flutter/packages/flutter/material repository. f: scrolling Viewports, list views, slivers, etc. framework flutter/packages/flutter repository. See also f: labels. labels Mar 13, 2023
@TahaTesser TahaTesser requested review from HansMuller and Piinks March 13, 2023 17:45
@Piinks
Copy link
Contributor

Piinks commented Mar 17, 2023

Still working through this - and wow! :)

Copy link
Contributor

@Piinks Piinks left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a reason to not split these changes up? If a customer is broken by one of these changes, all of them would have to be reverted.

@TahaTesser
Copy link
Member Author

Is there a reason to not split these changes up? If a customer is broken by one of these changes, all of them would have to be reverted.

The reason It fixes multiple issues and doesn't split the changes, in reality, it's not a lot of changes, in fact, it removes a lot of code if you don't count the tests. Refactoring the constructor itself fixes a bunch of issues and removing collapsed text from the flexible space bar also automatically fixes a lot of redundant parameters.

I could divide the PR into two, 1. refactoring constructors and 2. Removing collapsed text, if you think this will be better.

@Piinks
Copy link
Contributor

Piinks commented Mar 20, 2023

Let me run it through internal testing. If some failures come up it'll probably be a good signal to split it up.

@TahaTesser
Copy link
Member Author

TahaTesser commented Mar 20, 2023

Let me run it through internal testing. If some failures come up it'll probably be a good signal to split it up.

I can see constructors are const now instead of factory and locally I had to update code sample to satisfy analyser when switching this branch and master. I suppose this will be taken care by dart fix. Is it a breaking change?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh nice catch! Was this test not right before without useMaterial3?

Copy link
Member Author

@TahaTesser TahaTesser Mar 22, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question, please see #122542 (comment)

@Piinks Piinks added a: fidelity Matching the OEM platforms better a: quality A truly polished experience labels Mar 22, 2023
@Piinks
Copy link
Contributor

Piinks commented Mar 22, 2023

Ran internal test suite and found no breaks. 👍

@TahaTesser TahaTesser requested a review from Piinks March 24, 2023 15:56
@Piinks
Copy link
Contributor

Piinks commented Mar 29, 2023

I want to run 55fb509 through internal testing since it may change something for an existing customer. Firing off another round of tests today. 👍

@TahaTesser
Copy link
Member Author

I want to run 55fb509 through internal testing since it may change something for an existing customer. Firing off another round of tests today. 👍

Thank you so much!

@TahaTesser
Copy link
Member Author

Resolved new conflicts from #122600

Copy link
Contributor

@Piinks Piinks left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for updating. This LGTM but please do not merge it. The Google testing works better when a PR is approved. It is not yet clear if this is completely safe to land yet and the tool is struggling to test this unapproved.

@Piinks
Copy link
Contributor

Piinks commented Apr 4, 2023

Hm, the update PR button is gone now. Can you rebase this?

@TahaTesser
Copy link
Member Author

Welcome back! Can you rebase once more here? Thank you!

Thank you!

@Piinks
Copy link
Contributor

Piinks commented Apr 11, 2023

Ok finally, the CI issues cleared up. 😀
Don't land yet, I should be able to finally get a global test run in to ensure this doesn't break anything.

@Piinks
Copy link
Contributor

Piinks commented Apr 13, 2023

Woo! Good to go. Thanks for your patience. :)

@Piinks Piinks added the autosubmit Merge PR when tree becomes green via auto submit App label Apr 13, 2023
@auto-submit auto-submit bot merged commit 55dc9f9 into flutter:master Apr 13, 2023
@TahaTesser
Copy link
Member Author

Woo! Good to go. Thanks for your patience. :)

Thank you for running the tests!

@rydmike
Copy link
Contributor

rydmike commented Apr 13, 2023

Wow @TahaTesser this an impressive amount of fixes in one go, congrats on getting it merged! 🥳 👍🏻

@JGeek00
Copy link

JGeek00 commented Apr 13, 2023

Hi. When could this fix be available on a release on the stable channel? Thanks.

@TahaTesser
Copy link
Member Author

Wow @TahaTesser this an impressive amount of fixes in one go, congrats on getting it merged! 🥳 👍🏻

It's team work. Not easy to land such PRs without @Piinks help!

@TahaTesser TahaTesser deleted the sliverappbar_fixes branch April 13, 2023 19:47
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Apr 14, 2023
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Apr 14, 2023
flutter/flutter@be45eb2...f740544

2023-04-14 [email protected] Roll Flutter Engine from b7b2e7b742aa to 4b96e38c9275 (1 revision) (flutter/flutter#124856)
2023-04-14 [email protected] Adjust repo config for VS Code formatting (flutter/flutter#122758)
2023-04-14 [email protected] Roll Flutter Engine from 4f86a05ac932 to b7b2e7b742aa (4 revisions) (flutter/flutter#124845)
2023-04-14 [email protected] Roll Flutter Engine from 00bef00f64a7 to 4f86a05ac932 (5 revisions) (flutter/flutter#124841)
2023-04-14 [email protected] Roll Flutter Engine from ad222b0c93b9 to 00bef00f64a7 (1 revision) (flutter/flutter#124837)
2023-04-14 [email protected] [flutter_tools] Reorganize android_studio_test.dart (flutter/flutter#124834)
2023-04-14 [email protected] Roll Flutter Engine from ce7be0093399 to ad222b0c93b9 (1 revision) (flutter/flutter#124832)
2023-04-14 [email protected] Remove Finder extended attributes in build target before code signing iOS frameworks (flutter/flutter#123896)
2023-04-14 [email protected] flutter-tool, web: update HTML template serviceWorkerVersion to be const (flutter/flutter#124826)
2023-04-14 [email protected] Fix `CupertinoContextMenu` throws exception on route animation (flutter/flutter#124785)
2023-04-14 [email protected] flutter-tool: enum cleanup (flutter/flutter#124760)
2023-04-14 [email protected] Roll Flutter Engine from 1289f4b513ef to ce7be0093399 (1 revision) (flutter/flutter#124825)
2023-04-13 49699333+dependabot[bot]@users.noreply.github.com Bump actions/checkout from 3.5.1 to 3.5.2 (flutter/flutter#124822)
2023-04-13 [email protected] Roll Flutter Engine from 2ff14d733daa to 1289f4b513ef (2 revisions) (flutter/flutter#124824)
2023-04-13 [email protected] Roll Flutter Engine from eb3e7d52ebbc to 2ff14d733daa (1 revision) (flutter/flutter#124820)
2023-04-13 [email protected] i123643 print java version gradle (flutter/flutter#123644)
2023-04-13 [email protected] Roll Flutter Engine from 496543715bdb to eb3e7d52ebbc (3 revisions) (flutter/flutter#124816)
2023-04-13 [email protected] Roll pub packages (flutter/flutter#124709)
2023-04-13 [email protected] [flutter_tools] Disable flaky `output_web_test` test case (flutter/flutter#124257)
2023-04-13 [email protected] Roll Flutter Engine from 26eddb64e8ea to 496543715bdb (1 revision) (flutter/flutter#124812)
2023-04-13 [email protected] Refactor `SliverAppBar.medium` & `SliverAppBar.large` to fix several issues (flutter/flutter#122542)
2023-04-13 [email protected] Improve the docs around the TextSelectionHandleControls deprecations (flutter/flutter#123827)
2023-04-13 [email protected] Roll Packages from fe5615f to d01f4ea (5 revisions) (flutter/flutter#124795)
2023-04-13 [email protected] Roll Flutter Engine from 81a57d24e62a to 26eddb64e8ea (1 revision) (flutter/flutter#124794)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC [email protected],[email protected],[email protected] on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
exaby73 pushed a commit to NevercodeHQ/flutter that referenced this pull request Apr 17, 2023
…issues (flutter#122542)

Refactor `SliverAppBar.medium` & `SliverAppBar.large` to fix several issues
nploi pushed a commit to nploi/packages that referenced this pull request Jul 16, 2023
flutter/flutter@be45eb2...f740544

2023-04-14 [email protected] Roll Flutter Engine from b7b2e7b742aa to 4b96e38c9275 (1 revision) (flutter/flutter#124856)
2023-04-14 [email protected] Adjust repo config for VS Code formatting (flutter/flutter#122758)
2023-04-14 [email protected] Roll Flutter Engine from 4f86a05ac932 to b7b2e7b742aa (4 revisions) (flutter/flutter#124845)
2023-04-14 [email protected] Roll Flutter Engine from 00bef00f64a7 to 4f86a05ac932 (5 revisions) (flutter/flutter#124841)
2023-04-14 [email protected] Roll Flutter Engine from ad222b0c93b9 to 00bef00f64a7 (1 revision) (flutter/flutter#124837)
2023-04-14 [email protected] [flutter_tools] Reorganize android_studio_test.dart (flutter/flutter#124834)
2023-04-14 [email protected] Roll Flutter Engine from ce7be0093399 to ad222b0c93b9 (1 revision) (flutter/flutter#124832)
2023-04-14 [email protected] Remove Finder extended attributes in build target before code signing iOS frameworks (flutter/flutter#123896)
2023-04-14 [email protected] flutter-tool, web: update HTML template serviceWorkerVersion to be const (flutter/flutter#124826)
2023-04-14 [email protected] Fix `CupertinoContextMenu` throws exception on route animation (flutter/flutter#124785)
2023-04-14 [email protected] flutter-tool: enum cleanup (flutter/flutter#124760)
2023-04-14 [email protected] Roll Flutter Engine from 1289f4b513ef to ce7be0093399 (1 revision) (flutter/flutter#124825)
2023-04-13 49699333+dependabot[bot]@users.noreply.github.com Bump actions/checkout from 3.5.1 to 3.5.2 (flutter/flutter#124822)
2023-04-13 [email protected] Roll Flutter Engine from 2ff14d733daa to 1289f4b513ef (2 revisions) (flutter/flutter#124824)
2023-04-13 [email protected] Roll Flutter Engine from eb3e7d52ebbc to 2ff14d733daa (1 revision) (flutter/flutter#124820)
2023-04-13 [email protected] i123643 print java version gradle (flutter/flutter#123644)
2023-04-13 [email protected] Roll Flutter Engine from 496543715bdb to eb3e7d52ebbc (3 revisions) (flutter/flutter#124816)
2023-04-13 [email protected] Roll pub packages (flutter/flutter#124709)
2023-04-13 [email protected] [flutter_tools] Disable flaky `output_web_test` test case (flutter/flutter#124257)
2023-04-13 [email protected] Roll Flutter Engine from 26eddb64e8ea to 496543715bdb (1 revision) (flutter/flutter#124812)
2023-04-13 [email protected] Refactor `SliverAppBar.medium` & `SliverAppBar.large` to fix several issues (flutter/flutter#122542)
2023-04-13 [email protected] Improve the docs around the TextSelectionHandleControls deprecations (flutter/flutter#123827)
2023-04-13 [email protected] Roll Packages from fe5615f to d01f4ea (5 revisions) (flutter/flutter#124795)
2023-04-13 [email protected] Roll Flutter Engine from 81a57d24e62a to 26eddb64e8ea (1 revision) (flutter/flutter#124794)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC [email protected],[email protected],[email protected] on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
@JosephArcila
Copy link

I'm having this issue, please how can I implement your solution?

@TahaTesser
Copy link
Member Author

I'm having this issue, please how can I implement your solution?

This is currently available on the beta channel and it should be available in the major stable release

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

a: fidelity Matching the OEM platforms better a: quality A truly polished experience autosubmit Merge PR when tree becomes green via auto submit App f: material design flutter/packages/flutter/material repository. f: scrolling Viewports, list views, slivers, etc. framework flutter/packages/flutter repository. See also f: labels.

Projects

None yet

5 participants