gpt4 book ai didi

Flutter-如何更改带有搜索功能的应用栏的颜色?

转载 作者:IT王子 更新时间:2023-10-29 07:07:09 27 4
gpt4 key购买 nike

我正在尝试更改我的应用栏的颜色,但我没有找到更改它的选项。因为我正在观看教程视频,所以他们没有显示可以编辑颜色。请帮忙!

import 'package:flutter/material.dart';



class SearchList extends StatefulWidget {
SearchList({ Key key }) : super(key: key);
@override
SearchListState createState() => new SearchListState();

}

class SearchListState extends State<SearchList>
{

Widget appBarTitle = new Text("Search Product..", style: new TextStyle(color: Colors.white),);
Icon actionIcon = new Icon(Icons.search, color: Colors.white);
final key = new GlobalKey<ScaffoldState>();
final TextEditingController searchQuery = new TextEditingController();
List<String> _list;
bool issearching;
String _searchText = "";

SearchListState() {
searchQuery.addListener(() {
if (searchQuery.text.isEmpty) {
setState(() {
issearching = false;
_searchText = "";
});
}
else {
setState(() {
issearching = true;
_searchText = searchQuery.text;
});
}
});
}

@override
void initState() {
super.initState();
issearching = false;
init();

}

void init() {
_list = List();
_list.add("shirts");
_list.add("shoes");
_list.add("jeans");
_list.add("informals");
_list.add("formals");
_list.add("dresses");
_list.add("accessories");

}

@override
Widget build(BuildContext context) {
return new Scaffold(
key: key,
appBar:

buildBar(context),



body: new ListView(
padding: new EdgeInsets.symmetric(vertical: 8.0),
children: issearching ? _buildSearchList() : _buildList(),
),
);

}

List<ChildItem> _buildList() {
return _list.map((contact) => new ChildItem(contact)).toList();
}

List<ChildItem> _buildSearchList() {
if (_searchText.isEmpty) {
return _list.map((contact) => new ChildItem(contact))
.toList();
}
else {
List<String> _searchList = List();
for (int i = 0; i < _list.length; i++) {
String name = _list.elementAt(i);
if (name.toLowerCase().contains(_searchText.toLowerCase())) {
_searchList.add(name);
}
}
return _searchList.map((contact) => new ChildItem(contact))
.toList();
}
}

Widget buildBar(BuildContext context) {
return new AppBar(
centerTitle: true,
title: appBarTitle,
actions: <Widget>[
new IconButton(icon: actionIcon, onPressed: () {
setState(() {
if (this.actionIcon.icon == Icons.search) {
this.actionIcon = new Icon(Icons.close, color: Colors.white,);
this.appBarTitle = new TextField(
controller: searchQuery,
style: new TextStyle(
color: Colors.white,

),
decoration: new InputDecoration(
prefixIcon: new Icon(Icons.search, color: Colors.white),
hintText: "Search...",
hintStyle: new TextStyle(color: Colors.white)
),
);
_handleSearchStart();
}
else {
_handleSearchEnd();
}
});
},),
]
);
}

void _handleSearchStart() {
setState(() {
issearching = true;
});
}

void _handleSearchEnd() {
setState(() {
this.actionIcon = new Icon(Icons.search, color: Colors.white,);
this.appBarTitle =
new Text("Search Sample", style: new TextStyle(color: Colors.white),);
issearching = false;
searchQuery.clear();
});
}

}

class ChildItem extends StatelessWidget {
final String name;
ChildItem(this.name);
@override
Widget build(BuildContext context) {
return new ListTile(title: new Text(this.name));
}

}

我想在我的 appBar 上使用绿色强调色,但我得到了 flutter 的默认蓝色。我似乎找不到合适的位置来放置我的 appBar 的 themeData。任何帮助,将不胜感激。谢谢。我想要的结果

enter image description here

我得到了什么

enter image description here

最佳答案

在阅读了大量文档后,我终于找到了答案。

注意:如果您使用 SearchDelegate 来显示搜索屏幕,这就是解决方案。

在您的 SearchDelegate 子类中,覆盖 appBarTheme

@override
ThemeData appBarTheme(BuildContext context) {
return Theme.of(context);
}

默认情况下,该类将背景设置为白色,因此您只需将其更改为此即可看到主题的颜色。

希望这对您有所帮助。

关于Flutter-如何更改带有搜索功能的应用栏的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54050068/

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