如何解决使用提供程序避免在抖动中重建所有小部件树
据我了解,提供程序的好处之一是避免通过调用build函数来重建窗口小部件树,但是当我实际通过以下简单示例进行尝试时:
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:providerexamplelast/counterWidget.dart';
void main() => runApp(ChangeNotifierProvider<Provider1>(
create: (_) => Provider1(),child: MaterialApp(
home: Counter(),),));
int n =0;
class Counter extends StatelessWidget {
@override
Widget build(BuildContext context) {
print("${n++}");
var counter = Provider.of<Provider1>(context);
return Scaffold(
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),onPressed: ()=> counter.counter(),body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,children: [
Text("1"),SizedBox(height: 5,countText(),Text("3"),Text("4"),],);
}
}
Widget countText(){
return Builder(
builder: (context){
var count = Provider.of<Provider1>(context);
return Text("${count.c}");
},);
}
通过使用此部分:
print("${n++}");
我注意到每当我按下按钮并从提供商那里调用(counter)函数时,都会调用(build)函数吗?
所以这里的问题是(Stateless)小部件,如何重新构建?然后为什么不能使用Provider来解决这个问题呢?
编辑:我听说过这种方式:
var counter = Provider.of<Provider1>(context,listen: false);
那可以解决这个问题吗?以及如何?
解决方法
var counter = Provider.of<Provider1>(context,listen: false);
Provider
是Flutter拥有的状态管理机制之一,在幕后,Provider跟踪小部件内部所做的更改。无论是Provider
小部件还是Stateless
小部件,Stateful
都无关紧要,如果有任何更改,它将重新构建小部件。
listen: false
告诉Provider
即使数据被修改也不要重建小部件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。