flutter - 在 Flutter 中的两个类的方法中使用 setState 的最佳方法
问题描述
我有一个疑问,我是 Flutter 的新手,我想知道是否有更好的方法来做我想做的事,请参阅下一个代码示例。
这是我的屏幕,我要上课,一个是设备高度小于 800 的时候,另一个是更高的时候
class MyPageExample extends StatelessWidget {
@override
Widget build(BuildContext context) {
var screenSize = MediaQuery.of(context).size;
return Scaffold(
body: SafeArea(
child: screenSize.height > 800
? SignupLarge()
: SignupSmall()
)
);
}
}
这是我的两个 StatefulWidget
class SignupLarge extends StatefulWidget {
const SignupLarge({ Key? key }) : super(key: key);
@override
_SingupLargeState createState() => _SingupLargeState();
}
class _SingupLargeState extends State<SignupLarge> {
@override
Widget build(BuildContext context) {
return Column(
children: [
// Wome widgets...
ElevatedButton(
onPressed: () => signupToFirebase(),
child: Text('Click me')
)
],
);
}
}
class SignupSmall extends StatefulWidget {
const SignupSmall({ Key? key }) : super(key: key);
@override
_SignupSmallState createState() => _SignupSmallState();
}
class _SignupSmallState extends State<SignupSmall> {
@override
Widget build(BuildContext context) {
return ListView(
children: [
// Wome widgets...
ElevatedButton(
onPressed: () => signupToFirebase(),
child: Text('Click me')
)
],
);
}
}
signupToFirebase(){
// I need to use setState here to show the loading widget
// await Firebase.instance.signupWithEmailAndPassword...
// I need to use setState here to hide the loading widget
}
我想要做的是使用 setState 在我的类中使用该方法,实际上我不能,因为我的方法不在我的类中,但如果我把我的方法放在里面,我不能在两个类中使用相同的方法。
上面的代码只是我的代码外观的一个示例,我试图在用户注册时显示加载。
有人知道使用这两个类为我的方法使用 setState 的正确方法吗?
解决方案
您可以为该函数提供另一个函数以供其调用。
void signupToFirebase(void Function() whenDone) {
//...
whenDone();
}
...
// caller
signupToFirebase(() {
setState(() {
});
});
...
或者更好的是,如果你想做的是在它完成后采取行动,你可以让该函数返回一个 Future。
Future<void> signupToFirebase() {
await FirebaseAuth.instance... signup() kind of function that returns a Future
}
...
// caller
await signupToFirebase();
setState(() {
});
...
推荐阅读
- node.js - 无论如何在node.js Crypto模块上获得用于ECDH的基点(P)?
- prestashop - Prestashop 上偶尔会收到 403 错误(前端和管理员)
- r - 如何约束字符串ggplots和交互生成的格式以在命名颜色向量中查找颜色?
- f# - 何时使用 F# 的 typedefof<'T> 与 typeof<'T>?
- python - 从一些 numpy 数组创建 DataFrame
- matlab - 如何找到最高峰的 x&y 坐标并将数据存储到变量中
- dynamic - 具有动态行高的 SSRS Tablix 控件
- regex - 在 mod_rewrite 中使用有效的正则表达式减少路径
- jquery - VBA 将数据输入到 Jquery 表中以在网站上提交搜索
- f# - 如何使用单个根对简单层次结构建模