Flutter 如何在颤振中动态禁用工具提示?
我可以静态禁用工具提示。 但我想在单击flatbutton时动态禁用工具提示。但无法动态禁用,我不知道该怎么做。 如果我给静态假。它很好用。 例如:如果添加类似子级的TopToolbar(showTooltip:false),它可以正常工作, 但如果我在Flatbutton on Pressed方法中给出toolbar.showTooltip=false,它就不起作用了。 我想把它解散。请帮我做那件事。 这是我的代码:Flutter 如何在颤振中动态禁用工具提示?,flutter,dart,Flutter,Dart,我可以静态禁用工具提示。 但我想在单击flatbutton时动态禁用工具提示。但无法动态禁用,我不知道该怎么做。 如果我给静态假。它很好用。 例如:如果添加类似子级的TopToolbar(showTooltip:false),它可以正常工作, 但如果我在Flatbutton on Pressed方法中给出toolbar.showTooltip=false,它就不起作用了。 我想把它解散。请帮我做那件事。 这是我的代码: import 'package:flutter/material.dart'
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?“书签”:空,
请不要多次问同一个问题。您尝试过我的解决方案吗?