gpt4 book ai didi

Flutter,如何将值从一个函数传递到不同页面上的另一个函数

转载 作者:行者123 更新时间:2023-12-03 04:14:03 25 4
gpt4 key购买 nike

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

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

这是第一页上的按钮,按下时我想将一个值传递给子函数,因此我创建了一个变量,但不知道接下来如何进行:

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

因此,我想将第 1 页 Staleful Class 上的按钮中的 int 传递到第二页上的 Stateful Class 以更改 PDF(此处)。

请帮帮我。 PS Flutter、Dart 新手

最佳答案

您可以创建一个to参数...

类似这样的事情

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: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ea9f998f98aa938b93c4898587" rel="noreferrer noopener nofollow">[email protected]</a>");

编辑

也许这很简单......

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,如何将值从一个函数传递到不同页面上的另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62011666/

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