Flutter 如何在颤振中动态禁用工具提示?

Flutter 如何在颤振中动态禁用工具提示?,flutter,dart,Flutter,Dart,我可以静态禁用工具提示。 但我想在单击flatbutton时动态禁用工具提示。但无法动态禁用,我不知道该怎么做。 如果我给静态假。它很好用。 例如:如果添加类似子级的TopToolbar(showTooltip:false),它可以正常工作, 但如果我在Flatbutton on Pressed方法中给出toolbar.showTooltip=false,它就不起作用了。 我想把它解散。请帮我做那件事。 这是我的代码: import 'package:flutter/material.dart'

我可以静态禁用工具提示。 但我想在单击flatbutton时动态禁用工具提示。但无法动态禁用,我不知道该怎么做。 如果我给静态假。它很好用。 例如:如果添加类似子级的TopToolbar(showTooltip:false),它可以正常工作, 但如果我在Flatbutton on Pressed方法中给出toolbar.showTooltip=false,它就不起作用了。 我想把它解散。请帮我做那件事。 这是我的代码:

import 'package:flutter/material.dart';
void main(){
  runApp(MaterialApp(home: HelloWorld(),debugShowCheckedModeBanner: false,));
}
class HelloWorld extends StatefulWidget {
  @override
  _HelloWorldState createState() => _HelloWorldState();
}

class _HelloWorldState extends State<HelloWorld> {

  bool check = false;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: SafeArea(
          child: Center(
            child: Column(children: <Widget>[
              TopToolbar(),
              FlatButton(
                child: Text("Disable Tooltip"),
                onPressed: () {
                  setState(() {
                    TopToolbar toolbar = new TopToolbar();
                    toolbar.showTooltip = false;
                  });
                },
              ),
            ]),
          ),
        ));
  }
}

class TopToolbar extends StatefulWidget {

  bool showTooltip;
  final Color backgroundColor;
  final double height;
  bool isVisible;
  TopToolbar({
    this.height = 55,
    this.isVisible = true,
    this.backgroundColor = const Color(0xFFEEEEEE),
    Key key,this.showTooltip=true,
  }) : super(key: key);
  @override
  _TopToolbarState createState() => _TopToolbarState();
}

class _TopToolbarState extends State<TopToolbar> {
  @override
  Widget build(BuildContext context) {
    if (widget.isVisible) {
      return Container(
        foregroundDecoration: BoxDecoration(
          border: Border(
            bottom: BorderSide(
              color: Colors.grey,
            ),
          ),
        ),
        margin: EdgeInsets.only(bottom: 1),
        color: widget.backgroundColor,
        height: widget.height,
        child: Stack(
          children: <Widget>[
            Positioned(
              top: 7,
              right: 60,
              height: 40,
              width: 40,
              child: RawMaterialButton(
                elevation: 0.0,
                fillColor: widget.backgroundColor,
                splashColor: Colors.grey[300],
                child: IconButton(
                  icon: Icon(
                    Icons.bookmark,
                    color: Colors.grey[500],
                    size: 25,
                  ),
                  onPressed: (){},
                  tooltip: widget.showTooltip ? "Bookmark" : null,
                ),
                onPressed: (){},
              ),
            ),
          ],
        ),
      );
    } else {
      return Container();
    }
  }
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(MaterialApp(home:HelloWorld(),debugShowCheckedModeBanner:false,);
}
类HelloWorld扩展StatefulWidget{
@凌驾
_HelloWorldState createState();
}
类_HelloWorldState扩展了状态{
布尔检查=假;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
儿童:中心(
子项:列(子项:[
TopToolbar(),
扁平按钮(
子项:文本(“禁用工具提示”),
已按下:(){
设置状态(){
TopToolbar=新建TopToolbar();
toolbar.showTooltip=false;
});
},
),
]),
),
));
}
}
类TopToolbar扩展StatefulWidget{
bool显示工具提示;
最终颜色背景色;
最终双倍高度;
布尔是可见的;
顶部工具栏({
这个高度=55,
this.isVisible=true,
this.backgroundColor=const Color(0xffeeee),
Key,this.showTooltip=true,
}):super(key:key);
@凌驾
_TopToolbarState createState()=>\u TopToolbarState();
}
类_TopToolbar状态扩展状态{
@凌驾
小部件构建(构建上下文){
if(widget.isVisible){
返回容器(
前场装饰:盒子装饰(
边界:边界(
底部:边界侧(
颜色:颜色。灰色,
),
),
),
页边距:仅限边集(底部:1),
颜色:widget.backgroundColor,
高度:widget.height,
子:堆栈(
儿童:[
定位(
前7名,
右:60,
身高:40,
宽度:40,
子项:RawMaterialButton(
标高:0.0,
fillColor:widget.backgroundColor,
颜色:颜色。灰色[300],
孩子:我的钮扣(
图标:图标(
图标。书签,
颜色:颜色。灰色[500],
尺码:25,
),
按下:(){},
工具提示:widget.showTooltip?“书签”:null,
),
按下:(){},
),
),
],
),
);
}否则{
返回容器();
}
}
}

您必须存储是否在
\u HelloWorldState
中显示工具提示,而不是在
TopToolbar

这将导致在
\u HelloWorldState
中执行类似操作:

class _HelloWorldState extends State<HelloWorld> {
  bool showTip = true;
  bool check = false;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: SafeArea(
          child: Center(
            child: Column(children: <Widget>[
              TopToolbar(showTip),
              FlatButton(
                child: Text("Disable Tooltip"),
                onPressed: () {
                  setState(() {
                    showTip  = false;
                  });
                },
              ),
            ]),
          ),
        ));
  }
}
class\u HelloWorldState扩展状态{
bool showTip=true;
布尔检查=假;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
儿童:中心(
子项:列(子项:[
顶部工具栏(显示提示),
扁平按钮(
子项:文本(“禁用工具提示”),
已按下:(){
设置状态(){
showTip=false;
});
},
),
]),
),
));
}
}
TopToolbar
类中的
showTooltip
也应标记为
final

您当前的实现创建了一个新的
TopToolbar
小部件,它不会修改现有的小部件<代码>TopToolbar=新建TopToolbar()创建一个完全不同的小部件,只是一个从未安装和显示的小部件。因此,
toolbar.showTooltip=false没有可见的效果

除了我所展示的,您可以使用
GlobalKey
访问
TopToolbar的
状态
,但我不建议初学者使用此功能,目前您的实现不需要它,而且
GlobalKey
相对昂贵。

这太简单了,伙计, 在main方法下面生成1个全局变量

bool isTooltipActive=true

现在改变这种方法

FlatButton(
    child: Text("Disable Tooltip"),
    onPressed: () {
        setState(() {
            if(isToolTipAvtive == false){
                isToolTipAvtive = true;
            }else{
                isToolTipAvtive = false;
            }
        });
    },
),
并更改书签工具提示行,如下所示

FlatButton(
    child: Text("Disable Tooltip"),
    onPressed: () {
        setState(() {
            if(isToolTipAvtive == false){
                isToolTipAvtive = true;
            }else{
                isToolTipAvtive = false;
            }
        });
    },
),

工具提示:iStoltipavtive?“书签”:空,

请不要多次问同一个问题。您尝试过我的解决方案吗?