页面已经有来自API的数据,然后我想将API数据发送到下一个页面。
例如:当我们点击食物列表时,会出现被点击食物的描述,或者当我们点击另一个页面上的数据时,它比列表上的数据更详细
以下是起始页的代码:
var notifikasiSiswa = [];
//====================== Fungsi ListView ================================
class _NotifikasiSiswaState extends State<NotifikasiSiswa> {
Future<SharedPreferences> _sprefs = SharedPreferences.getInstance();
int id;
@override
Future<Null> getData() async {
final SharedPreferences prefs = await _sprefs;
int data = prefs.getInt('id');
this.setState(() {
id = data ;
});
// counter = data;
// api coba dsni
NotifikasiSiswaMo.getPengumuman(id.toString()).then((value) {
notifikasiSiswa = value;
this.setState(() {
notifikasiSiswa = value;
});
print("muncul");
});
// print(token);
}
@override
void initState() {
super.initState();
setState(() {
getData();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Materi Siswa"),),
body: ListView.builder( // Auto Scroll Jika Data yang dimunculkan banyak
reverse: true,
itemCount: notifikasiSiswa.length,
itemBuilder: (context, index){
return Center(
child: Padding(
padding: EdgeInsets.only(left: 20.0, right: 20.0, top: 15.0 ),
child: Stack(
children: <Widget>[
Container(
height: 100,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(_borderRadius),
gradient: LinearGradient(
colors: [Colors.white, Colors.white],
begin: Alignment.topLeft,
end: Alignment.bottomRight),
)
),
Positioned.fill(child: InkWell(
splashColor: Colors.blue.withAlpha(30),
onTap: () {
Navigator.push(context, MaterialPageRoute(builder: (context) {
return NotifikasiSiswaDetail(
s_date : notifikasiSiswa[index].date,
s_title : notifikasiSiswa[index].title,
s_message :notifikasiSiswa[index].message
);
},
));
},
child: Row(
children: <Widget>[
Expanded(
child:
Center(
child: Icon(Icons.notifications_active))
),
Expanded(
flex: 4,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, //Vertical dengan posisi aligmn start
children: <Widget>[
Text(notifikasiSiswa[index].date ?? "00/00/00",
style: TextStyle(
color: Colors.black45,
fontWeight: FontWeight.w500),),
SizedBox(
height: 6.0,
),
下一页怎么样?
final List args=ModalRoute.of(context(.settings.arguments;如果我正确理解了您的问题,您可以使用Navigator.pushNamed()
中的arguments
参数将数据传递到新页面。
Navigator.pushNamed(context, '/newPage', arguments: /* data you want to pass */);
要从新页面访问此数据,可以在其build
方法中使用此行。
final args = ModalRoute.of(context).settings.arguments;
您可以在此处了解更多信息:https://flutter.dev/docs/cookbook/navigation/navigate-with-arguments
这里至少有两个选项:
- 将数据保存在状态中。如果数据不是那么大和复杂,你可以通过状态携带它
- 提出新请求。如果你需要更多的细节,而不仅仅是标题和描述,比如评论、点赞、分享等,那么你最好提出一个新的请求。是的,它在带宽和金钱方面花费更多,但它给了你更多的工作空间