Flutter 有没有一种方法可以为属性floatingActionButton返回2个值,或者在变量更改时调用setState?
我是个新手 因此,我正在开发一个颤振应用程序&我的函数和小部件文件名为:Function,它与Main分开,但我试图将状态设置为Main,而不是Function 我尝试在“Function”中的MyText类小部件中设置一个全局变量,同时导入“Main”==>函数,反之亦然,但我似乎无法操作GlobalKey变量,该变量将再次触发Flutter 有没有一种方法可以为属性floatingActionButton返回2个值,或者在变量更改时调用setState?,flutter,dart,Flutter,Dart,我是个新手 因此,我正在开发一个颤振应用程序&我的函数和小部件文件名为:Function,它与Main分开,但我试图将状态设置为Main,而不是Function 我尝试在“Function”中的MyText类小部件中设置一个全局变量,同时导入“Main”==>函数,反之亦然,但我似乎无法操作GlobalKey变量,该变量将再次触发setState (类和MyText类已被废弃) 我还试着将另一个文件中的函数设置为按钮,如下所示 floatingActionButton:functions.ran
setState
(类和MyText类已被废弃)
我还试着将另一个文件中的函数设置为按钮,如下所示
floatingActionButton:functions.random()
不知何故,它能够设置状态(对不起,我忘了怎么设置),但它一直在运行,没有被按下
“Main.dart”示例代码
String display = "";
class _MyHomePageState extends State<MyHomePage> {
var currentScreen = display;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
AutoSizeText(
currentScreen,
style: Theme.of(context).textTheme.display1,
),
],
),
),
floatingActionButton: functions.menu(),
);
} //Build
}// _MyHomePageState
SpeedDial menu(){
return SpeedDial(
SpeedDialChild(
child: Icon(Icons.autorenew),
backgroundColor: Colors.lightBlueAccent,
label: 'New Activity',
labelStyle: TextStyle(fontSize: 18.0),
onTap: () => random(),
),
)
random(){
...
return someString;
}
预期结果
单击子级“新建活动”时,将调用setState,并将变量currentScreen的状态设置为函数“random()”的结果
提前谢谢你 我不知道这是否能解决您的问题,但该方法将与您的方法略有不同,因为我对globalsetkey的工作原理并不十分熟悉 因此,从我的角度来看,我使用的是集团模式,希望这能给你一些启发,如何解决这个问题 在classBLoc.dart中
BehaviorSubject<bool> _dialClicked = BehaviorSubject<bool>();
Observable<bool> get dialClicked => _dialClicked.stream;
Function(bool) get dialClickedListener => _dialClicked.sink.add;
Widget menu(){
final bloc = Provider.of<classBLoc>();
return StreamBuilder(stream: bloc.dialClicked, initialData: false,builder: (context, snapshot){
return SpeedDial(
SpeedDialChild(
child: Icon(Icons.autorenew),
backgroundColor: Colors.lightBlueAccent,
label: 'New Activity',
labelStyle: TextStyle(fontSize: 18.0),
onTap: () => snapshot.data ? currentScreen : random(), // this used for checking data if have already been clicked or not
);
}),
);
在函数中。省道
BehaviorSubject<bool> _dialClicked = BehaviorSubject<bool>();
Observable<bool> get dialClicked => _dialClicked.stream;
Function(bool) get dialClickedListener => _dialClicked.sink.add;
Widget menu(){
final bloc = Provider.of<classBLoc>();
return StreamBuilder(stream: bloc.dialClicked, initialData: false,builder: (context, snapshot){
return SpeedDial(
SpeedDialChild(
child: Icon(Icons.autorenew),
backgroundColor: Colors.lightBlueAccent,
label: 'New Activity',
labelStyle: TextStyle(fontSize: 18.0),
onTap: () => snapshot.data ? currentScreen : random(), // this used for checking data if have already been clicked or not
);
}),
);
Widget菜单(){
final bloc=Provider.of();
返回StreamBuilder(流:bloc.dialClicked,initialData:false,builder:(上下文,快照){
返回快速拨号(
快速拨号儿童(
子:图标(Icons.autorenew),
背景颜色:Colors.lightBlueAccent,
标签:“新活动”,
标签样式:文本样式(字体大小:18.0),
onTap:()=>snapshot.data?currentScreen:random(),//用于检查是否已单击数据
);
}),
);
希望这能给你一些启发它是如何工作的//如果括号中有错误,很抱歉谢谢!我还没有尝试过它,但我认为这是我一直在寻找的两个新概念,将在更新后发布!我必须向pubspec.yaml添加依赖项吗?或者导入任何内容吗?如果你使用rxdart/Provider,你需要添加一些库在pubspecUpdate中,我可以使用FutureBuilder获得它,谢谢!