Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 单击按钮更改appBar_Flutter_Dart - Fatal编程技术网

Flutter 单击按钮更改appBar

Flutter 单击按钮更改appBar,flutter,dart,Flutter,Dart,我正在尝试更改选择邮件时的appBar。我已经制作了两个小部件,但是我无法实现我需要的。创建了一个可以在整个代码中访问的对象。尝试为两个appbars创建有状态小部件。我需要访问整个代码中的appBarChange,因为我将从我为body创建的小部件中调用函数 var appchangevar = _HomeState(); Widget _defaultBar(BuildContext context){ return AppBar( titleSpacing: 0, a

我正在尝试更改选择邮件时的appBar。我已经制作了两个小部件,但是我无法实现我需要的。创建了一个可以在整个代码中访问的对象。尝试为两个appbars创建有状态小部件。我需要访问整个代码中的
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(
标题:文本('更改文本