Flutter 单击按钮更改appBar
我正在尝试更改选择邮件时的appBar。我已经制作了两个小部件,但是我无法实现我需要的。创建了一个可以在整个代码中访问的对象。尝试为两个appbars创建有状态小部件。我需要访问整个代码中的Flutter 单击按钮更改appBar,flutter,dart,Flutter,Dart,我正在尝试更改选择邮件时的appBar。我已经制作了两个小部件,但是我无法实现我需要的。创建了一个可以在整个代码中访问的对象。尝试为两个appbars创建有状态小部件。我需要访问整个代码中的appBarChange,因为我将从我为body创建的小部件中调用函数 var appchangevar = _HomeState(); Widget _defaultBar(BuildContext context){ return AppBar( titleSpacing: 0, a
appBarChange
,因为我将从我为body创建的小部件中调用函数
var appchangevar = _HomeState();
Widget _defaultBar(BuildContext context){
return AppBar(
titleSpacing: 0,
actions: <Widget>[
IconButton(
icon: Icon(Icons.search,
color: Theme.of(context).iconTheme.color
),
onPressed: () {},
),
],
);
}
Widget _editingBar(BuildContext context){
return AppBar(
leading: IconButton(
icon: Icon(LineIcons.times),
color: Theme.of(context).iconTheme.color,
onPressed: (){
appchangevar.appBarChange();
},
),
actions: <Widget>[
IconButton(
icon: Icon(LineIcons.check
),
),
IconButton(
icon: Icon(LineIcons.envelope),
),
],
);
}
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
bool _messageSelected = true;
void appBarChange(){
setState(() {
_messageSelected = !_messageSelected;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: _messageSelected ? _editingBar(context) : _defaultBar(context),
var-appchangevar=_HomeState();
小部件\u默认栏(构建上下文){
返回AppBar(
标题间距:0,
行动:[
图标按钮(
图标:图标(Icons.search,
颜色:Theme.of(context).iconTheme.color
),
按下:(){},
),
],
);
}
小部件编辑栏(构建上下文){
返回AppBar(
领先:IconButton(
图标:图标(LineIcons.times),
颜色:Theme.of(context).iconTheme.color,
已按下:(){
appchangevar.appBarChange();
},
),
行动:[
图标按钮(
图标:图标(LineIcons.check
),
),
图标按钮(
图标:图标(LineIcons.envelope),
),
],
);
}
类Home扩展了StatefulWidget{
@凌驾
_HomeState createState()=>\u HomeState();
}
类(HomeState扩展状态){
bool\u messageSelected=true;
void appBarChange(){
设置状态(){
_messageSelected=!\u messageSelected;
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:_messageSelected?_editingBar(上下文):_defaultBar(上下文),
您可以将函数传递给相应的小部件,并更改onTap上的应用程序栏
签出下面完整的最小代码,它演示了如何做
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
MyAppState createState() => MyAppState();
}
class MyAppState extends State<MyApp> {
bool _messageSelected = true;
void appBarChange() {
setState(() {
_messageSelected = !_messageSelected;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: _messageSelected
? _defaultBar(context, appBarChange)
: _editingBar(context, appBarChange),
),
);
}
}
Widget _defaultBar(BuildContext context, Function changeAppBar) {
return AppBar(
titleSpacing: 0,
actions: <Widget>[
IconButton(
icon: Icon(Icons.search, color: Theme.of(context).iconTheme.color),
onPressed: () {
changeAppBar();
},
),
],
);
}
Widget _editingBar(BuildContext context, Function changeAppBar) {
return AppBar(
leading: IconButton(
icon: Icon(Icons.comment),
color: Theme.of(context).iconTheme.color,
onPressed: () {
changeAppBar();
},
),
actions: <Widget>[
IconButton(
onPressed: () {},
icon: Icon(Icons.check),
),
IconButton(
onPressed: () {},
icon: Icon(Icons.event),
),
],
);
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了StatefulWidget{
@凌驾
MyAppState createState()=>MyAppState();
}
类MyAppState扩展了状态{
bool\u messageSelected=true;
void appBarChange(){
设置状态(){
_messageSelected=!\u messageSelected;
});
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:\u messageSelected
?_defaultBar(上下文、appBarChange)
:_编辑栏(上下文,appBarChange),
),
);
}
}
小部件_defaultBar(BuildContext上下文,函数changeAppBar){
返回AppBar(
标题间距:0,
行动:[
图标按钮(
图标:图标(Icons.search,color:Theme.of(context.iconTheme.color),
已按下:(){
changeAppBar();
},
),
],
);
}
小部件编辑栏(BuildContext上下文,函数changeAppBar){
返回AppBar(
领先:IconButton(
图标:图标(Icons.comment),
颜色:Theme.of(context).iconTheme.color,
已按下:(){
changeAppBar();
},
),
行动:[
图标按钮(
按下:(){},
图标:图标(图标。检查),
),
图标按钮(
按下:(){},
图标:图标(Icons.event),
),
],
);
}
您可以将函数传递给相应的小部件,并更改onTap上的应用程序栏
签出下面完整的最小代码,它演示了如何做
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
MyAppState createState() => MyAppState();
}
class MyAppState extends State<MyApp> {
bool _messageSelected = true;
void appBarChange() {
setState(() {
_messageSelected = !_messageSelected;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: _messageSelected
? _defaultBar(context, appBarChange)
: _editingBar(context, appBarChange),
),
);
}
}
Widget _defaultBar(BuildContext context, Function changeAppBar) {
return AppBar(
titleSpacing: 0,
actions: <Widget>[
IconButton(
icon: Icon(Icons.search, color: Theme.of(context).iconTheme.color),
onPressed: () {
changeAppBar();
},
),
],
);
}
Widget _editingBar(BuildContext context, Function changeAppBar) {
return AppBar(
leading: IconButton(
icon: Icon(Icons.comment),
color: Theme.of(context).iconTheme.color,
onPressed: () {
changeAppBar();
},
),
actions: <Widget>[
IconButton(
onPressed: () {},
icon: Icon(Icons.check),
),
IconButton(
onPressed: () {},
icon: Icon(Icons.event),
),
],
);
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了StatefulWidget{
@凌驾
MyAppState createState()=>MyAppState();
}
类MyAppState扩展了状态{
bool\u messageSelected=true;
void appBarChange(){
设置状态(){
_messageSelected=!\u messageSelected;
});
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:\u messageSelected
?_defaultBar(上下文、appBarChange)
:_编辑栏(上下文,appBarChange),
),
);
}
}
小部件_defaultBar(BuildContext上下文,函数changeAppBar){
返回AppBar(
标题间距:0,
行动:[
图标按钮(
图标:图标(Icons.search,color:Theme.of(context.iconTheme.color),
已按下:(){
changeAppBar();
},
),
],
);
}
小部件编辑栏(BuildContext上下文,函数changeAppBar){
返回AppBar(
领先:IconButton(
图标:图标(Icons.comment),
颜色:Theme.of(context).iconTheme.color,
已按下:(){
changeAppBar();
},
),
行动:[
图标按钮(
按下:(){},
图标:图标(图标。检查),
),
图标按钮(
按下:(){},
图标:图标(Icons.event),
),
],
);
}
按照以下代码操作:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Change Text Dynamically on Button Click')
),
body: Center(
child: UpdateText()
)
)
);
}
}
class UpdateText extends StatefulWidget {
UpdateTextState createState() => UpdateTextState();
}
class UpdateTextState extends State {
String textHolder = 'Old Sample Text...!!!';
changeText() {
setState(() {
textHolder = 'New Sample Text...';
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(child: Column(
children: <Widget>[
Container(
padding: EdgeInsets.fromLTRB(20, 20, 20, 20),
child: Text('$textHolder',
style: TextStyle(fontSize: 21))),
RaisedButton(
onPressed: () => changeText(),
child: Text('Click Here To Change Text Widget Text Dynamically'),
textColor: Colors.white,
color: Colors.green,
padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
),
]))
);
}
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:appBar(
标题:文本('单击按钮时动态更改文本')
),
正文:中(
子级:UpdateText()
)
)
);
}
}
类UpdateText扩展StatefulWidget{
UpdateTextState createState()=>UpdateTextState();
}
类UpdateTextState扩展状态{
字符串textHolder='旧示例文本…!!!';
changeText(){
设置状态(){
textHolder='新样本文本…';
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:中心(子项:列)(
儿童:[
容器(
填充:来自LTRB(20,20,20,20)的边缘设置,
子项:文本(“$textHolder”,
样式:TextStyle(fontSize:21)),
升起的按钮(
按下时:()=>changeText(),
子:文本('单击此处动态更改文本小部件文本'),
textColor:Colors.white,
颜色:颜色。绿色,
填充:从LTRB(10,10,10,10)开始的边缘设置,
),
]))
);
}
}
这是一个更改简单Text()小部件的示例,但您可以操作AppBar支持的任何小部件,请按照以下代码操作:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Change Text Dynamically on Button Click')
),
body: Center(
child: UpdateText()
)
)
);
}
}
class UpdateText extends StatefulWidget {
UpdateTextState createState() => UpdateTextState();
}
class UpdateTextState extends State {
String textHolder = 'Old Sample Text...!!!';
changeText() {
setState(() {
textHolder = 'New Sample Text...';
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(child: Column(
children: <Widget>[
Container(
padding: EdgeInsets.fromLTRB(20, 20, 20, 20),
child: Text('$textHolder',
style: TextStyle(fontSize: 21))),
RaisedButton(
onPressed: () => changeText(),
child: Text('Click Here To Change Text Widget Text Dynamically'),
textColor: Colors.white,
color: Colors.green,
padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
),
]))
);
}
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:appBar(
标题:文本('更改文本