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

Flutter animation basics with implicit animations

 


Trong loạt bài đăng này, chúng tôi sẽ giới thiệu với bạn về hoạt ảnh trong Flutter và hướng

dẫn bạn cách tạo cả hoạt ảnh đơn giản và phức tạp cho ứng dụng Flutter của bạn.

Trong bài đăng đầu tiên này, chúng tôi sẽ tập trung vào cách đơn giản nhất để thêm hoạt ảnh vào ứng dụng của bạn. Bạn không cần phải là một chuyên gia về hoạt ảnh hoặc thuật ngữ hoạt ảnh để thêm hoạt ảnh vào ứng dụng của mình. Đồng thời, chúng tôi sẽ giới thiệu một số tiện ích và thuật ngữ sẽ giúp bạn bắt đầu với hoạt ảnh ngay lập tức và cung cấp cho bạn một số thông tin cơ bản cho phần còn lại của các bài đăng trong chuỗi.


1. Implicitly animated widgets


Flutter bao gồm một loạt tiện ích con là phiên bản động của các tiện ích con hiện có mà bạn có thể đã sử dụng trong ứng dụng của mình, chẳng hạn như phiên bản AnimatedContainer của tiện ích con Container và phiên bản AnimatedPositioned của tiện ích Positioned.

Các widget này tự động tạo hoạt ảnh cho các thay đổi đối với thuộc tính của chúng. Khi bạn xây dựng lại tiện ích con với các giá trị thuộc tính mới, chẳng hạn như với setState của StatefulWidget, tiện ích con sẽ xử lý việc điều khiển hoạt ảnh từ giá trị trước đó sang giá trị mới.


Các widget này được gọi là Implicitly Animated Widgets. Chúng thường là thứ đầu tiên bạn

tiếp cận khi cần thêm hoạt ảnh vào ứng dụng của mình. Chúng cung cấp một cách để

thêm hình ảnh động mà không làm tăng thêm độ phức tạp.

2. The AnimatedContainer widget

Hãy xem xét kỹ hơn một chút về cách bạn có thể sử dụng một trong những tiện ích con hoạt hình ngầm này để thêm một số hoạt ảnh vào ứng dụng của mình.

Trong ứng dụng này, có một vùng chứa và một nút. Khi nhấn nút, setState được gọi và vùng chứa được tạo lại với giá trị mới cho chiều rộng. Lưu ý rằng vùng chứa thay đổi chiều rộng của nó ngay lập tức mà không có bất kỳ hoạt ảnh nào.



@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width: _bigger ? 100 : 500,
child: Image.asset('assets/star.png'),
),
RaisedButton(
onPressed: () => setState(() {
_bigger = !_bigger;
}),
child: Icon(Icons.star),
),
],
);
}

Chúng ta có thể thêm một số hoạt ảnh vào ứng dụng này bằng cách chuyển tiện ích Container thành tiện ích AnimatedContainer và chỉ định thời lượng hoạt ảnh.

AnimatedContainer(
width: _bigger ? 100 : 500,
child: Image.asset('assets/star.png'),
duration: Duration(seconds: 1),
),

Bây giờ, khi nút được nhấn, container chuyển dần từ giá trị chiều rộng trước đó sang giá trị mới.



Quá trình chuyển động thông qua các giá trị giữa giá trị cũ và giá trị mới được gọi là interpolation. AnimatedContainer xử lý nội suy các thuộc tính của nó giữa các giá trị cũ và mới bất cứ khi nào chúng thay đổi.


Điều này áp dụng cho tất cả các thuộc tính của AnimatedContainer, bao gồm, ví dụ: decoration. Chúng ta có thể sửa đổi gradient trong một trang trí và AnimatedContainer xử lý nội suy giữa gradient cũ và mới:


AnimatedContainer(
decoration: BoxDecoration(
gradient: RadialGradient(
colors: [Colors.purple, Colors.transparent],
stops: [ _bigger ? 0.2 : 0.5, 1.0])
),
),



3. Controlling the animation with duration and curves


Các tiện ích con hoạt ảnh ngầm như AnimatedContainer có hai thuộc tính mà bạn có thể sử dụng để kiểm soát hành vi của hoạt ảnh. Bạn có thể kiểm soát khoảng thời gian cần thiết để nội suy thành giá trị mới bằng cách đặt duration ​property..


AnimatedContainer(
width: _bigger ? 100 : 500,
child: Image.asset('assets/star.png'),
duration: Duration(seconds: 5),
),

Trong ví dụ này, chúng tôi đã làm cho hoạt ảnh mất nhiều thời gian hơn.


Bạn cũng có thể kiểm soát cách tiện ích con nội suy từ giá trị cũ sang giá trị mới bằng cách sử dụng Curve. Các đường cong kiểm soát tốc độ thay đổi theo thời gian và có thể giúp hoạt ảnh của bạn cảm thấy thực tế hơn. Trong ví dụ này, chúng tôi đã thay đổi đường cong từ đường cong tuyến tính mặc định thành đường cong ngũ vị phóng đại hơn:


AnimatedContainer(
width: _bigger ? 100 : 500,
child: Image.asset('assets/star.png'),
duration: Duration(seconds: 1),
curve: Curves.easeInOutQuint,
),

Có nhiều built-in Curves sẵn khác nhau để mang lại cho hình ảnh động của bạn một chút đặc trưng và bạn cũng có thể xác định các đường cong tùy chỉnh của riêng mình. Các đường cong thậm chí có thể không liên tục, như SawTooth curve.


Dưới đây là một ví dụ về đường cong tùy chỉnh được gọi là SineCurve sử dụng hàm sin để tạo đường cong bị trả lại:


class SineCurve extends Curve {
final double count;
SineCurve({this.count = 1});
@override
double transformInternal(double t) {
return sin(count * 2 * pi * t) * 0.5 + 0.5;
}
}

Ở đây, SineCurve làm cho ngôi sao nảy lên và xuống:



4. To recap


Flutter cung cấp các widget động ngầm là các phiên bản động của các widget thông thường. Bạn có thể kiểm soát cách các widget này tạo hoạt ảnh bằng cách sử dụng thời lượng và đường cong.


AnimatedContainer là một widget hoạt hình ngầm mạnh mẽ đáng chú ý vì nó có nhiều thuộc tính ảnh hưởng đến sự xuất hiện của nó và tất cả chúng đều được nội suy tự động.


Tất cả các widget hoạt ảnh ngầm khác cũng là những tùy chọn mạnh mẽ, dễ sử dụng để thêm hoạt ảnh mà không cần thêm nhiều phức tạp.


Ngoài ra, bạn không nhất thiết phải đặt các tiện ích này vào Stateful Widget và sử dụng setState, bạn có thể sử dụng StreamBuilderFutureBuilder để kích hoạt các hoạt ảnh như trong ví dụ này.


5. Digging deeper into animations


Tuy nhiên, các tiện ích con hoạt hình hoàn toàn là lựa chọn đầu tiên của bạn để thêm hoạt ảnh, tuy nhiên, đây không phải là tất cả những gì mà hệ thống hoạt ảnh của Flutter cung cấp. Trong phần còn lại của loạt bài này, chúng tôi khám phá các lớp thấp hơn của hệ thống hoạt ảnh Flutter và chỉ cho bạn cách bạn có thể tạo hoạt ảnh nâng cao bằng cách sử dụng trực tiếp hệ thống hoạt ảnh.


Đối với mọi thứ khác, hãy truy cập flut.dev.


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...

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 đó ...

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ử...