- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - phát hiện rò rỉ bộ nhớ Ruby/Ruby on Rails
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
由于各种原因,有时会再次调用我的小部件的xây dựng
phương pháp.
我知道这是因为 parent 更新了。但这会导致不良影响。它导致问题的典型情况是这样使用 FutureBuilder
:
@ghi đè
Xây dựng tiện ích (BuildContext context) {
return FutureBuilder(
future: httpCall(),
builder: (context, snapshot) {
// create some layout here
},
);
}
在此示例中,如果再次调用 xây dựng 方法,它将触发另一个 HTTP 请求。这是不希望的。
考虑到这一点,如何处理不需要的构建?有什么方法可以阻止构建调用吗?
câu trả lời hay nhất
xây dựng 方法的设计方式应使其纯净/无副作用。这是因为许多外部因素可以触发新的小部件构建,例如:
Class.of(context)
模式)更改这意味着 xây dựng
方法应该不触发 http 调用或修改任何状态。
这与问题有什么关系?
您面临的问题是您的构建方法有副作用/不纯净,使得无关的构建调用很麻烦。
与其阻止构建调用,不如让构建方法更纯净,这样它就可以随时调用而不会产生影响。
在您的示例中,您会将小部件转换为 StatefulWidget
,然后将该 HTTP 调用提取到 State
của initState
>:
class Example extends StatefulWidget {
@ghi đè
_ExampleState createState() => _ExampleState();
}
class _ExampleState extends State {
Future future;
@ghi đè
initState không có giá trị() {
future = Future.value(42);
super.initState();
}
@ghi đè
Xây dựng tiện ích (BuildContext context) {
return FutureBuilder(
future: future,
builder: (context, snapshot) {
// create some layout here
},
);
}
}
I know this already. I came here because I Thực ra want to optimize rebuilds
也可以使小部件能够重建,而无需强制其子项也进行构建。
当小部件的实例保持不变时; Flutter 有目的地不会重建 child 。这意味着您可以缓存部分小部件树以防止不必要的重建。
最简单的方法是使用 dart hằng số
构造函数:
@ghi đè
Xây dựng tiện ích (BuildContext context) {
return const DecoratedBox(
decoration: BoxDecoration(),
child: Text("Hello World"),
);
}
tri ân hằng số
关键字,即使构建被调用数百次,DecoratedBox
的实例也将保持不变。
但您可以手动获得相同的结果:
@ghi đè
Xây dựng tiện ích (BuildContext context) {
final subtree = MyWidget(
child: Text("Hello World")
);
return StreamBuilder(
stream: stream,
initialData: "Foo",
builder: (context, snapshot) {
return Column(
trẻ em: [
Text(snapshot.data),
subtree,
],
);
},
);
}
在此示例中,当 StreamBuilder 收到新值通知时,即使 StreamBuilder/Column 重建,subtree
也不会重建。发生这种情况是因为,由于闭包,MyWidget
的实例没有改变。
这种模式在动画中被大量使用。典型用途是 Người xây dựng hoạt hình
和所有过渡,例如 AlignTransition
。
您也可以将 subtree
存储到您的类的一个字段中,但不推荐这样做,因为它会破坏热重载功能。
关于flutter - 如何处理不需要的小部件构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52249159/
Tôi gặp sự cố khi xây dựng một ứng dụng cụ thể bằng gradle. Ứng dụng có thể được biên dịch và xây dựng bằng Eclipse và nó chạy tốt trên máy tính bảng. Khi tôi cố gắng xây dựng nó bằng Gradle, "compileDebugJava"
Tôi có một chương trình C được một nhà phát triển đã để lại cho tôi. Tôi đang cố gắng tìm hiểu xem anh ấy đang làm cái quái gì và sắp xếp lại phần mềm thành thứ gì đó hợp lý hơn để tôi có thể xây dựng nó dễ dàng hơn. Tôi đang xây dựng bằng CMake và anh ấy đang sử dụng Make. có
Tôi mới bắt đầu đọc "Pro Spring MVC with web flow" và nó đi kèm với một mã ví dụ mà tôi muốn làm theo. Mình muốn gì - Mình muốn build app như trong sách, dùng Gradle có vấn đề gì - Mình chưa dùng Gr
Tôi hy vọng ai đó đã làm điều này. Tôi đang cố gắng thiết lập một bản dựng liên tục trong teamcity cho một trong 2 dự án góc cạnh của mình. Sau khi thực hiện một số nghiên cứu, tôi đã làm theo các bước sau: Xây dựng Bước 1: Cài đặt j cho teamcity
Tôi có một giải pháp trang web ASP.Net cũ trông giống như: Khi tôi xây dựng giải pháp trong Visual Studio, tôi nhận được kết quả đầu ra sau: ------ Quá trình xây dựng đã bắt đầu: Dự án: C:\..
Tôi sử dụng gulp-usref, gulp-if, gulp-uglify, gulp-csso và gulp-file-include để xây dựng ứng dụng của mình. Mọi thứ trong bản dựng đều hoạt động tốt ngoại trừ HTML vẫn giữ nguyên
Tôi đang sử dụng ionic2 để phát triển ứng dụng di động nội bộ. Tôi có thể xây dựng ios thành công với: ionic build ios và ionic build ios --prod nhưng khi tôi làm điều này thì nó cứ thất bại
Tôi là một nhà phát triển .NET/C# có kinh nghiệm nhưng mới làm quen với hầu hết mọi công nghệ/thư viện ở đây (bao gồm cả công việc SQL/DB). Tôi đang phát triển một dự án với phần phụ trợ và di động Azure/Entity Framework .NET
Tôi đang sử dụng VS2008. Tôi có thể biên dịch thành công giải pháp của mình bằng IDE. Tuy nhiên, khi tôi cố gắng xây dựng nó bằng devenv.com, nó không thành công với "Lỗi: Không tìm thấy đầu ra cho nhóm đầu ra dự án '(không thể xác định tên)". nhóm, cấu hình của nó, hoặc
Phiên bản: ember.js 2.7, ember-data 2.7 ember-cli 2.9.1//cũng áp dụng cho ember-cli 2.7 nút 6.9.1, npm 3.10.9//cũng áp dụng cho no
Lần đầu tiên vá AzureDevops, tôi đã thiết lập một số tác vụ CI. Tôi có một kho lưu trữ công cộng (mã nguồn mở) và một giải pháp (.sln) chứa 3 dự án F#. Giải pháp này hoạt động trên Windows/Mac/Li
Có vẻ như VS2008 vẫn không được hỗ trợ trong phiên bản 5.1.5 hoặc trong kho STLPort CVS. Nếu bất cứ ai đã làm điều này, sẽ rất hữu ích nếu có thể chia sẻ :) Ngoài ra, hãy biết về các bản dựng VS2005 hoặc 2008 x64
Tôi có một dự án Python 2.7 và cho đến nay tôi vẫn đang sử dụng gfortran và MinGW để xây dựng các tiện ích mở rộng. Tôi đang sử dụng MinGW vì nó dường như hỗ trợ các câu lệnh ghi và mảng có thể phân bổ trong mã Fortran, trong khi MSVC
đóng cửa. Câu hỏi này lạc đề. Hiện tại nó không chấp nhận câu trả lời. Bạn muốn cải thiện câu hỏi này? Đã cập nhật câu hỏi để nó phù hợp với chủ đề về Stack Overflow. Đóng cửa 9 năm trước Cải thiện hàng đợi này
Tôi đang thắc mắc tại sao chỉ có những nền tảng cụ thể cho quá trình xây dựng mới được liệt kê trong Zimbra Wiki. Điều này có nghĩa là không thể xây dựng Zimbra trên các bản phân phối Linux khác phải không? Cộng đồng Zimbra chọn bản phân phối Linux đặc biệt để xây dựng Zi
Tôi sẽ xây dựng một công cụ CLI trong Swift. Tôi đã tạo dự án bằng lệnh này swift package init --typeexecutable và khi tôi xây dựng dự án của mình và phân tích cú pháp, nó sẽ đọc các tham số bí danh trong Xcode và
Tôi muốn đặt quyền truy cập tệp cho các tệp được thêm vào hình ảnh docker. Tôi có Dockerfile đơn giản này: FROM ubuntu:utopic WORKDIR /app RUN groupadd -g 1000 b
Khi tôi sử dụng clBuildProgram trong mã OpenCl của mình, nó không thành công với mã lỗi -11 mà không có bất kỳ thông tin nhật ký nào. Mã của tôi trông như thế này: ret = clBuildProgram(program
Tôi có thanh điều hướng phía dưới có trang danh sách sử dụng khối trạng thái. lớp _MainPageState mở rộng Trạng thái { int _index = 0; @override Wi
Tôi đang sử dụng Jenkins trên máy cục bộ của mình (URL Jenkins không được hiển thị qua Internet, nhưng Internet được bật trên máy đó.) Tôi đã thực hiện các thay đổi cấu hình sau: Đã cài đặt các plugin Git và Github trên công cụ Jenkins
Tôi là một lập trình viên xuất sắc, rất giỏi!