flutter 从小部件到另一个屏幕的路径参数

yftpprvb  于 2023-02-05  发布在  Flutter
关注(0)|答案(2)|浏览(130)

有没有办法把这个"模型"从commentItem小部件路径到一个导航器,这个导航器把我传送到另一个屏幕?2比如Navigator. push或者Navigator. pushNamed?它将帮助我显示帖子或评论在不同的屏幕,如主屏幕,它将显示帖子以及我的个人资料屏幕,它将只显示我的帖子,所以我需要知道如何路径参数到不同的屏幕由导航器如何执行这一点密码?

Widget commentItem(CommentModel model, context,) => Column(
        mainAxisAlignment: MainAxisAlignment.start,
        children: [
          Row(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              CircleAvatar(
                radius: 22,
                backgroundImage: NetworkImage('${model.image}'),
              ),
              SizedBox(
                width: 15,
              ),
              Expanded(
                child: Column(
                  children: [
                    Container(
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(10),
                        color: SocialCubit.get(context).iconChangeTheme? Colors.white70 : Colors.grey[350],
                      ),
                      child: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Column(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            Row(
                              children: [
                                Text(
                                  '${model.name}',
                                  style: TextStyle(
                                      fontSize: 15,
                                      fontWeight: FontWeight.bold,
                                    color: SocialCubit.get(context).iconChangeTheme? Colors.black : Colors.black
                                  ),
                                ),
                                SizedBox(
                                  width: 7,
                                ),
                                Text(
                                  '${model.dateTime}',
                                  style: TextStyle(
                                      fontSize: 11,
                                      color: SocialCubit.get(context).iconChangeTheme? Colors.black : Colors.black
                                  ),
                                ),
                              ],
                            ),
                            if(model.text != '')
                              SizedBox(
                                height: 5,
                              ),
                            Text('${model.text}'
                            ,style: TextStyle(
                                  color: SocialCubit.get(context).iconChangeTheme? Colors.black : Colors.black
                              ),),
                          ],
                        ),
                      ),
                    ),
                    if (model.commentImage != '')
                      Padding(
                        padding: const EdgeInsetsDirectional.only(top: 5),

                        child: Container(
                          height: 170,
                          //width: double.infinity,
                          alignment: Alignment.topLeft,
                          child: ClipRRect(
                            borderRadius: BorderRadius.circular(10),
                            child: Image(image: NetworkImage('${model.commentImage}'),
                                //fit: BoxFit.fill,
                                alignment: Alignment.topLeft),
                          ),
                        ),
                      ),
                  ],
                ),
              ),
            ],
          ),
        ],
      );
ListView.separated(
                                                  shrinkWrap: true,
                                                  physics: NeverScrollableScrollPhysics(),
                                                  itemBuilder: (context, index) => commentItem(SocialCubit.get(context).comments[index], context,),
                                                  separatorBuilder: (context, index) => SizedBox(height: 20),
                                                  itemCount: SocialCubit.get(context).comments.length),
2nc8po8w

2nc8po8w1#

您可以按如下方式使用浏览器推送:

Navigator.of(context).push(MaterialPageRoute(builder: (context) => NewScreenForPosts(
postCode: postCode,
week: week,
postName: postName
)));

您的类将如下所示:

class NewScreenForPosts extends StatelessWidget {
  final postCode;
  final week;
  final postName;

  const NewScreenForPosts({Key? key, required this.postCode, required this.week, required this.postName}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const Placeholder();
  }
}

如果使用Stateless小工具,您可以像postCodeweekpostName等一样直接通过Navigator访问传递的数据。如果使用Stateful,您需要使用widget.postCodewidget.weekwidget.postName表示法。

rnmwe5a2

rnmwe5a22#

使用Getx包Get.to(屏幕名称());https://pub.dev/packages/get

相关问题