Cảm ơn câu hỏi của bạn. Câu hỏi thú vị lắm. Nó lại giúp mình có ý tưởng cho 1 bài viết mới về Flutter Performance. Nhưng có lẽ sẽ ở phần nâng cao. Vì quan điểm của mình trong việc học là "Make it work then make it better", ban đầu cứ làm mọi cách để code cho chạy và hiểu vì sao code chạy rồi mới nghĩ đến việc tối ưu code. Tạm thời cứ sử dụng cách nào cũng được nhé
2 thằng này mỗi thằng đều có ưu nhược điểm riêng. Nếu như sử dụng method thì code có vẻ gọn hơn nhưng bù lại performance có thể sẽ kém hơn cách dùng class. Bởi vì khi sử dụng class, giả sử class tên là WidgetABC chẳng hạn, bạn có thể khởi tạo WidgetABC đó với từ khóa const. Ở bài 2 mình có nói là khi widget cha rebuild nó sẽ rebuild mấy thằng con của nó luôn. Nhưng khi sử dụng const để khai báo widget thì mỗi lần widget cha rebuild nó sẽ ko rebuild mấy child widget được khai báo const. Như vậy performance sẽ tốt hơn khi sử dụng method (100% rebuild).
Thứ 2 mình thấy 1 ưu điểm khi sử dụng class nữa là tính tái sử dụng. Ví dụ trong 1 dự án thường các button sẽ có style na ná nhau, bạn tạo 1 class widget đặt tên là MyLovelyButton rồi ở bất cứ màn hình nào cũng chỉ cần khai báo MyLovelyButton() là sử dụng đc.
Bạn có thể nói rõ hơn về tạo trait haspermissions được ko? Sẽ tạo thư mục App\Trait rồi tạo class trait hay như nào, đoạn này bạn viết gọn quá ko hiểu.
Cảm ơn bài viết của bạn, hiện tại mình đang làm Quản trị mạng và Hệ thống, trước cũng có học Python cơ bản, liệu có hướng đi nào với ngôn ngữ này liên quan tới ngành mình không? Trong bài bạn có nhắc tới phát triển Internet, hy vọng bạn có thể chia sẻ thêm về lĩnh vực này.
"Ta tạo một module ErrorHandler trong file error_handler.rb để xử lý error và để nó trong lib/errors sau đó bạn include vào ApplicationController"
Đoạn này mình nhớ là rails nó sẽ xử lý module đúng với tên thư mục. Có nghĩa là phải tạo đường dẫn lib/error/error_handler.rb (bỏ "s").
Cảm ơn bạn đã đóng góp ý kiến cho bài viết của mình. Bài viết lần này mình chỉ tóm gọn lại để dễ dàng hiểu nhất có thể. Thật sự đi sâu vào thì còn rất nhiều thứ để nói . Góp ý của bạn cũng là cảm hứng để mình viết bài tiếp theo về element và key của widget và khi nào stateful sẽ rebuild, khi nào tái sử dụng .Một lần nữa xin chân thành cảm ơn bạn nhé!
@kekedaine Mình thấy họ chỉ zoom ảnh lên khi overscroll, cái này bạn hoàn toàn có thể làm được bằng cách bắt sự kiện scroll của ListView (có thể dùng NotificationListener hoặc ScrollController), sau đó dựa vào value khi scroll mà zoom ảnh lên hay trả lại như cũ thôi
Khi hàm build chạy thì cả stateless widget và stateful widget đều rebuild, không phải là stateful widget còn sống , nó cũng chết . Khác nhau ở hàm build giữa stl vs stf là stateless sẽ rebuild cả element mà nó tạo ra, còn stateful sẽ check các điều kiện xem có cần rebuild lại Element không hay là tái sử dụng.
MyApp không nhất thiết phải là stateful widget. MyApp chuyển thành statelessWidget, còn ColumnWidget chuyển thành stateful Widget thì sẽ không bị rebuild toàn bộ Widget tree .
THẢO LUẬN
Cảm ơn câu hỏi của bạn. Câu hỏi thú vị lắm. Nó lại giúp mình có ý tưởng cho 1 bài viết mới về Flutter Performance. Nhưng có lẽ sẽ ở phần nâng cao. Vì quan điểm của mình trong việc học là "Make it work then make it better", ban đầu cứ làm mọi cách để code cho chạy và hiểu vì sao code chạy rồi mới nghĩ đến việc tối ưu code. Tạm thời cứ sử dụng cách nào cũng được nhé
2 thằng này mỗi thằng đều có ưu nhược điểm riêng. Nếu như sử dụng method thì code có vẻ gọn hơn nhưng bù lại performance có thể sẽ kém hơn cách dùng class. Bởi vì khi sử dụng class, giả sử class tên là WidgetABC chẳng hạn, bạn có thể khởi tạo WidgetABC đó với từ khóa
const. Ở bài 2 mình có nói là khi widget cha rebuild nó sẽ rebuild mấy thằng con của nó luôn. Nhưng khi sử dụng const để khai báo widget thì mỗi lần widget cha rebuild nó sẽ ko rebuild mấy child widget được khai báo const. Như vậy performance sẽ tốt hơn khi sử dụng method (100% rebuild).Thứ 2 mình thấy 1 ưu điểm khi sử dụng class nữa là tính tái sử dụng. Ví dụ trong 1 dự án thường các button sẽ có style na ná nhau, bạn tạo 1 class widget đặt tên là
MyLovelyButtonrồi ở bất cứ màn hình nào cũng chỉ cần khai báoMyLovelyButton()là sử dụng đc.@ngosytruong bạn cho mình thông tin liên hệ nhé, mình cần thuê bạn việc liên quan đến TF này, info mình skype ntquang.info hoặc zalo 0905013777
Bạn có thể nói rõ hơn về tạo trait haspermissions được ko? Sẽ tạo thư mục App\Trait rồi tạo class trait hay như nào, đoạn này bạn viết gọn quá ko hiểu.
Cứ tiếp tục viết nhé. Tôi thích cách viết bài bản, diễn đạt để có thể hình dung chứ không nhất thiết theo document của bạn.
Cảm ơn bài viết của bạn, hiện tại mình đang làm Quản trị mạng và Hệ thống, trước cũng có học Python cơ bản, liệu có hướng đi nào với ngôn ngữ này liên quan tới ngành mình không? Trong bài bạn có nhắc tới phát triển Internet, hy vọng bạn có thể chia sẻ thêm về lĩnh vực này.
"Ta tạo một module ErrorHandler trong file error_handler.rb để xử lý error và để nó trong lib/errors sau đó bạn include vào ApplicationController" Đoạn này mình nhớ là rails nó sẽ xử lý module đúng với tên thư mục. Có nghĩa là phải tạo đường dẫn lib/error/error_handler.rb (bỏ "s").
nếu thế thì lại bình thường quá ạ.m đang muốn ko redirect trang login ấy. Mong muốn là nó auto login đc cơ ạ
Cảm ơn bạn đã đóng góp ý kiến cho bài viết của mình. Bài viết lần này mình chỉ tóm gọn lại để dễ dàng hiểu nhất có thể. Thật sự đi sâu vào thì còn rất nhiều thứ để nói
. Góp ý của bạn cũng là cảm hứng để mình viết bài tiếp theo về element và key của widget và khi nào stateful sẽ rebuild, khi nào tái sử dụng .Một lần nữa xin chân thành cảm ơn bạn nhé!
Cảm ơn 2 bạn @tiennguyen98 và @longvt1912 đã giúp đỡ ạ!
Cảm ơn a đã rep ạ. ko ạ, tức là bên app dùng webview a,nhưng cái page đó cần đăng nhập mới vào đc. e muốn khi mở webview thì auto login ấy ạ
Mình tiêu đề nên đổi lại thành "Giải thích về sự phát triển của webpack cho khủng long" thì đúng hơn.
Allure report á bạn
Attribute contenteditable hìn hò ghê
Link Events cho bạn nào cần :3
https://stackoverflow.com/questions/1391278/contenteditable-change-events
Oh. Hỉu rùi. Tks bạn @nguyen.thanh.minhb
@kekedaine Mình thấy họ chỉ zoom ảnh lên khi overscroll, cái này bạn hoàn toàn có thể làm được bằng cách bắt sự kiện scroll của ListView (có thể dùng NotificationListener hoặc ScrollController), sau đó dựa vào value khi scroll mà zoom ảnh lên hay trả lại như cũ thôi
ah, mình đọc thiếu, phần chuyển Column thành stl thì MyApp phải là statefull là chuẩn rồi.
Khi hàm build chạy thì cả stateless widget và stateful widget đều rebuild, không phải là stateful widget còn sống , nó cũng chết
. Khác nhau ở hàm build giữa stl vs stf là stateless sẽ rebuild cả element mà nó tạo ra, còn stateful sẽ check các điều kiện xem có cần rebuild lại Element không hay là tái sử dụng.
MyApp không nhất thiết phải là stateful widget. MyApp chuyển thành statelessWidget, còn ColumnWidget chuyển thành stateful Widget thì sẽ không bị rebuild toàn bộ Widget tree .