flutter - 有没有办法为属性 floatingActionButton 返回 2 个值或在变量更改时调用 setState?
问题描述
我是新来的颤振,
所以我正在开发一个 Flutter 应用程序,我的函数和小部件文件名为:'Function'与我的Main分开,但我试图在'Main'中从'Function'中设置状态
我试图在“Function”内的 MyText 类 Widget 中设置一个全局变量并同时导入“Main” ==> Function & Vice Versa,但我似乎无法操作会再次触发的GlobalKey变量setState
(Class & MyText class 已被废弃)
我还尝试将其他文件中的功能设置为按钮,如下所示
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
'Function.dart'示例代码
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 的工作并不十分熟悉...
所以从我的角度来看,我正在使用 bloc 模式,所以希望这可以给你一些灵感来解决这个问题
在类 BLoc.dart
BehaviorSubject<bool> _dialClicked = BehaviorSubject<bool>();
Observable<bool> get dialClicked => _dialClicked.stream;
Function(bool) get dialClickedListener => _dialClicked.sink.add;
在main.dart 部分floatingActionButton,
floatingActionButton: functions.menu(currentScreen),
在Function.dart中
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
);
}),
);
希望这能给你一些启发它是如何工作的//对不起,如果括号有误
推荐阅读
- angular - 如何将剑道网格放入另一个剑道网格中,以便两个网格都可以在单元格上单击时进行编辑?
- kotlin - 如何使用 Kodein 的直接检索来获取绑定为工厂的依赖项?
- python - 如何通过装饰器类从类的函数中获取类参数?
- java - 嵌套循环中的随机不同数字
- assembly - 如何使用 DOS 指令替换程序集中文件中的文本
- keydown - Vue Test Utils, Keydown 事件不再由测试中的 keyCode 触发
- arangodb - ArangoDB AQL:LOWER 不适用于切片的价值?
- java - 不能写字段名,需要一个值
- angular - 我如何强制应用程序询问用户相机权限?
- android - 如何修复android中RxBus中的调用重复方法