, October 26, 2021

0 kết quả được tìm thấy

Flutter 2.5 có gì mới?

  • Đăng bởi  Groot
  •  Sep 14, 2021

  •   25 min reads
Flutter 2.5 có gì mới?

Chào mừng bạn đến với Flutter 2.5!

Mới đây Flutter đã tung ra một bản phát hành lớn, với số liệu thống kê cao thứ 2 trong lịch sử các bản phát hành của Flutter: 4600 lỗi đã được sửa và 3932 PRs được merge từ 252 contributors với 216 reviewers.

Bản phát hành này tiếp tục cập nhập một số cải tiến quan trọng về hiệu năng.  Các công cụ dùng để theo dõi các vấn đề về hiệu năng trong ứng dụng cũng được cập nhập thêm.

Bên cạnh đó bản cập nhập cũng có một số tính năng mới như là: tính năng hỗ trợ toàn màn hình cho Android, hỗ trợ thêm Material You (còn gọi là v3), cập nhập chỉnh sửa văn bản để hỗ trợ các phím tắt có thể chuyển đổi, chi tiết hơn về các widgets trong Widget Inspector, thêm dependencies vào các dự án Visual Studio Code, hỗ trợ để nhận thông tin về phạm vi từ các lần chạy thử nghiệm trong IntelliJ / Android Studio và một app template hoàn toàn mới để làm nền tảng tốt hơn cho các ứng dụng Flutter trong thế giới thực.

Bản phát hành này có rất nhiều bản cập nhật mới thú vị, vì vậy hãy bắt đầu tìm hiểu thôi.

Hiệu năng: iOS shader warmup, async tasks, GC & message passing

Bản phát hành này đi kèm với một số cải tiến về hiệu năng. Đầu tiên trong danh sách cải tiến này là một PR để kết nối quá trình biên dịch trước Metal shader từ các lần offline training runs. Như điểm benchmarks cost bên dưới, nó giảm thời gian frame rasterization trong trường hợp xấu nhất xuống 2/3 giây và percentile frame thứ 99 xuống một nửa. Flutter tiếp tục đạt được kết quả tốt trong việc giảm jank iOS và đây là một bước tiến tốt.

Tuy nhiên, Shader warmup chỉ là thứ gây ra jank. Trước đây, việc xử lý các sự kiện không đồng bộ từ network, filesystem, plugins hoặc các phần tách biệt khác có thể làm gián đoạn animations, một nguồn jank khác.

Sau những cải tiến đối với chính sách scheduling trên vòng lặp event của UI isolate thì việc xử lý frame giờ đây được ưu tiên hơn so với việc xử lý các event bất đồng bộ khác, loại bỏ jank khỏi các thử nghiệm của chúng ta.

Frame lag due to processing asynchronous event results before and after
Frame lag due to processing asynchronous event results before and after

Một nguyên nhân khác của jank là khi garbage collector (GC) tạm dừng UI thread để lấy lại bộ nhớ. Trước đây, bộ nhớ cho một số hình ảnh sẽ chỉ được lấy lại một cách chậm chạp để đáp ứng với GC do Dart VM thực hiện.

Như một giải pháp thay thế trong các bản phát hành trước đó, Flutter Engine sẽ gợi ý cho Dart VM rằng bộ nhớ hình ảnh có thể được GC thu hồi, về lý thuyết, điều này có thể dẫn đến việc cải tạo bộ nhớ kịp thời hơn.

Thật không may, trong thực tế, điều này dẫn đến quá nhiều GC chính và bộ nhớ đôi khi vẫn không được lấy lại đủ nhanh để tránh tình trạng bộ nhớ thấp trên các thiết bị hạn chế bộ nhớ. Trong phiên bản này, bộ nhớ cho các hình ảnh không sử dụng sẽ được lấy lại một cách nhanh chóng, làm giảm đáng kể GC.

GCs before and after adding the fix to eagerly reclaim unused large image memory
GCs before and after adding the fix to eagerly reclaim unused large image memory

Ví dụ: trong một thử nghiệm của flutter, việc play một GIF động 20 giây giảm từ hơn 400 GC xuống chỉ cần 4 GC. Ít GC chính hơn sẽ giúp các hoạt ảnh liên quan đến hình ảnh xuất hiện và biến mất sẽ ít bị giật hơn, đồng thời tiêu thụ ít CPU và điện năng hơn.

