Flutter,如何将值从一个函数传递到另一页上的另一个函数 [英] Flutter, How to pass value from one function to another function on a different page

查看:62
本文介绍了Flutter,如何将值从一个函数传递到另一页上的另一个函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从单击按钮时传递一个值,我想要在代码中传递的是将值从Button窗口小部件传递给另一个名为pdfNo的页面变量.这是我的代码:

I a trying to pass a Value from when a button is clicked, What I want in the code is to pass the value from the Button Widget to another Page's Variable named pdfNo. Here's my code:

FlatButton(
          padding: EdgeInsets.fromLTRB(2, 5, 5, 5),
          child: ListTile(
            leading: Icon(Icons.book, color: Color(0xFFEB3549)),
            title: Text('Book5'),
          ),
          onPressed: () {
            Navigator.push(
                context,
                MaterialPageRoute(
                builder: (context) => PDFPage() ));
            print('Pressed 6');
          },
        ),`

这是首页上的按钮,在按下时我想将一个值传递给一个子函数,所以我创建了一个变量,但无法弄清楚下一步如何做:

This is the Button on the First Page , On Pressed I would like to pass a Value to a function which is child, so I have created a variable , but cant figure out how to go about this next:

var pdfNo = 2;
bool _isLoading = true;
PDFDocument document;
@override
   void initState() {
      super.initState();
        changePDF(pdfNo);
        loadDocument();
         }

changePDF(value) async {
setState(() => _isLoading = true);
if (value == 1) {
  document = await PDFDocument.fromAsset('assets/sample2.pdf');
} else if (value == 2) {
  document = await PDFDocument.fromURL(
      "http://conorlastowka.com/book/CitationNeededBook-Sample.pdf");
} else {
  document = await PDFDocument.fromAsset('assets/sample.pdf');
}
setState(() => _isLoading = false);
}

因此,我想将int从第1页的Staleful Class的按钮传递给第二页的Stateful Class,以更改PDF(此处).

So, I would like to pass a int from the button on page 1 Staleful Class to a Stateful Class on second page to changePDF(here).

请帮帮我.PS Flutter,Dart的新手

Please help me out. PS New to Flutter,Dart

推荐答案

您可以创建 to 参数...

You can create a to arguments...

类似这样的东西

class LoginWidgetArguments {
  final String username;

  LoginWidgetArguments(
      {this.username});
}

class LoginWidget extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _LoginWidgetState();
}

class _LoginWidgetState extends State<LoginWidget>{
  LoginWidgetArguments args;

  @override
  void initState() {
    //Get context
    // I do this because sometimes it doesn't get the context without the FutureDelay... This workaround I used with the first flutter versions, maybe now its not needed
    Future.delayed(Duration.zero, () {
      args = ModalRoute.of(context).settings.arguments;
      if (args != null) {
        print(args.username)
      }
    });
  }

....
}

并导航

Navigator.pushNamed(context, LoginPage.routeName,
                    arguments: LoginWidgetArguments(
                        user: "user@yay.com");

编辑

也许很简单...

FlatButton(
          padding: EdgeInsets.fromLTRB(2, 5, 5, 5),
          child: ListTile(
            leading: Icon(Icons.book, color: Color(0xFFEB3549)),
            title: Text('Book5'),
          ),
          onPressed: () {
            Navigator.push(
                context,
                MaterialPageRoute(
                builder: (context) => PDFPage(pageNumber: 6) ));
            print('Pressed 6');
          },
        )

class PDFPage extends StatefulWidget {
  final int pageNumber;
  PDFPage({this.pageNumber});
  @override
  _PDFPageStage createState() => _PDFPageStage();
}

class _PDFPageStage extends State<PDFPage> {
...
    @override
   void initState() {
      super.initState();
      changePDF(widget.pageNumber);
      loadDocument();
   }
...
}

这篇关于Flutter,如何将值从一个函数传递到另一页上的另一个函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