gpt4 book ai didi

在应用栏上更新时,Flutter 脚手架更新了整个页面

转载 作者:行者123 更新时间:2023-12-03 21:14:25 24 4
gpt4 key购买 nike

所以我有一个带有 body 的脚手架是一个 ListView 。我有一个管理它的舞台的应用程序栏。这是我的应用栏代码:

import 'package:flutter/material.dart';

class HgAppBar extends StatefulWidget implements PreferredSizeWidget {
final String title;
final List<Widget> actions;

HgAppBar({this.title, this.actions, Key key}) : super(key: key);

@override
HgAppBarState createState() => HgAppBarState();

@override
Size get preferredSize => new Size.fromHeight(kToolbarHeight);
}

class HgAppBarState extends State<HgAppBar> {
bool _searchOpenned = false;
void openSeach() {
setState(() {
_searchOpenned = true;
});
}

void closeSearch() {
setState(() {
_searchOpenned = true;
});
}

@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {
return AppBar(
title: _searchOpenned
? TextField(
decoration: InputDecoration(
filled: true,
border: null,
fillColor: Colors.white,
),
autofocus: true,
)
: Text(widget.title ?? 'No title'),
actions: _searchOpenned
? [
IconButton(
icon: Icon(Icons.close),
onPressed: () {
setState(() {
_searchOpenned = false;
});
},
)
]
: widget.actions,
);
}
}

这里是我的页面代码:
class PageSales extends StatefulWidget {
final Store<AppState> store;
final String title;
final bool usePop;
PageSales(this.store, {this.title, this.usePop = false});
@override
State<StatefulWidget> createState() => _PageSales();
}

class _PageSales extends State<PageSales> {
final appBarKey = GlobalKey<HgAppBarState>();

@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: HgAppBar(
key: appBarKey,
title: Localizations.of(context, AppLoc).text('sales_plus'),
actions: [
IconButton(
icon: Icon(Icons.search),
onPressed: () {
appBarKey.currentState.openSeach();
},
)
],
),
body: SafeArea(
child: Column(children: <Widget>[
Expanded(
child: FireStoreListView(
snapshot: HgFirestore.instance.productCollection.snapshots(),
itemBuilder: (context, doc) {
return WidgetProductItem(
widget.store, ProductModel.fromDocument(doc));
},
),
),
]),
),
);
}
}

所以问题是当我调用 openSearch 时,我的整个脚手架都会刷新(我知道这是因为我的 ListView 正在闪烁)。如何在不刷新整个脚手架的情况下更新我的应用程序栏?

最佳答案

我试过你的代码,似乎没问题。屏幕没有重建,我使用的是 Flutter 2.2。我建议添加 debugPrint为了确保屏幕确实得到重建,ListView 闪烁并不是整个屏幕得到重建的明确指示。

关于在应用栏上更新时,Flutter 脚手架更新了整个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54174707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com