我有一個ListView內部許多 stateFull 小部件的樹,我無法與所有父小部件分開。
從(火力基地)Listview構建。streambuilder從 stateFull 小部件的大層次結構中,其中一些隨時執行 setState 小部件,然后子 ListView 也重繪,它會再次從 firebase 獲取資料及其閃爍(閃爍)
解釋下面的例子
StatefullWidget(
child:StatefullWidget(
child:StatefullWidget(
child:ListView()
),
),
);
Listview() 有三個父小部件,用于用戶友好的應用程式 setState 在父小部件中多次呼叫。
所以我想避免listView()的閃爍和重繪,即使父小部件重繪(setState())
uj5u.com熱心網友回復:
https://pub.dev/documentation/provider/latest/provider/Selector-class.html
提供者的“選擇器”就是你找到的。
但通常優化性能足以不閃爍。ListView.builder、const Widget、key等,https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html#performance-considerations
uj5u.com熱心網友回復:
您應該使用其中一種狀態管理方法。
例如,使用getx包,您可以使您的小部件無狀態,并使用 getx 小部件來更新資料。
這是默認顫振應用程式的 getx 使用示例。
class Home extends StatelessWidget {
final controller = Get.put(Controller());
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("counter")),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
GetBuilder<Controller>(
builder: (_) => Text(
'clicks: ${controller.count}',
)),
ElevatedButton(
child: Text('Next Route'),
onPressed: () {
Get.to(Second());
},
),
],
),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: controller.increment(),
),
);
}
}
class Second extends StatelessWidget {
final Controller ctrl = Get.find();
@override
Widget build(context){
return Scaffold(body: Center(child: Text("${ctrl.count}")));
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/446115.html
