Chuyển đến nội dung chính

Impeller giờ là mặc định trên macOS, Windows và Linux

Impeller đã là renderer duy nhất trên iOS nhiều năm và mặc định trên Android API 29+ được một thời gian. Flutter 3.47 hoàn tất công việc: Impeller giờ là mặc định trên macOS, Windows và Linux. Chỉ còn Flutter Web chạy trên Skia.

Nếu bạn ship app desktop, đây là thay đổi trong 3.47 dễ làm app của bạn nhìn và cảm nhận khác nhất — và cũng dễ làm lộ ra một lỗi render bạn chưa từng thấy nhất.

Vấn đề Impeller sinh ra để giải

Skia biên dịch shader lúc chạy, theo yêu cầu, ngay lần đầu một thao tác vẽ cụ thể xuất hiện. Đó là lý do một app Flutter có thể giật ở lần đầu bạn mở một màn hình, chạy một animation, hay áp một hiệu ứng blur cụ thể — rồi sau đó chạy mượt mãi mãi. Không phải do code của bạn. Là do renderer biên dịch một chương trình ngay giữa khung hình.

Impeller biên dịch một tập shader nhỏ hơn, đơn giản hơn, ngoại tuyến, lúc build engine. Các pipeline state object được dựng trước thay vì dựng theo từng khung hình. Cache là tường minh và do engine kiểm soát thay vì ngầm định. Kết quả không nhất thiết là frame rate đỉnh cao hơn — mà là nhịp khung hình dự đoán được, thứ mà người dùng thực sự cảm nhận là mượt.

Các mục tiêu thiết kế đáng gọi tên vì chúng giải thích những đánh đổi:

  • Hiệu năng dự đoán được — mọi thứ biên dịch ngoại tuyến
  • Đo đạc được — tài nguyên đồ hoạ được gắn nhãn, và animation có thể được ghi lại, lưu trữ mà không làm nhiễu thời gian khung hình
  • Khả chuyển — shader viết một lần, chuyển đổi theo từng backend
  • API hiện đại — dùng tính năng của Metal và Vulkan mà không bắt buộc phải có
  • Đồng thời — công việc của một khung hình được trải ra nhiều luồng

Backend nào chạy ở đâu

Nền tảngTrạng tháiBackend
iOSMặc định, và là lựa chọn duy nhấtMetal
AndroidMặc định trên API 29+Vulkan, fallback OpenGL dưới 29
macOSMặc định từ 3.47Metal
LinuxMặc định từ 3.47Vulkan
WindowsMặc định từ 3.47Vulkan
WebChưa cóSkia

Vulkan trên Windows và Linux là dòng đáng đọc hai lần. Tình trạng driver của người dùng giờ là một phần trong stack render của bạn theo cách trước đây không phải, và chính sự biến thiên đó là lý do bạn nên test trên phần cứng thật thay vì một máy dev duy nhất.

Wide gamut color trên macOS

Song song với việc đổi renderer, wide gamut color bật mặc định trên macOS. Trên màn hình P3, các màu bão hoà sẽ render bão hoà hơn so với mặc định trước đây. Đây là hành vi đúng, nhưng là thay đổi nhìn thấy được: nếu màu thương hiệu của bạn từng được canh bằng mắt trên bản render bị kẹp về sRGB, chúng sẽ trông khác. Hãy đối chiếu bảng màu với design trước khi kết luận đó là lỗi.

Cách tắt, theo từng nền tảng

Các lối thoát vẫn tồn tại, và release notes nói rõ rằng các phương án fallback sẽ bị gỡ trong một bản phát hành tương lai. Hãy dùng chúng để gỡ kẹt một mốc phát hành và để báo lỗi — không phải làm cấu hình dài hạn.

Để debug trên mọi nền tảng desktop:

flutter run --no-enable-impeller

Bản release, macOS — trong Info.plist, dưới <dict> cấp cao nhất:

<key>FLTEnableImpeller</key>
<false />

Bản release, Linux — trong linux/runner/my_application.cc:

