Flutter 颤振-使用材料更换长压机上的appbar

Flutter 颤振-使用材料更换长压机上的appbar,flutter,gesture,appbar,Flutter,Gesture,Appbar,我试着用颤振来做这种事情: 它检测到长按,但我不知道如何更改我的应用程序栏 有什么想法吗 编辑:这是我要做的 var appBar1 = AppBar(...); var appBar2 = AppBar(...); var appBar = appBar1; 我的appBar显示在我的脚手架中 在我的手势检测器上: onLongPress: (){ print('LONG PRESSED'); setState(() { appBar = appBar2; }); },

我试着用颤振来做这种事情:

它检测到长按,但我不知道如何更改我的应用程序栏

有什么想法吗

编辑:这是我要做的

var appBar1 = AppBar(...);
var appBar2 = AppBar(...);
var appBar = appBar1;
我的appBar显示在我的脚手架中

在我的手势检测器上:

onLongPress: (){
  print('LONG PRESSED');
  setState(() {
    appBar = appBar2;
  });
},

欢迎来到StackOverflow

你描述的方法听起来很正确。以下是一个独立示例,您可以再次检查代码:

导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料应用(主页:MyPage());
}
}
类MyPage扩展了StatefulWidget{
@凌驾
_MyPageState createState()=>\u MyPageState();
}
类MyPageState扩展了状态{
静态最终AppBar _defaultBar=AppBar(
标题:文本(“收件箱”),
前导:图标(图标.菜单),
操作:[图标(Icons.search),图标(Icons.more\u vert)],
背景颜色:Colors.black,
);
静态最终AppBar _selectBar=AppBar(
标题:文本(“1”),
前导:图标(图标。关闭),
行动:[
图标(Icons.flag),
图标(Icons.delete),
图标(图标。更多内容)
],
背景颜色:颜色。深紫色,
);
AppBar _AppBar=_defaultBar;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:_appBar,
正文:中(
孩子:升起按钮(
子项:文本('Switch!'),
已按下:(){
设置状态(){
_appBar=\u appBar==\u defaultBar
?\选择栏
:_defaultBar;
});
},
),
),
);
}
}

欢迎来到StackOverflow

你描述的方法听起来很正确。以下是一个独立示例,您可以再次检查代码:

导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料应用(主页:MyPage());
}
}
类MyPage扩展了StatefulWidget{
@凌驾
_MyPageState createState()=>\u MyPageState();
}
类MyPageState扩展了状态{
静态最终AppBar _defaultBar=AppBar(
标题:文本(“收件箱”),
前导:图标(图标.菜单),
操作:[图标(Icons.search),图标(Icons.more\u vert)],
背景颜色:Colors.black,
);
静态最终AppBar _selectBar=AppBar(
标题:文本(“1”),
前导:图标(图标。关闭),
行动:[
图标(Icons.flag),
图标(Icons.delete),
图标(图标。更多内容)
],
背景颜色:颜色。深紫色,
);
AppBar _AppBar=_defaultBar;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:_appBar,
正文:中(
孩子:升起按钮(
子项:文本('Switch!'),
已按下:(){
设置状态(){
_appBar=\u appBar==\u defaultBar
?\选择栏
:_defaultBar;
});
},
),
),
);
}
}

在更改appbar时,您要执行哪一步?图标的动画,颜色?替换为新的appbar?对我来说最好的方法是更改整个appbar,你认为有可能吗?现在,我已经创建了两个appbar变量,第一个是我常用的appbar,第二个是长按后的appbar。当我长按时,我调用一个setState,在这里我用第二个修改了我的appbar,但没有任何变化。如果看到这个代码片段,我会很高兴。你的方法听起来是个好主意,但它只会在没有动画的情况下切换appbar,对吗?当然,我稍后会看到动画。我已经编辑了我的帖子,够了吗?在更改appbar时,你会挣扎哪一步?图标的动画,颜色?替换为新的appbar?对我来说最好的方法是更改整个appbar,你认为有可能吗?现在,我已经创建了两个appbar变量,第一个是我常用的appbar,第二个是长按后的appbar。当我长按时,我调用一个setState,在这里我用第二个修改了我的appbar,但没有任何变化。如果看到这个代码片段,我会很高兴。你的方法听起来是个好主意,但它只会在没有动画的情况下切换appbar,对吗?当然,我稍后会看到动画。我已经编辑了我的帖子,够了吗?谢谢你,Nicklas!我尝试了你的代码,它工作得很好,多亏了它,我才能够找到我的问题。我在错误的地方定义变量。。。我也很感谢你的转变:如果你有任何悬而未决的问题,我期待着帮助你改进;)当你喜欢这个答案的时候,我会很感激你投赞成票:我真的很感激,谢谢!关于向上投票,我试过了,但我需要至少15个声誉点。。。我一看到你就马上做,Nicklas!我尝试了你的代码,它工作得很好,多亏了它,我才能够找到我的问题。我在错误的地方定义变量。。。我也很感谢你的转变:如果你有任何悬而未决的问题,我期待着帮助你改进;)当你喜欢这个答案的时候,我会很感激你投赞成票:我真的很感激,谢谢!关于向上投票,我试过了,但我需要至少15个声誉点。。。我会尽快做的
onLongPress: (){
  print('LONG PRESSED');
  setState(() {
    appBar = appBar2;
  });
},
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: MyPage());
  }
}

class MyPage extends StatefulWidget {
  @override
  _MyPageState createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  static final AppBar _defaultBar = AppBar(
    title: Text('Inbox'),
    leading: Icon(Icons.menu),
    actions: <Widget>[Icon(Icons.search), Icon(Icons.more_vert)],
    backgroundColor: Colors.black,
  );

  static final AppBar _selectBar = AppBar(
    title: Text('1'),
    leading: Icon(Icons.close),
    actions: <Widget>[
      Icon(Icons.flag),
      Icon(Icons.delete),
      Icon(Icons.more_vert)
    ],
    backgroundColor: Colors.deepPurple,
  );

  AppBar _appBar = _defaultBar;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: _appBar,
      body: Center(
        child: RaisedButton(
          child: Text('Switch!'),
          onPressed: () {
            setState(() {
              _appBar = _appBar == _defaultBar
                  ? _selectBar
                  : _defaultBar;
            });
          },
        ),
      ),
    );
  }
}