Một cải tiến hiệu năng khác trong Flutter 2.5 là độ trễ khi gửi message giữa Dart và Objective-C / Swift (iOS) hoặc Dart và Java / Kotlin (Android). Một phần của việc tinh chỉnh các message channel nói chung, việc xóa các bản sao không cần thiết khỏi codec nhắn tin đã giảm độ trễ lên đến 50% tùy thuộc vào kích thước tin nhắn và thiết bị.

OS message latencies before and after
OS message latencies before and after

Một bản cập nhật hiệu năng cuối cùng nếu bạn đang dùng iOS: Trong bản phát hành này, các ứng dụng Flutter được xây dựng trên Apple Silicon M1 Macs chạy nguyên bản trên trình mô phỏng ARM iOS (#pull/85642). Điều này có nghĩa là không có bản dịch Rosetta giữa hướng dẫn Intel x86_64 và ARM, nó giúp tăng hiệu năng trong quá trình thử nghiệm ứng dụng iOS và cho phép bạn tránh một số vấn đề phức tạp về Rosetta (#74970, #79641). Đây là một bước tiến trên con đường hỗ trợ Flutter cho Apple Silicon.

Dart 2.14: formatting, language features, pub & linting out-of-the-box

Tất nhiên, Flutter sẽ không còn là Flutter nếu không có ngôn ngữ Dart. Bản phát hành Flutter lần này đi kèm với Dart 2.14. Bản phát hành mới của Dart đi kèm với định dạng mới để làm cho các tầng rõ ràng hơn, hỗ trợ pub mới để bỏ qua các tệp và các tính năng ngôn ngữ mới, bao gồm cả sự trở lại của toán tử triple shift huyền thoại. Ngoài ra, và một trong những điều tuyệt vời nhất về Dart 2.14 là bản phát hành này đã tạo ra một bộ lints tiêu chuẩn được chia sẻ giữa các dự án Dart và Flutter mới ra mắt.

`flutter create` comes out of the box with an analysis_options.yaml file pre-populated with recommended Flutter lints
`flutter create` comes out of the box with an analysis_options.yaml file pre-populated with recommended Flutter lints

Không chỉ khi tạo ứng dụng mới mà còn ở những dự án cũ, bạn hoàn toàn có thể thêm lints chỉ với vài step nhỏ. Để biết thông tin chi tiết về các ngôn ngữ này, các tính năng ngôn ngữ mới và hơn thế nữa, hãy xem thông báo phát hành cho Dart 2.14.

Framework: Android full screen, Material You & text editing shortcuts

Bản phát hành Flutter 2.5 bao gồm một số bản sửa lỗi và cải tiến đối với framework. Bắt đầu với Android, Flutter đã khắc phục một loạt các vấn đề liên quan xung quanh chế độ toàn màn hình với gần 100 lượt thích. Bản thân tên của các chế độ làm cho điều này trở thành một trong những tính năng mới yêu thích của Flutter: lean back, sticky, sticky immersive, and edge to edge.

Thay đổi này cũng bổ sung một cách để nghe các thay đổi trên toàn màn hình trong các chế độ khác. Ví dụ: nếu người dùng tương tác với ứng dụng, khi giao diện người dùng hệ thống quay trở lại, các nhà phát triển hiện có thể viết mã của họ để quay lại chế độ toàn màn hình hoặc làm điều gì đó khác.

New Android edge-to-edge mode: normal mode (left), Edge to Edge mode (center), Edge to Edge with a custom SystemUIOverlayStyle (right)
New Android edge-to-edge mode: normal mode (left), Edge to Edge mode (center), Edge to Edge with a custom SystemUIOverlayStyle (right)

Trong bản phát hành này, Flutter tiếp tục xây dựng hỗ trợ cho Material You (còn gọi là v3) mới, bao gồm các cập nhật đối với kích thước và theme của nút floating action (#86441) và trạng thái MaterialState.scrolledUnder mới mà bạn có thể thấy khi thực hiện với mẫu mã trong PR (#79999).

New Material You FAB sizes
New Material You FAB sizes
New MaterialState.scrolledUnder state in action
New MaterialState.scrolledUnder state in action

Và trong khi chúng ta đang nói về chức năng scroll, một cải tiến khác là việc bổ sung scroll metrics notifications (#85221, #85499), cung cấp thông báo về các khu vực có thể scroll ngay cả khi người dùng không scroll. Ví dụ: phần sau cho thấy thanh cuộn xuất hiện hoặc biến mất khi thích hợp dựa trên kích thước cơ bản của ListView:

The new scroll metrics notifications enabling the scrollbar to appear and disappear automatically without scrolling
The new scroll metrics notifications enabling the scrollbar to appear and disappear automatically without scrolling

Trong trường hợp này, bạn không phải viết bất kỳ mã nào nhưng nếu bạn muốn nắm bắt ScrollMetricNotificationchanges, bạn cũng có thể làm được. Giải pháp này đươc đưa ra bởi cộng tác viên xu-baolin.

Một đóng góp tuyệt vời khác từ cộng đồng là việc bổ sung hỗ trợ Material cho ScaffoldMessenger. Bạn có thể nhớ ScaffoldMessenger từ thông báo phát hành Flutter 2.0 như một cách mạnh mẽ hơn để hiển thị SnackBars ở cuối màn hình để cung cấp thông báo cho người dùng. Trong Flutter 2.5, bây giờ bạn có thể thêm banner vào đầu đoạn giới thiệu của mình, banner này vẫn giữ nguyên vị trí cho đến khi người dùng loại bỏ banner đó.

Ứng dụng của bạn có thể nhận được hành vi này bằng cách gọi phương thức showMaterialBanner của ScaffoldMessenger:

class HomePage extends StatelessWidget {
  const HomePage({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) => Scaffold(
        appBar: AppBar(
          title: const Text('The MaterialBanner is below'),
        ),
        body: Center(
          child: ElevatedButton(
            child: const Text('Show MaterialBanner'),
            onPressed: () => ScaffoldMessenger.of(context).showMaterialBanner(
              MaterialBanner(
                content: const Text('Hello, I am a Material Banner'),
                leading: const Icon(Icons.info),
                backgroundColor: Colors.yellow,
                actions: [
                  TextButton(
                    child: const Text('Dismiss'),
                    onPressed: () => ScaffoldMessenger.of(context)
                        .hideCurrentMaterialBanner(),
                  ),
                ],
              ),
            ),
          ),
        ),
      );
}

Hướng dẫn Material cho banner nêu rõ rằng ứng dụng của bạn chỉ nên hiển thị một banner tại một thời điểm, vì vậy nếu ứng dụng của bạn gọi showMaterialBanner nhiều lần, ScaffoldMessenger sẽ duy trì một hàng đợi, hiển thị từng banner mới khi banner trước đó bị loại bỏ. Cảm ơn Calamity210 vì sự bổ sung tuyệt vời này cho hỗ trợ Material trong Flutter!

Phát triển thêm trên Flutter 2.0 về các tính năng chỉnh sửa văn bản mới của nó, như các điểm xoay chuyển lựa chọn văn bản và có thể ngừng truyền sự kiện bàn phím sau khi nó được xử lý. Trong bản phát hành này, Flutter đã thêm khả năng làm cho các phím tắt chỉnh sửa văn bản có thể ghi đè.

Bạn có thể dùng Ctrl-A để thực hiện tùy chỉnh thay vì chọn tất cả văn bản. Lớp DefaultTextE EditShortcuts chứa danh sách mọi phím tắt được Flutter hỗ trợ trên mỗi nền tảng. Nếu bạn muốn ghi đè bất kỳ thứ gì, hãy sử dụng Shortcuts widget hiện có của Flutter để sửa lại bất kỳ phím tắt nào cho mục đích hiện tại hoặc mục đích tùy chỉnh. Bạn có thể đặt widget đó ở bất kỳ đâu trong widget tree mà bạn muốn áp dụng ghi đè.

Plugins: camera, image picker & plus plugins

Một plugin khác được cải tiến rất nhiều đó chính là plugin camera:

  • 3795 [camera] android-rework part 1: Base classes to support Android Camera features
  • 3796 [camera] android-rework part 2: Android auto focus feature
  • 3797 [camera] android-rework part 3: Android exposure related features
  • 3798 [camera] android-rework part 4: Android flash and zoom features
  • 3799 [camera] android-rework part 5: Android FPS range, resolution and sensor orientation features
  • 4039 [camera] android-rework part 6: Android exposure- and focus point features
  • 4052 [camera] android-rework part 7: Android noise reduction feature
  • 4054 [camera] android-rework part 8: Supporting modules for final implementation
  • 4010 [camera] Do not trigger flat device orientation on iOS
  • 4158 [camera] Fix coordinate rotation for setting focus- and exposure points on iOS
  • 4197 [camera] Fix camera preview not always rebuilding on orientation change
  • 3992 [camera] Prevent crash when setting unsupported FocusMode
  • 4151 [camera] Introduce camera_web package

Cũng có rất nhiều công việc trên plugin image_picker tập trung vào trải nghiệm máy ảnh end-to-end:

  • 3898 [image_picker] Image picker fix camera device
  • 3956 [image_picker] Change storage location for camera captures to internal cache on Android, to comply with new Google Play storage requirements
  • 4001 [image_picker] Removed redundant request for camera permission
  • 4019 [image_picker] Fix rotation when camera is a source

Công việc này cải thiện chức năng và độ mạnh của các plugin camera và image_picker cho Android. Ngoài ra, bạn sẽ nhận thấy phiên bản đầu tiên của plugin camera có sẵn với hỗ trợ web. Bản xem trước này cung cấp hỗ trợ cơ bản để xem trước camera, chụp ảnh, sử dụng đèn flash và điều khiển thu phóng, tất cả đều trên web. Nó hiện không phải là một plugin được chứng thực, vì vậy bạn sẽ cần phải thêm nó một cách rõ ràng để được sử dụng trong ứng dụng web của mình.

Công việc viết lại máy ảnh Android ban đầu do các acoutts đóng góp. Công việc camera và image_picker đã được Baseflow, một công ty tư vấn chuyên về Flutter và nổi tiếng với các gói riêng của họ trên pub.dev, phát triển. Công việc camera_web phần lớn được thực hiện bởi Very Good Ventures, một công ty tư vấn Flutter có trụ sở tại Hoa Kỳ. Rất cám ơn tất cả các bạn đã đóng góp cho cộng đồng Flutter!

Một đóng góp cộng đồng có giá trị khác là của tổ chức Cộng đồng Flutter, được biết đến với các plugin "plus". Với bản phát hành Flutter này, mỗi plugin tương ứng từ nhóm Flutter hiện mang một đề xuất giống như đề xuất này cho pin:

Hơn nữa, vì các plugin này không còn được bảo trì nữa nên chúng không còn được đánh dấu là plugin Yêu thích của Flutter. Nếu bạn vẫn còn sử dụng, chúng tôi khuyên bạn nên chuyển sang các phiên bản plus của các plugin sau:

Flutter DevTools: performance, Widget inspector, & polish

Bản phát hành Flutter này đi kèm với một số cải tiến đối với Flutter DevTools. Đầu tiên và quan trọng nhất là hỗ trợ bổ sung trong DevTools để tận dụng các bản cập nhật engine (#26205, #26233, #26237, #26970, #27074, #26617)

Một tập hợp các bản cập nhật này cho phép Flutter thực hiện tốt hơn việc liên kết các sự kiện theo dõi với các frame cụ thể, giúp các nhà phát triển xác định lý do tại sao một frame có thể vượt quá ngân sách. Bạn có thể thấy điều này được phản ánh trong biểu đồ DevTools Frames đã được xây dựng lại để sống động hơn; frame được điền trong biểu đồ này khi chúng được hiển thị trong ứng dụng của bạn. Việc chọn một frame từ biểu đồ này sẽ điều hướng đến các sự kiện dòng thời gian cho frame đó:

Công cụ Flutter hiện cũng xác định các sự kiện biên dịch shader trong dòng thời gian. Flutter DevTools sử dụng các sự kiện này để giúp bạn chẩn đoán lỗi biên dịch shader trong ứng dụng của mình.

DevTools detecting lost frames due to shader compilation
DevTools detecting lost frames due to shader compilation

Với tính năng mới này, DevTools phát hiện khi bạn mất frames để biên dịch shader để bạn có thể khắc phục sự cố. Để chạy ứng dụng của bạn như thể đây là lần đầu tiên (trước khi shader cache được phổ biến như đối với bất kỳ người dùng nào), hãy sử dụng flutter run với cờ -purge-persistent-cache.

Thao tác này sẽ xóa bộ nhớ cache để đảm bảo bạn đang tái tạo môi trường mà người dùng nhìn thấy cho trải nghiệm "first run" hoặc "re-open" (iOS). Tính năng này vẫn đang được phát triển, vì vậy vui lòng gửi các vấn đề cho các vấn đề bạn tìm thấy hoặc cho bất kỳ cải tiến nào mà Flutter có thể thực hiện để giúp gỡ lỗi jank biên dịch shader.

Ngoài ra, khi theo dõi các vấn đề về hiệu năng CPU trong ứng dụng của mình, bạn có thể đã bị đưa vào profiling data từ các thư viện Dart và Flutter và / hoặc native code của công cụ. Nếu bạn muốn tắt bất kỳ điều nào trong số này để tập trung vào code của riêng mình, bạn có thể làm điều đó với tính năng CPU Profiler mới (# 3236) cho phép bạn ẩn thông tin hồ sơ khỏi bất kỳ nguồn nào trong số này.

Đối với bất kỳ danh mục nào bạn không lọc ra, chúng hiện đã được mã hóa màu (# 3310, # 3324) để bạn có thể dễ dàng xem các phần của Biểu đồ frame CPU đến từ những phần nào của hệ thống.

Colored frame chart to identify app vs. native vs. Dart vs. Flutter code activities in your app
Colored frame chart to identify app vs. native vs. Dart vs. Flutter code activities in your app

Hiệu năng không phải là điều duy nhất bạn muốn debug. Bản phát hành DevTools này đi kèm với bản cập nhật cho Widget Inspector cho phép bạn di chuột qua widget để đánh giá object, xem properties, trạng thái widget, v.v.

Hiệu năng không phải là điều duy nhất bạn muốn debug. Bản phát hành DevTools này đi kèm với bản cập nhật cho Widget Inspector cho phép bạn di chuột qua widget để đánh giá object, xem properties, trạng thái widget, v.v.

Khi bị tạm dừng tại một breakpoint, bạn cũng có thể đánh giá các biểu thức từ console.

Ngoài các tính năng mới, Widget Inspector đã được nâng cấp. Để biến DevTools trở thành nơi hữu ích hơn để hiểu và debug các lỗi trong ứng dụng Flutter của bạn, chúng tôi đã hợp tác với Codemate, một cơ quan công nghệ sáng tạo ở Phần Lan, để thực hiện một số cập nhật.

Trong ảnh chụp màn hình này, bạn có thể thấy những thay đổi sau:

  • Giao tiếp tốt hơn với các nút debug toggle - những nút đó có các biểu tượng mới, nhãn hướng tác vụ, cũng như các chú giải công cụ phong phú mô tả những gì chúng làm và khi nào sử dụng chúng. Mỗi chú giải công cụ liên kết thêm đến tài liệu chi tiết về tính năng.
  • Dễ dàng hơn để quét và định vị các widget mà bạn quan tâm - các widget thường được sử dụng từ frame Flutter hiện hiển thị các biểu tượng trong chế độ xem dạng widget tree ở phía bên trái của inspector. Chúng được mã hóa thêm màu dựa trên danh mục của chúng. Ví dụ: các widget bố cục được hiển thị bằng màu xanh lam trong khi các widget nội dung được hiển thị bằng màu xanh lục. Hơn nữa, mỗi Text widget hiển thị bản xem trước nội dung của nó.
  • Căn chỉnh sơ đồ màu của trình khám phá bố cục và widget tree - giờ đây việc xác định cùng một widget từ trình khám phá bố cục và widget tree trở nên dễ dàng hơn. Ví dụ: widget "Column" trong ảnh chụp màn hình bên dưới có nền màu xanh lam trong trình khám phá bố cục và nó có biểu tượng màu xanh lam trong chế độ xem dạng widget tree.

IntelliJ/Android Studio: integration tests, test coverage, and icon previews

Plugin IntelliJ / Android Studio cho Flutter cũng đã trải qua một số cải tiến với bản phát hành này, bắt đầu với khả năng chạy các bài kiểm tra tích hợp (# 5459). Kiểm tra tích hợp là kiểm tra toàn bộ ứng dụng chạy trên một thiết bị, nằm trong thư mục integration_test và sử dụng cùng chức năng testWidgets () từ các bài kiểm tra đơn vị tiện ích.

Integration testing your Flutter app in IntelliJ/Android Studio
Integration testing your Flutter app in IntelliJ/Android Studio

Để thêm một kiểm tra tích hợp vào dự án của bạn, hãy làm theo hướng dẫn trên flutter.dev. Để kết nối bài kiểm tra với IntelliJ hoặc Android Studio, hãy thêm cấu hình chạy để khởi chạy các bài kiểm tra tích hợp và kết nối thiết bị để kiểm tra sử dụng. Chạy cấu hình cho phép bạn chạy thử nghiệm, bao gồm thiết lập các điểm ngắt, bước, v.v.

Ngoài ra, plugin IJ / AS mới nhất cho Flutter cho phép bạn xem thông tin về phạm vi cho cả chạy thử nghiệm đơn vị và thử nghiệm tích hợp. Bạn có thể truy cập vào phần này từ nút trên thanh công cụ bên cạnh nút "Debug":

Thông tin về phạm vi được hiển thị bằng cách sử dụng các thanh màu đỏ và xanh lá cây trong rãnh của trình chỉnh sửa. Trong ví dụ này, dòng 9–13 đã được kiểm tra, nhưng dòng 3 và 4 thì không.

Bản phát hành mới nhất cũng bao gồm khả năng mới để xem trước các biểu tượng được sử dụng từ các gói từ pub.dev được xây dựng xung quanh các tệp phông chữ TrueType (# 5504, # 5595, # 5677, # 5704), giống như các biểu tượng Material và Cupertino hỗ trợ xem trước.

Icon preview in IntelliJ/Android Studio
Icon preview in IntelliJ/Android Studio

Để bật xem trước biểu tượng, bạn cần cho plugin biết gói nào bạn đang sử dụng. Có một trường văn bản mới trong trang cài đặt / tùy chọn plugin:

Lưu ý rằng điều này hoạt động đối với các biểu tượng được xác định là hằng số tĩnh trong một lớp, như được hiển thị trong mã mẫu trong ảnh chụp màn hình. Nó sẽ không hoạt động đối với các biểu thức, chẳng hạn như LineIcons.addressBook () hoặc LineIcons.values ['code']. Nếu bạn là tác giả của gói biểu tượng KHÔNG hoạt động với tính năng này, vui lòng tạo một issue.

Có rất nhiều bản cập nhật khác cho plugin IntelliJ / Android Studio cho Flutter mà bạn có thể đọc trong ghi chú phát hành sau:

Visual Studio Code: dependencies, Fix All, and Test Runner

Plugin Visual Studio Code cho Flutter cũng đã được cải thiện trong bản phát hành này, bắt đầu bằng hai lệnh mới "Dart: Add Dependency" và "Dart: Add Dev Dependency" (# 3306, # 3474).

Adding a Dart dependency in Visual Studio Code
Adding a Dart dependency in Visual Studio Code

Các lệnh này cung cấp chức năng giống như plugin Pubspec Assist của Jeroen Meijer đã được cung cấp một thời gian.

Bạn cũng có thể quan tâm đến lệnh "Fix All" (# 3445, # 3469) có sẵn cho tệp Dart và có thể khắc phục tất cả các vấn đề tương tự như sửa lỗi dart cho tệp đang mở hiện tại trong một bước.

Using Flutter Fix rules to fix all known issues in your code
Using Flutter Fix rules to fix all known issues in your code

Điều này cũng có thể được đặt để chạy khi lưu bằng cách thêm source.fixAll vào cài đặt editor.codeActionsOnSave VS Code.

Hoặc, nếu bạn muốn dùng thử tính năng xem trước, bạn có thể bật cài đặt dart.previewVsCodeTestRunner và xem các thử nghiệm Dart và Flutter chạy qua trình chạy thử nghiệm Visual Studio Code mới.

Using the new Visual Studio Code test runner test your Dart and Flutter code
Using the new Visual Studio Code test runner test your Dart and Flutter code

Trình chạy thử nghiệm Visual Studio Code trông hơi khác so với trình chạy thử nghiệm Dart và Flutter hiện tại và sẽ duy trì kết quả qua các phiên. Trình Visual Studio Code test runner cũng thêm các biểu tượng gutter mới hiển thị trạng thái cuối cùng của bài test có thể được nhấp để chạy kiểm tra (hoặc nhấp chuột phải cho context menu).

Trong các phiên bản sắp tới, trình chạy thử nghiệm Dart và Flutter hiện có sẽ bị xóa để thay thế cho trình chạy thử nghiệm Visual Studio Code mới.

Và đây chỉ là phần nổi của tảng băng chìm với các tính năng và bản sửa lỗi mới của Visual Studio Code. Để biết tất cả các chi tiết, hãy xem ghi chú phát hành:

  • v3.26 VS Code Test Runner integration, Flutter Create Settings, …
  • v3.25 Additional Dependency Management improvements, Fix All in File / On-Save, …
  • v3.24 Dependencies tree improvements, Easier launch configurations, Editor improvements
  • v3.23 Profile Mode improvements, Improved dependencies tree, LSP improvements

Tools: exceptions, new app template & Pigeon 1.0

Trong các phiên bản trước của Flutter, bạn có thể đã cảm thấy thất vọng bởi các ngoại lệ mà bạn mong đợi không được xử lý để bạn có thể kích hoạt trình debugger và tìm ra nơi chúng bắt nguồn. Framework Flutter đã không cho phép ngoại lệ thông qua để kích hoạt "unhandled expectation"xử lý trong trình debugger.

Trong bản phát hành này, debuggers hiện đã phá vỡ một cách chính xác các ngoại lệ chưa được xử lý mà trước đó đã bị bắt bởi framework (# 17007). Điều này cải thiện trải nghiệm gỡ lỗi vì trình debugger hiện có thể chỉ trực tiếp đến dòng code sai thay vì trỏ đến một dòng ngẫu nhiên sâu trong framework. Một tính năng mới có liên quan cho phép bạn quyết định liệu FutureBuilder có nên phát triển lại hay dấu lỗi (# 84308). Điều này sẽ cung cấp cho bạn một số lượng lớn các ngoại lệ bổ sung để giúp theo dõi các issue trong ứng dụng Flutter của bạn.

Kể từ những ngày đầu của Flutter, đã có mẫu Counter app. Nó có nhiều điểm tốt: thể hiện nhiều tính năng của ngôn ngữ Dart, thể hiện một số khái niệm Flutter chính và nó đủ nhỏ để vừa với một tệp duy nhất, ngay cả với rất nhiều của các ý kiến giải thích. Tuy nhiên, những gì nó không làm được đó là cung cấp một điểm khởi đầu đặc biệt tốt cho một ứng dụng Flutter trong thế giới thực. Trong bản phát hành này, có một mẫu mới (# 83530) có sẵn thông qua lệnh sau:

$ flutter create -t skeleton my_app

The new Flutter skeleton template in action
The new Flutter skeleton template in action

Mẫu skeleton tạo ra List View Flutter app với hai trang (với Chế độ xem chi tiết) tuân theo các phương pháp hay nhất của cộng đồng. Nó được phát triển với rất nhiều đánh giá từ bên trong và bên ngoài. Từ đó cung cấp cơ sở tốt hơn cho việc xây dựng một ứng dụng chất lượng. Nó hỗ trợ các tính năng sau:

  • Sử dụng ChangeNotifier để điều phối nhiều widgets
  • Tạo localizations theo mặc định bằng cách sử dụng tệp arb
  • Bao gồm một hình ảnh mẫu và thiết lập các thư mục 1x, 2x và 3x cho nội dung hình ảnh
  • Sử dụng tổ chức thư mục "feature-first"
  • Hỗ trợ các tùy chọn được chia sẻ
  • Hỗ trợ theme sáng và tối
  • Hỗ trợ điều hướng giữa nhiều trang

Theo thời gian, khi các phương pháp hay nhất của Flutter phát triển, hãy mong đợi template mới này sẽ phát triển theo chúng.

Nếu bạn đang phát triển một plugin chứ không phải một ứng dụng, bạn có thể quan tâm đến bản phát hành 1.0 của Pigeon. Pigeon là một codegen tool để tạo code tương tác an toàn kiểu chữ giữa Flutter và nền tảng máy chủ của nó. Nó cho phép bạn xác định mô tả về API của plugin của bạn và tạo skeleton code cho Dart, Java và Objective-C (tương ứng có thể truy cập vào Kotlin và Swift).

Sample generated Pigeon code
Sample generated Pigeon code

Pigeon đã được sử dụng trong một số plugin của nhóm Flutter. Với bản phát hành này, cung cấp nhiều thông báo lỗi hữu ích hơn, hỗ trợ thêm cho generic, kiểu dữ liệu primitive dưới dạng tham số và kiểu trả về cũng như đa tham số, hy vọng nó sẽ được sử dụng nhiều hơn trong tương lai. Nếu bạn muốn tận dụng lợi thế của Pigeon trong các dự án bổ trợ hoặc plugin của riêng mình, bạn có thể tìm hiểu thêm thông tin tại trang plugin của pigeon.

Breaking changes & deprecations

Sau đây là những thay đổi đột phá trong bản phát hành Flutter 2.5:

Để biết danh sách đầy đủ các thay đổi đáng chú ý kể từ bản phát hành 1.17, xem flutter.dev.

Khi Flutter tiếp tục cập nhật Flutter Fix (có sẵn trong IDE của bạn và thông qua lệnh dart fix), Flutter có tổng cộng 157 quy tắc để tự động di chuyển mã của bạn bị ảnh hưởng bởi những thay đổi vi phạm này hoặc trước đây, cũng như bất kỳ trường hợp không dùng nữa. Như mọi khi, rất cảm ơn cộng đồng đã đóng góp các thử nghiệm, họ giúp chúng tôi xác định những thay đổi đột phá này. Để tìm hiểu thêm, hãy xem chính sách thay đổi vi phạm của chúng tôi.

Ngoài ra, với bản phát hành Flutter 2.5, chúng tôi sẽ ngừng hỗ trợ cho iOS 8 như được công bố vào tháng 9 năm 2020. Việc bỏ hỗ trợ cho iOS 8, vốn có ít hơn 1% thị phần, cho phép nhóm Flutter tập trung vào các nền tảng mới với mức độ sử dụng rộng rãi hơn. Ngừng sử dụng có nghĩa là các nền tảng này có thể hoạt động nhưng chúng tôi sẽ không thử nghiệm các phiên bản mới của Flutter hoặc các plugin trên các nền tảng này. Bạn có thể xem danh sách các nền tảng Flutter hiện được hỗ trợ trên Flutter.dev.

Hãy theo dõi để biết thêm thông tin cập nhật về Flutter!

Nguồn: What's new in Flutter 2.5

Bài viết liên quan

[FREE EBOOK] TIPS & TRICKS GIÚP X3 TỐC ĐỘ CODE FLUTTER CỦA BẠN

Cuốn ebook "TIPS & TRICKS GIÚP X3 TỐC ĐỘ CODE FLUTTER CỦA BẠN" chỉ ra 32 trường hợp giúp bạn code nhanh hơn so với việc code thông thường...

[FREE EBOOK] TIPS & TRICKS GIÚP X3 TỐC ĐỘ CODE FLUTTER CỦA BẠN
Tìm hiểu Flutter Opacity Widget qua ví dụ cơ bản

Bài viết sau sẽ giới thiệu một cách tổng quan về Opacity widget và cung cấp đoạn code để bạn có thể tự thực hành thông qua những ví dụ cơ bản....

Tìm hiểu Flutter Opacity Widget qua ví dụ cơ bản
Flutter Tutorial 2021 #34 - Hướng dẫn tạo hiệu ứng "fancy" khi chuyển màn hình

Thêm một hiệu ứng mới nữa mà các bạn sẽ được giới thiệu tới! Đó chính là hiệu ứng "fancy" khi chuyển màn hình. Hiệu ứng này sẽ giúp tăng trải nghiệm và gây ấn tượng cực mạnh với người dùng....

Flutter Tutorial 2021 #34 - Hướng dẫn tạo hiệu ứng "fancy" khi chuyển màn hình
Flutter Tutorial 2021 #33 - "Giao tiếp" giữa 2 màn hình bất kỳ trong Flutter

Làm sao để giao tiếp 2 hoặc 3, 4 màn hình trong app với nhau? Chúng ta cùng xem video bên dưới để hiểu được cách truyền dữ liệu từ màn hình A sang màn hình B và ngược lại nhé!...

Flutter Tutorial 2021 #33 - "Giao tiếp" giữa 2 màn hình bất kỳ trong Flutter
Flutter Tutorial 2021 #32 - Giới thiệu Navigation trong Flutter

Trong video lần này bạn sẽ được giới thiệu một khái niệm mới. Đó chính là navigation. Vậy Navigation là gì? Cùng tìm hiểu video dưới đây nhé!...

Flutter Tutorial 2021 #32 - Giới thiệu Navigation trong Flutter
You've successfully subscribed to 200Lab Blog
Great! Next, complete checkout for full access to 200Lab Blog
Xin chào mừng bạn đã quay trở lại
OK! Tài khoản của bạn đã kích hoạt thành công.
Success! Your billing info is updated.
Billing info update failed.
Your link has expired.