微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从flutter中的另一个自定义小部件分配小部件子容器的高度和宽度

如何解决如何从flutter中的另一个自定义小部件分配小部件子容器的高度和宽度

我想更改位于 Products 自定义小部件内的容器小部件的宽度和高度,我想从另一个自定义 ProductContainer 小部件传递该宽度和高度,但是当我在 ProductContainer 中传递它时,它给出了未定义的名称高度和宽度。

这是我的代码 感谢您的帮助, 谢谢,

import 'package:myEcomm/screens/info_page.dart';
import 'package:Flutter/material.dart';

class ProductContainer extends StatefulWidget {
  final List products;
  final double height;
  final double width;
  const ProductContainer({
    Key key,this.products,this.height,this.width,}) : super(key: key);
  @override
  _ProductContainerState createState() => _ProductContainerState();
}

class _ProductContainerState extends State<ProductContainer> {
  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: Column(
        mainAxisSize: MainAxisSize.min,crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[
          SizedBox(
            height: 150,child: ListView.builder(
              scrollDirection: Axis.horizontal,itemCount: widget.products.length,itemBuilder: (context,index) {
                return forProducts(
                    image: widget.products[index]['imageLink'],tag: widget.products[index]['tag'],name: widget.products[index]['name'],category: widget.products[index]["category"],price: widget.products[index]["price"],context: context);
              },),],);
  }
}

Widget forProducts(
    {String image = "images/",@required String tag,@required String name,@required String category,@required String price,@required BuildContext context}) {
  return Column(children: [
    Material(
        child: Hero(
            tag: tag,child: GestureDetector(
              onTap: () {
                Navigator.push(
                    context,MaterialPageRoute(
                        builder: (context) => InfoPage(
                              image: image,tag: tag,name: name,category: category,price: price,)));
              },child: Container(
                padding: EdgeInsets.all(2),margin: EdgeInsets.all(5),height:
                    height,// this is the height which I want to assign from productcontainer(height: anyValue) widget
                width:
                    width,// this is the width which I want to assign from productcontainer(width: anyValue) widget
                decoration: Boxdecoration(
                  borderRadius: BorderRadius.circular(20),image: decorationImage(
                      fit: BoxFit.cover,image: Assetimage(image)),))),Text(name),]);
}

解决方法

这对我有用

import 'package:myEcomm/screens/info_page.dart';
import 'package:flutter/material.dart';

class ProductContainer extends StatefulWidget {
  final List products;
  final double height;
  final double width;
  const ProductContainer({
    Key key,this.products,this.height,this.width,}) : super(key: key);
  @override
  _ProductContainerState createState() => _ProductContainerState();
}

class _ProductContainerState extends State<ProductContainer> {
  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: Column(
        mainAxisSize: MainAxisSize.min,crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[
          SizedBox(
            height: 150,child: ListView.builder(
              scrollDirection: Axis.horizontal,itemCount: widget.products.length,itemBuilder: (context,index) {
                return forProducts(
                height: widget.height,width: widget.width,image: widget.products[index]['imageLink'],tag: widget.products[index]['tag'],name: widget.products[index]['name'],category: widget.products[index]["category"],price: widget.products[index]["price"],context: context);
              },),],);
  }
}

Widget forProducts(
    {String image = "images/",@required String tag,@required String name,@required String category,@required String price,@required double height,@required double width,@required BuildContext context}) {
  return Column(children: [
    Material(
        child: Hero(
            tag: tag,child: GestureDetector(
              onTap: () {
                Navigator.push(
                    context,MaterialPageRoute(
                        builder: (context) => InfoPage(
                              image: image,tag: tag,name: name,category: category,price: price,)));
              },child: Container(
                padding: EdgeInsets.all(2),margin: EdgeInsets.all(5),height: height,width: width,decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(20),image: DecorationImage(
                      fit: BoxFit.cover,image: AssetImage(image)),))),Text(name),]);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。