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



我可以静态禁用工具提示。 但是我想在单击平面按钮时动态禁用工具提示。但是无法动态禁用,我不知道该怎么做。 如果我给出静态错误。它工作正常。 例如:如果添加像TopToolbar(显示工具提示:false(这样的子项,它可以正常工作, 但是如果我在 Flatbutton onPressed 方法中给出 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();
}
}
}

您必须存储是否在_HelloWorldState中显示工具提示,而不是在TopToolbar中。

这将导致在_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;
});
},
),
]),
),
));
}
}

showTooltip也应该在类中标记为finalTopToolbar

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

除了我所展示的内容之外,您可以使用GlobalKey访问TopToolbarState,但我不建议初学者这样做,目前您的实现不需要它,而且GlobalKey相对昂贵。

这太简单了,伙计, 在主方法下创建 1 个全局变量

bool isTooltipActive = true;

现在像这样更改按压方法

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

并像这样更改书签工具提示行

tooltip: isToolTipAvtive ? "Bookmark" : null,

最新更新