【问题标题】:how to send data through different classes in different screens in flutterFlutter中如何通过不同屏幕中的不同类发送数据
【发布时间】:2018-12-10 14:42:11
【问题描述】:

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

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 但没有导航器,因为我们不是在此处导航,只需单击即可。 请帮我, 提前致谢

【问题讨论】:

标签: dart flutter


【解决方案1】:

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

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

    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");
          },
        )

    }
    )
    }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-09-16
  • 2016-11-30
  • 2016-06-09
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
相关资源
最近更新 更多