[英]How to pass data in flutter on Stateless Widget?
我正在嘗試完成我的學校作業,但在將數據傳遞到無狀態小部件時遇到了困難。 我有以下課程:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Page1(),
);
}
}
class Page1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.push(
context, MaterialPageRoute(builder: (context) => Page2(messageData: messageData)));
},
child: Text('Request Chat'),
)),
);
}
}
class Page2 extends StatelessWidget {
//Navigation
static Route route(MessageData data) => MaterialPageRoute(
builder: (context) => Page2(
messageData: data,
),
);
const Page2({Key? key, required this.messageData}) : super(key: key);
final MessageData messageData;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
iconTheme: Theme.of(context).iconTheme,
centerTitle: false,
),
),
},
@immutable
class MessageData {
const MessageData(
{required this.senderName,
required this.message,
required this.messageDate,
required this.dateMessage,
required this.profilePicture});
final String senderName;
final String message;
final DateTime messageDate;
final String dateMessage;
final String profilePicture;
}
上面有我需要傳遞的 messageData。
基本上,我希望能夠導航到 Page2,但我一直在Navigator.push()
處收到錯誤消息。 錯誤詳細信息: Type' can't be assigned to the parameter type 'MessageData'.
當 Page2() 上沒有 arguments 時,錯誤消息: The named parameter 'messageData' is required, but there's no corresponding argument.
您必須使用構造函數傳遞數據。 我希望你能從這個鏈接中得到一個想法。
您可以將 arguments 傳遞給小部件,就像傳遞給Flutter
的小部件一樣:
///Creating Page2 instances
Page2(text: 'text');
Page2.otherConstructor('text');
///This is how you pass values to widgets
class Page2 extends StatelessWidget {
//Pass `this.field` to the constructor so that you are asking for the field you created.
const Page2({Key? key, required this.text}) : super(key: key);
const Page2.otherConstructor(this.text);
final String text;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Text(text),
);
}
}
如果它是State
中的StatefulWidget
,您可以使用widget.field
訪問這些值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.