g_autoptr(FlDartProject) project = fl_dart_project_new();
fl_dart_project_set_enable_impeller(project, FALSE);

Bản release, Windows — trong windows\runner\main.cpp:

flutter::DartProject project(L"data");
project.set_impeller_switch(flutter::ImpellerSwitch::Disabled);

Trên Android tương đương là một mục trong manifest (io.flutter.embedding.android.EnableImpeller đặt false). Trên iOS thì không có lối tắt nào cả — và đó là bản xem trước của nơi desktop đang đi tới.

Nên test lại những gì

Đổi renderer thường làm lộ vấn đề ở một nhóm chỗ có thể đoán trước. Ưu tiên:

  • Blur và đổ bóngBackdropFilter, ImageFilter.blur, bóng theo elevation. Trong lịch sử đây là vùng lệch nhiều nhất giữa các renderer.
  • Custom painter và shader — mọi thứ dùng CustomPainter, FragmentProgram, hoặc blend mode ngoài srcOver.
  • Render chữ ở cỡ nhỏ — định vị subpixel và hinting khác nhau.
  • Màu trên màn hình P3 — xem phần wide gamut ở trên.
  • Cạnh clip và khử răng cưa — nhất là clip lồng nhau với góc bo.
  • Khởi động trên GPU yếu — đường Vulkan trên Windows và Linux là biến số mới.

Khảo sát Q2 2026 đặt mức hài lòng Windows ở 74% và Linux ở 73% — hai điểm nền tảng thấp nhất sau Cupertino. Desktop là nơi Flutter còn phải bù nhiều nhất, và điều đó có hai mặt: bản phát hành này là một khoản đầu tư thật cho các nền tảng đó, đồng thời cũng là vùng có nền tảng kiểm thử mỏng nhất trước đây.

Báo lỗi cho hữu ích

Nếu bạn tìm thấy hồi quy, đội Flutter cần một bộ dữ liệu cụ thể, và các báo cáo thiếu nó thường bị đứng:

  1. Thêm tiền tố [Impeller] vào tiêu đề issue.
  2. Ghi cấu hình thiết bị, gồm cả chip chính xác và phiên bản driver GPU.
  3. Đính kèm ảnh chụp màn hình hoặc video, lý tưởng là đặt cạnh bản --no-enable-impeller.
  4. Đính kèm bản export performance trace đã nén.
  5. Nêu phiên bản và channel Flutter từ flutter --version.

Bản so sánh cạnh nhau là thứ giá trị nhất. Nó biến “cái này trông sai” thành một khác biệt render tái hiện được.

Checklist nâng cấp của bạn

  1. Build các target desktop trên 3.47 trước khi động vào bất cứ thứ gì khác.
  2. Chạy bộ visual regression, hoặc nếu chưa có, đi tay qua năm màn hình phức tạp nhất.
  3. So với --no-enable-impeller cho bất cứ chỗ nào trông lạ, để biết renderer có thực sự là nguyên nhân không.
  4. Test trên ít nhất một GPU Windows yếu và một bản phân phối Linux bạn không dùng để phát triển.
  5. Kiểm tra lại màu thương hiệu trên màn hình P3 nếu bạn ship trên macOS.
  6. Mở issue có tiền tố [Impeller] ngay bây giờ, khi fallback còn tồn tại.
  7. Đừng ship bản tắt Impeller vĩnh viễn. Hãy ghi nó là nợ kỹ thuật kèm ngày gỡ.

Kết luận

Impeller trên desktop là thay đổi đúng và hơi rủi ro. Mặt lợi mang tính cấu trúc: giật do shader thôi là một loại bug bạn phải săn, và nhịp khung hình trở nên dự đoán được. Cái giá là một lượt kiểm chứng lại toàn bộ lớp hiển thị, cộng thêm một phụ thuộc mới vào chất lượng driver Vulkan trên Windows và Linux. Hãy làm lượt đó ngay bây giờ, khi --no-enable-impeller còn tồn tại để cho bạn biết renderer có phải thủ phạm hay không — vì nó sẽ không tồn tại mãi.


