Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
16ea3a1
Add "Why us" landing page to flutter.dev
vmkstudio Aug 3, 2026
e012d3d
Fix visual regressions found in the rendered "Why us" page
vmkstudio Aug 3, 2026
b5a26dd
chore: reset generatedStylesHash to empty string
abdallahshaban557 Aug 3, 2026
9a1e980
style: refine layout responsiveness and alignment for why-us shared m…
abdallahshaban557 Aug 3, 2026
dfcc7a4
style: add vertical spacing between kicker, heading, subtitle, and re…
abdallahshaban557 Aug 3, 2026
c6951ec
refactor: migrate Why Us page to Why Flutter page and update associat…
abdallahshaban557 Aug 3, 2026
78d0add
feat: add Flutter logo mark to Why Flutter hero productivity chart
abdallahshaban557 Aug 3, 2026
e4f28ca
refactor: reorder Google Earth item in why flutter cases list
abdallahshaban557 Aug 3, 2026
3703dec
feat: update success cases section copy and add Why Flutter navigatio…
abdallahshaban557 Aug 3, 2026
54c6adc
refactor: update text content and reformat component structure in Why…
abdallahshaban557 Aug 3, 2026
53d1ea6
refactor: update Flutter features section content and polish messagin…
abdallahshaban557 Aug 3, 2026
6a52f30
feat: add analytics tracking to whitepaper download button in hero se…
abdallahshaban557 Aug 3, 2026
be2f0ba
style: format Dart files with dash_site
abdallahshaban557 Aug 3, 2026
c025c6b
Merge branch 'main' into why-us-landing-page
abdallahshaban557 Aug 3, 2026
8baa5bb
Bump the github-actions group with 3 updates (#13659)
dependabot[bot] Aug 3, 2026
b7bdc0b
doc(web): update Wasm status page links and FAQ conditional imports (…
kevmoo Aug 3, 2026
9bdc300
Update deploy image to Dart 3.13.0-282.3.beta (#13655)
parlough Aug 3, 2026
666bc5d
Add redirect for android-local-area-permission (#13664)
mboetger Aug 3, 2026
a88abe2
feat: Add Knowunity case study and update showcase data (#13663)
abdallahshaban557 Aug 3, 2026
7276566
Merge branch 'main' into why-us-landing-page
abdallahshaban557 Aug 20, 2026
dae1788
refactor: update capabilities list in WhyFlutterAiEraSection to repla…
abdallahshaban557 Aug 20, 2026
c0fbbe2
refactor: reorder Why Flutter navigation item in nav_items.dart
abdallahshaban557 Aug 20, 2026
fd3ea36
style: update why-flutter hero button colors and border styling
abdallahshaban557 Aug 20, 2026
3e43b7c
Merge branch 'main' into why-us-landing-page
abdallahshaban557 Aug 20, 2026
d1fd070
Merge branch 'main' into why-us-landing-page
abdallahshaban557 Aug 21, 2026
ae0348c
Merge branch 'main' into why-us-landing-page
abdallahshaban557 Aug 21, 2026
695da5d
Merge branch 'main' into why-us-landing-page
abdallahshaban557 Aug 27, 2026
899998d
Merge branch 'main' into why-us-landing-page
abdallahshaban557 Aug 27, 2026
a9a48b7
refactor: update Why Flutter section layout, styles, and hero visual …
abdallahshaban557 Sep 1, 2026
a513309
Merge remote-tracking branch 'vmkstudio/why-us-landing-page' into why…
abdallahshaban557 Sep 1, 2026
03a7e9d
Merge branch 'main' into why-us-landing-page
abdallahshaban557 Sep 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 12 additions & 0 deletions sites/www/content/why-flutter/images/leancode.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions sites/www/content/why-flutter/images/resource-arrow.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
32 changes: 32 additions & 0 deletions sites/www/content/why-flutter/images/vgvlogo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions sites/www/content/why-flutter/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
title: Why Flutter
bodyTags: interior whyFlutter
description: >-
Discover how unifying your codebase empowers you to ship to iOS, Android,
Web, and Desktop faster and more efficiently than ever before.
publishDate: "2026-08-03"
---

<WhyFlutterPage />
35 changes: 35 additions & 0 deletions sites/www/lib/main.client.options.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@ import 'package:flutter_website/src/components/pages/games_adaptive_media.dart'
deferred as _games_adaptive_media;
import 'package:flutter_website/src/components/pages/showcase_grid.dart'
deferred as _showcase_grid;
import 'package:flutter_website/src/components/sections/why_flutter_ai_era_section.dart'
deferred as _why_flutter_ai_era_section;
import 'package:flutter_website/src/components/sections/why_flutter_cases_section.dart'
deferred as _why_flutter_cases_section;
import 'package:flutter_website/src/components/sections/why_flutter_code_shared_section.dart'
deferred as _why_flutter_code_shared_section;
import 'package:flutter_website/src/components/sections/why_flutter_hero_section.dart'
deferred as _why_flutter_hero_section;
import 'package:flutter_website/src/models/content/banner_content.dart'
as _banner_content;
import 'package:site_shared/components/blog/client/blog_categories.dart'
Expand Down Expand Up @@ -146,6 +154,33 @@ ClientOptions get defaultClientOptions => ClientOptions(
),
loader: _showcase_grid.loadLibrary,
),
'why_flutter_ai_era_section': ClientLoader(
(p) => _why_flutter_ai_era_section.WhyFlutterAiEraSection(
geminiSprite: p['geminiSprite'] as String,
),
loader: _why_flutter_ai_era_section.loadLibrary,
),
'why_flutter_cases_section': ClientLoader(
(p) => _why_flutter_cases_section.WhyFlutterCasesSection(
media: (p['media'] as Map<String, Object?>).cast<String, String>(),
),
loader: _why_flutter_cases_section.loadLibrary,
),
'why_flutter_code_shared_section': ClientLoader(
(p) => _why_flutter_code_shared_section.WhyFlutterCodeSharedSection(
laptopSprite: p['laptopSprite'] as String,
),
loader: _why_flutter_code_shared_section.loadLibrary,
),
'why_flutter_hero_section': ClientLoader(
(p) => _why_flutter_hero_section.WhyFlutterHeroSection(
typingSprite: p['typingSprite'] as String,
screens: (p['screens'] as List<Object?>).cast<String>(),
whitepaperUrl: p['whitepaperUrl'] as String,
flutterLogo: p['flutterLogo'] as String,
),
loader: _why_flutter_hero_section.loadLibrary,
),
'site_shared:blog_categories': ClientLoader(
(p) => _blog_categories.BlogCategories(
categories: (p['categories'] as List<Object?>)
Expand Down
2 changes: 2 additions & 0 deletions sites/www/lib/main.server.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ import 'src/pages/news_page.dart';
import 'src/pages/not_found_page.dart';
import 'src/pages/showcase_page.dart';
import 'src/pages/web_page.dart';
import 'src/pages/why_flutter_page.dart';
import 'src/utils/asset_utils.dart';

void main() async {
Expand Down Expand Up @@ -124,6 +125,7 @@ void main() async {
defineComponent('BrandPage', const BrandPage()),
defineComponent('FlipPage', const FlipPage()),
defineComponent('NewsPage', const NewsPage()),
defineComponent('WhyFlutterPage', const WhyFlutterPage()),
defineComponentWithAttrs('Image', Image.fromAttrs),

CustomComponent(
Expand Down
Loading