在颤动上将API数据从第1页传递到另一个飞镖页



页面已经有来自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

这里至少有两个选项:

  1. 将数据保存在状态中。如果数据不是那么大和复杂,你可以通过状态携带它
  2. 提出新请求。如果你需要更多的细节,而不仅仅是标题和描述,比如评论、点赞、分享等,那么你最好提出一个新的请求。是的,它在带宽和金钱方面花费更多,但它给了你更多的工作空间

相关内容

  • 没有找到相关文章

最新更新