Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 有没有一种方法可以为属性floatingActionButton返回2个值,或者在变量更改时调用setState?_Flutter_Dart - Fatal编程技术网

Flutter 有没有一种方法可以为属性floatingActionButton返回2个值,或者在变量更改时调用setState?

Flutter 有没有一种方法可以为属性floatingActionButton返回2个值,或者在变量更改时调用setState?,flutter,dart,Flutter,Dart,我是个新手 因此,我正在开发一个颤振应用程序&我的函数和小部件文件名为:Function,它与Main分开,但我试图将状态设置为Main,而不是Function 我尝试在“Function”中的MyText类小部件中设置一个全局变量,同时导入“Main”==>函数,反之亦然,但我似乎无法操作GlobalKey变量,该变量将再次触发setState (类和MyText类已被废弃) 我还试着将另一个文件中的函数设置为按钮,如下所示 floatingActionButton:functions.ran

我是个新手

因此,我正在开发一个颤振应用程序&我的函数和小部件文件名为:Function,它与Main分开,但我试图将状态设置为Main,而不是Function

我尝试在“Function”中的MyText类小部件中设置一个全局变量,同时导入“Main”==>函数,反之亦然,但我似乎无法操作GlobalKey变量,该变量将再次触发
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获得它,谢谢!