Flutter 在颤振中构建函数后,如何将单个数据变量放入另一个页面?

Flutter 在颤振中构建函数后,如何将单个数据变量放入另一个页面?,flutter,dart,Flutter,Dart,在构建一个显示所有数据变量的函数后,如何将单个数据变量放入另一个页面 这是对函数的调用,稍后我将使用php从数据库中查询它们的列表 buildOrderItem('images/shoe.jpg', "Men's Italian Shoe", 150.00), buildOrderItem('images/suit.jpg', 'FloTextile Suit', 450.00), buildOrderItem('images/heels.

在构建一个显示所有数据变量的函数后,如何将单个数据变量放入另一个页面

这是对函数的调用,稍后我将使用php从数据库中查询它们的列表

      buildOrderItem('images/shoe.jpg', "Men's Italian Shoe", 150.00),
      buildOrderItem('images/suit.jpg', 'FloTextile Suit', 450.00),
      buildOrderItem('images/heels.jpg', "Women's Heel", 200.00),
这就是函数

Container buildOrderItem(imagelink, productName, price) {
    return Container(
      child: InkWell(
        onTap: () {
          Navigator.push(
              context,
              new MaterialPageRoute(
                  builder: (context) => new ProductPage()));
        },
        child: Container(
          margin: EdgeInsets.only(left: 20, right: 20, top: 10, bottom: 10),
          decoration: BoxDecoration(
              color: Colors.white, borderRadius: BorderRadius.circular(10)),
          child: Column(
            children: [
              Container(
                child: Image.asset(
                  imagelink,
                  width: 250,
                  height: 150,
                  fit: BoxFit.scaleDown,
                ),
              ),
              Container(
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Container(
                      padding: EdgeInsets.all(20),
                      child: Text(
                        productName,
                        style: TextStyle(fontWeight: FontWeight.bold),
                      ),
                    ),
                    Container(
                      padding: EdgeInsets.all(20),
                      child: Text(
                        'N' + price.toString(),
                        style: TextStyle(
                            fontWeight: FontWeight.bold,
                            color: Colors.deepOrange),
                      ),
                    )
                  ],
                ),
              ),
            ],
          ),
        ),
      ),
    );
在ontap中,如何将特定产品中的数据变量
(imagelink、productName、price)
传递到下一个屏幕中

onTap:(){
          Navigator.push(
            context,
              new MaterialPageRoute(
                  builder: (context) => new ProductPage()));
            },
我尝试将变量作为参数发送到路由中,但收到的却是null


请提供帮助,谢谢

只需为您的
产品页面
创建构造函数并将变量传递到那里

class ProductPage extends StatelessWidget { /* Or StatefulWidget and then in the State use these variable like widget.someVariable*/
  ProductPage({
      required this.someVariable,
      required this.someVariable2,
      required this.someVariable3,
      Key? key,
    }) : super(key: key);


  final String someVariable;
  final String someVariable2;
  final double someVariable3;
 
  //...
}
要传递这些变量,请执行以下操作:

//...

ProductPage(
    someVariable: 'Some value',
    someVariable2: 'Some value',
    someVariable3: 101.12,
)

//...
您还应该创建一个类
Product
,该类将包含这些变量(最好使用final关键字),然后传递该类

如果你想让你的产品在几页之内,你应该使用或打包(它实际上使用的是InheritedWidget,它更简单、更方便)

然后在这一部分做这个

Widget buildOrderItem(imagelink, productName, price, Function ontap) {
  return Container(
    child: InkWell(
      onTap: ontap,
      child: Container(
        margin: EdgeInsets.only(left: 20, right: 20, top: 10, bottom: 10),
        decoration: BoxDecoration(
            color: Colors.white, borderRadius: BorderRadius.circular(10)),
        child: Column(
          children: [
            Container(
              child: Image.asset(
                imagelink,
                width: 250,
                height: 150,
                fit: BoxFit.scaleDown,
              ),
            ),
            Container(
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  Container(
                    padding: EdgeInsets.all(20),
                    child: Text(
                      productName,
                      style: TextStyle(fontWeight: FontWeight.bold),
                    ),
                  ),
                  Container(
                    padding: EdgeInsets.all(20),
                    child: Text(
                      'N' + price.toString(),
                      style: TextStyle(
                          fontWeight: FontWeight.bold,
                          color: Colors.deepOrange),
                    ),
                  )
                ],
              ),
            ),
          ],
        ),
      ),
    ),
  );
}

我该怎么做?谢谢我对这个有点陌生。。。最近开始。@MirabeeClifonia,更新了回答我在这个```产品页面上有一些错误({需要this.someVariable,需要this.someVariable2,需要this.someVariable3,Key?Key,}):super(Key:Key)```另外,当我使用
widget.someVariable调用时,它发送null
buildOrderItem('images/shoe.jpg',“Men's Italian shoe”,150.00,(){Navigator.push(上下文,new MaterialPageRoute(builder:(context)=>new ProductPage(imagelink,productName,price));)的错误,
您得到的确切错误是什么测试后编辑了我的答案,在我这方面没有错误。当前的答案将帮助您解决问题哦,很好,它正在工作,但如何从第二页调用它。。。我还想用imagelink、productName、price、Navigator.push(上下文、new MaterialPageRoute(builder:(context)=>ProductPage('assets/images/Research.png','mans's Heel',200.00),)发送它, ); }, ), 然后在productpage上生成构造函数
Widget buildOrderItem(imagelink, productName, price, Function ontap) {
  return Container(
    child: InkWell(
      onTap: ontap,
      child: Container(
        margin: EdgeInsets.only(left: 20, right: 20, top: 10, bottom: 10),
        decoration: BoxDecoration(
            color: Colors.white, borderRadius: BorderRadius.circular(10)),
        child: Column(
          children: [
            Container(
              child: Image.asset(
                imagelink,
                width: 250,
                height: 150,
                fit: BoxFit.scaleDown,
              ),
            ),
            Container(
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  Container(
                    padding: EdgeInsets.all(20),
                    child: Text(
                      productName,
                      style: TextStyle(fontWeight: FontWeight.bold),
                    ),
                  ),
                  Container(
                    padding: EdgeInsets.all(20),
                    child: Text(
                      'N' + price.toString(),
                      style: TextStyle(
                          fontWeight: FontWeight.bold,
                          color: Colors.deepOrange),
                    ),
                  )
                ],
              ),
            ),
          ],
        ),
      ),
    ),
  );
}