Flutter 当软键盘出现时,状态将重新创建

Flutter 当软键盘出现时,状态将重新创建,flutter,dart,Flutter,Dart,我有一个使用FutureBuilder显示信息的应用程序 当我打开文本字段时,会出现软键盘,并重新创建FutureBuilder的状态。是否有任何方法可以避免不必要地运行build方法 显然,当我使用init state调用future时,它可以工作,但是对于其他函数,如删除数据,它不工作,因为future只被调用一次 这是我的密码 class FutureBuilderWidget extends StatefulWidget { @override

我有一个使用FutureBuilder显示信息的应用程序

当我打开文本字段时,会出现软键盘,并重新创建FutureBuilder的状态。是否有任何方法可以避免不必要地运行build方法

显然,当我使用init state调用future时,它可以工作,但是对于其他函数,如删除数据,它不工作,因为future只被调用一次

这是我的密码

         class FutureBuilderWidget extends StatefulWidget {
          @override
          _FutureBuilderWidgetState createState() => _FutureBuilderWidgetState();
        }

        class _FutureBuilderWidgetState extends State<FutureBuilderWidget> {
          final _appBar = AppBar();

          @override 
          Widget build(BuildContext context) {
            return FutureBuilder(
                      future: Provider.of<QuickNotesProvider>(context, listen: false)
                          .fetchAndSetNotes(),
                      builder: (ctx, snapshot) {
                        return snapshot.connectionState == ConnectionState.waiting
                            ? Center(
                                child: Text('loading...'),
                              )
                            : Consumer<QuickNotesProvider>(
                                child: Center(
                                  child: Container(
                                    margin: EdgeInsets.only(
                                        top: MediaQuery.of(context).size.height * 0.3),
                                    child: Column(
                                      children: <Widget>[
                                        Icon(Icons.calendar_today,
                                            size: MediaQuery.of(context).size.height *
                                                0.07),
                                        SizedBox(
                                          height: 6,
                                        ),
                                        Text('Added Notes will appear here',
                                            style:
                                                Theme.of(context).textTheme.headline),
                                        SizedBox(
                                          height: 10,
                                        ),
                                        Text(
                                          'Tap + to add a quick note',
                                          style: TextStyle(
                                              fontSize:
                                                  MediaQuery.of(context).size.height *
                                                      0.02,
                                              fontWeight: FontWeight.w400),
                                        )
                                      ],
                                    ),
                                  ),
                                ),
                                builder: (ctx, eventData, ch) {
                                  if (eventData.quicknotes.length == 0) {
                                    return ch;
                                  } else {
                                    return Container(
                                      height: (MediaQuery.of(context).size.height -
                                              _appBar.preferredSize.height -
                                              MediaQuery.of(context).padding.top -
                                              MediaQuery.of(context).padding.bottom) *
                                          0.869,
                                      child: ListView.builder(
                                        itemCount: eventData.quicknotes.length,
                                        itemBuilder: (context, index) {
                                          return Container(
                                              margin: const EdgeInsets.only(
                                                  left: 10, top: 7, right: 10),
                                              child: Card(
                                                elevation: 5,
                                                shape: RoundedRectangleBorder(
                                                    borderRadius:
                                                        BorderRadius.circular(5)),
                                                color: Color.fromRGBO(230, 230, 230, 1),
                                                child: Column(
                                                  crossAxisAlignment:
                                                      CrossAxisAlignment.start,
                                                  children: <Widget>[
                                                    Padding(
                                                      padding: EdgeInsets.only(
                                                          top: 10, left: 8),
                                                      child: Text(
                                                        eventData.quicknotes[index]
                                                            .quicknote,
                                                      ),
                                                    ),
                                                    Row(
                                                      mainAxisAlignment:
                                                          MainAxisAlignment.end,
                                                      children: <Widget>[
                                                        Padding(
                                                          padding:
                                                              const EdgeInsets.only(
                                                                  right: 10.0),
                                                          child: InkWell(
                                                            onTap: () {
                                                              setState(() {
                                                                eventData.deleteEvents(
                                                                    eventData
                                                                        .quicknotes[
                                                                            index]
                                                                        .id);
                                                              });
                                                            },
                                                            child: Icon(
                                                              Icons.more_horiz,
                                                              color: Colors.black54,
                                                            ),
                                                          ),
                                                        )
                                                      ],
                                                    )
                                                  ],
                                                ),
                                              ));
                                        },
                                      ),
                                    );
                                  }
                                });
                      },
                    );
          }
        }
class FutureBuilderWidget扩展StatefulWidget{
@凌驾
_FutureBuilderWidgetState createState()=>\u FutureBuilderWidgetState();
}
类\u FutureBuilderWidgetState扩展状态{
最终的_appBar=appBar();
@凌驾
小部件构建(构建上下文){
回归未来建设者(
future:Provider.of(上下文,侦听:false)
.fetchAndSetNotes(),
生成器:(ctx,快照){
返回snapshot.connectionState==connectionState.waiting
?中心(
子项:文本('loading…'),
)
:消费者(
儿童:中心(
子:容器(
页边距:仅限边距(
顶部:MediaQuery.of(上下文).size.height*0.3),
子:列(
儿童:[
图标(Icons.calendar_今天,
size:MediaQuery.of(上下文).size.height*
0.07),
大小盒子(
身高:6,
),
Text('此处将显示添加的注释',
风格:
Theme.of(context.textTheme.headline),
大小盒子(
身高:10,
),
正文(
'轻触+可添加快速备忘',
样式:TextStyle(
字体大小:
MediaQuery.of(上下文).size.height*
0.02,
fontWeight:fontWeight.w400),
)
],
),
),
),
生成器:(ctx、eventData、ch){
if(eventData.quicknotes.length==0){
返回ch;
}否则{
返回容器(
高度:(MediaQuery.of(context.size.height)-
_appBar.preferredSize.height-
MediaQuery.of(context.padding.top)-
MediaQuery.of(context.padding.bottom)*
0.869,
子项:ListView.builder(
itemCount:eventData.quicknotes.length,
itemBuilder:(上下文,索引){
返回容器(
边距:仅限常量边集(
左:10,上:7,右:10),
孩子:卡片(
标高:5,
形状:圆形矩形边框(
边界半径:
边界半径。圆形(5)),
颜色:颜色。来自RGBO(230,230,230,1),
子:列(
横轴对齐:
CrossAxisAlignment.start,
儿童:[
填充物(
填充:仅限边缘设置(
顶部:10,左侧:8),
子:文本(
eventData.quicknotes[索引]
.quicknote,
),
),
划船(
主轴对准:
main.end,
儿童:[
填充物(
衬垫:
仅限常量边设置(
右图:10.0),
孩子:InkWe
var myCompleter = Completer<YourDataDype>()
myCompleter.complete(yourData)