Bài viết gốc đăng tại FlutterCook. Bản trên đó là bản được cập nhật mới nhất.

Nhận xét

Bài đăng phổ biến từ blog này

Thiết kế giao diện với DotNetBar (Phần 1)

Đây là phiên bản DotNetBar hỗ trợ C# và Visual Basic https://www.dropbox.com/s/wx80jpvgnlrmtux/DotNetBar.rar  , phiên bản này hỗ trợ giao diện Metro cực kỳ “dễ thương” Các bạn load về và cài đặt, khi cài đặt xong sẽ có source code mẫu của tất cả các control. Để sử dụng được các control của DotNetBar các bạn nhớ add item vào controls box. Thiết kế giao diện với DotNetBar, giao diện sẽ rất đẹp. Link các video hướng dẫn chi tiết cách sử dụng và coding: http://www.devcomponents.com/dotnetbar/movies.aspx Hiện tại DotNetBar có rất nhiều công cụ cực mạnh, trong đó có 3 công cụ dưới đây: DotNetBar for Windows Forms Requires with Visual Studio 2003, 2005, 2008, 2010 or 2012.   DotNetBar for WPF Requires with Visual Studio 2010 or 2012 and Windows Presentation Foundation.   DotNetBar for Silverlight Requires with Visual Studio 2010 or 2012 and Silverlight. Dưới đây là một số hình ảnh về các control trong DotnetBar.   Metro User Interface  controls with Metro Tiles, toolba...

5 concepts every Flutter dev should know

  Phụ lục: State management architecture Testing IDE Shortcuts Platform channel Maintaining a project Tôi đã làm việc với Flagship trong một thời gian dài, và đây là những điều mà tôi phát hiện ra là điều cần phải có đối với bất kỳ nhà phát triển Flagship nào, về tổng thể nó sẽ khiến bạn trở thành một nhà phát triển Flagship giỏi trong thời gian dài. 1. State management architecture Đây là một trong những chủ đề quan trọng nhất trong cộng đồng thiết bị rung, nó khá quan trọng nếu bạn muốn duy trì một dự án rung kích thước trung bình hoặc lớn. Nó sẽ giúp tạo một dự án suôn sẻ và thêm các tính năng mới một cách hoàn hảo.  2. Testing Đây là một chủ đề duy nhất mà tôi không hiểu tại sao nó lại quan trọng trước đó trong sự nghiệp của tôi, nhưng khi tôi tiến lên trong sự nghiệp của mình và có kinh nghiệm với nhiều dự án và vấn đề xảy ra trong môi trường sản xuất. Tôi đã nhận ra một cách khó khăn, tại sao điều này lại quan trọng như vậy. Nếu bạn vẫn muốn có thêm lý do để cân nhắc thử...

Announcing Flutter 2

  Phụ lục: Flutter on the web Flutter 2 on desktops, foldables, and embedded devices The growing Flutter ecosystem Dart: The secret sauce behind Flutter Flutter 2: Available now Hôm nay, chúng tôi sẽ công bố Flutter 2: một bản nâng cấp lớn cho Flutter cho phép các nhà phát triển tạo các ứng dụng đẹp, nhanh chóng và di động cho bất kỳ nền tảng nào. Với Flutter 2, bạn có thể sử dụng cùng một cơ sở mã để gửi các ứng dụng gốc cho năm hệ điều hành: IOS, Android, Windows, macOS và Linux; cũng như trải nghiệm web nhắm mục tiêu các trình duyệt như Chrome, Firefox, Safari hoặc Edge. Flutter thậm chí có thể được nhúng vào ô tô, TV và thiết bị gia dụng thông minh, mang đến trải nghiệm di động và lan tỏa nhất cho thế giới điện toán xung quanh. Mục tiêu của chúng tôi là thay đổi cơ bản cách các nhà phát triển nghĩ về việc xây dựng ứng dụng, bắt đầu không phải với nền tảng bạn đang nhắm mục tiêu mà là với trải nghiệm bạn muốn tạo. Flutter cho phép bạn tạo ra những trải nghiệm tuyệt đẹp trong đó ...