gpt4 book ai didi

dart - 如何在不同的屏幕中通过不同的类发送数据

转载 作者:IT王子 更新时间:2023-10-29 06:40:25 26 4
gpt4 key购买 nike

我在制作应用程序时被打动了,我的代码是这样的

void main() {
runApp(Myapp());
}
class Myapp extends StatelessWidget {
bool s=false;

@override
Widget build(BuildContext context) {
return (MaterialApp(
debugShowCheckedModeBanner: false,
title: "haha app",
theme: ThemeData(primarySwatch: Colors.lime),
home: s ? HomeScreen(null) : LoginPage()));
}
}

以上代码为main.dart文件

这是我的另一个名为 Login.dart 的文件,代码如下所示

class LoginPage extends StatefulWidget {
@override
_LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {

Widget build(BuildContext context) {
return(some button ontap:(\\ on tap on this i have to change the bool s value in main.dart to true how to do that){
}
)
}

在点击按钮时,主 dart 文件中的值 s 应该更改为 true 但没有导航器,因为我们不只是点击导航到这里。请帮我,提前致谢

最佳答案

您可以使用回调来传达您的小部件,就像这样

创建一个方法来获取回调,在本例中为:onChangeBool,将回调传递给您的 LoginPage 小部件。

    class Myapp extends StatelessWidget {
bool s=false;

onChangeBool(){
//change your var here

s = true;

//refresh the state
setState(() {

});
}

@override
Widget build(BuildContext context) {
return (MaterialApp(
debugShowCheckedModeBanner: false,
title: "haha app",
theme: ThemeData(primarySwatch: Colors.lime),
home: s ? HomeScreen(null) : LoginPage(onPressed: () => onChangeBool() ));
}
}

接收回调,按下按钮时调用

    class LoginPage extends StatefulWidget {

final VoidCallback onPressed;

LoginPage({this.onPressed});

@override
_LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {

Widget build(BuildContext context) {

return RaisedButton(
child: Text("button"),
onPressed: (){
widget.onPressed();
},
)

}
)
}

如果你想传递数据,你可以使用 ValueChanged 回调,或者如果你想传递复杂数据,使用 typedef/创建你自己的回调

使用 ValueChanged 的示例。

    class Myapp extends StatelessWidget {
bool s=false;

receiveData(String data){
print("your text here : $data");
}

@override
Widget build(BuildContext context) {
return (MaterialApp(
debugShowCheckedModeBanner: false,
title: "haha app",
theme: ThemeData(primarySwatch: Colors.lime),
home: s ? HomeScreen(null) : LoginPage(onPressed: receiveData ));
}
}



class LoginPage extends StatefulWidget {

final ValueChanged<String> onPressed;

LoginPage({this.onPressed});

@override
_LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {

Widget build(BuildContext context) {

return RaisedButton(
child: Text("button"),
onPressed: (){
widget.onPressed("passing this data");
},
)

}
)
}

关于dart - 如何在不同的屏幕中通过不同的类发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53707961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com