android - 如果不固定父容器的高度,GridView.Count 不可见

标签 android ios flutter

我是 Flutter 的新手,所以我无法在这段代码中找到问题所在。一切正常,但我正在尝试使用包含两行的网格列表,当我为列表的父容器提供高度时,它们工作正常,但我想根据项目包装高度。

 void main() {
  runApp(new MaterialApp(
    home: new MyHome(),
 ));
}

class MyHome extends StatefulWidget {
  @override
  _AppState createState() => _AppState();
}

TextEditingController controller = new TextEditingController();

class _AppState extends State<MyHome> {
  final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey,
      appBar: PreferredSize(
        preferredSize: Size(null, 180),
        child: CustomAppBar(_scaffoldKey, controller),
      ),
      drawer: createDrawer(),
      body: SingleChildScrollView(
        child: Container(
          color: Colors.black12,
      //=========Main Container For Scrollview==============//
          child: Padding(
            padding: const EdgeInsets.fromLTRB(0, 15, 0, 0),
            child: Column(
              children: <Widget>[
                Container(
              //================Container for Categories==================//
                  color: Colors.white,
                  child: Padding(
                    padding: const EdgeInsets.fromLTRB(15, 10, 15, 10),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: <Widget>[
                        Column(
                          children: <Widget>[
                        CircleAvatar(
                          backgroundImage:
                              ExactAssetImage('images/user_icon.png'),
                          minRadius: 20,
                          maxRadius: 30,
                        ),
                        Text(
                          'Women',
                          style: TextStyle(
                              fontSize: 13,
                              color: Colors.black,
                              fontFamily: 'SFProRegular'),
                        )
                      ],
                    ),
                    Column(
                      children: <Widget>[
                        CircleAvatar(
                          backgroundImage:
                              ExactAssetImage('images/user_icon.png'),
                          minRadius: 20,
                          maxRadius: 30,
                        ),
                        Text(
                          'Women',
                          style: TextStyle(
                              fontSize: 13,
                              color: Colors.black,
                              fontFamily: 'SFProRegular'),
                        )
                      ],
                    ),
                    Column(
                      children: <Widget>[
                        CircleAvatar(
                          backgroundImage:
                              ExactAssetImage('images/user_icon.png'),
                          minRadius: 20,
                          maxRadius: 30,
                        ),
                        Text(
                          'Women',
                          style: TextStyle(
                              fontSize: 13,
                              color: Colors.black,
                              fontFamily: 'SFProRegular'),
                        )
                      ],
                    ),
                    Column(
                      children: <Widget>[
                        CircleAvatar(
                          backgroundImage:
                              ExactAssetImage('images/user_icon.png'),
                          minRadius: 20,
                          maxRadius: 30,
                        ),
                        Text(
                          'Women',
                          style: TextStyle(
                              fontSize: 13,
                              color: Colors.black,
                              fontFamily: 'SFProRegular'),
                        )
                      ],
                    ),
                  ],
                ),
              ),
            ),
            Card(
              child: SizedBox(
                  height: 200.0,
                  child: Carousel(
                    images: [
                      NetworkImage(
                          'https://cdn-images-1.medium.com/max/2000/1*GqdzzfB_BHorv7V2NV7Jgg.jpeg'),
                      NetworkImage(
                          'https://cdn-images-1.medium.com/max/2000/1*wnIEgP1gNMrK5gZU7QS0-A.jpeg'),
                    ],
                    dotSize: 4.0,
                    dotSpacing: 15.0,
                    indicatorBgPadding: 5.0,
                    borderRadius: false,
                  )),
            ),

//======================问题来了===========//

            GridView.count(     
              childAspectRatio: 4.0,
              // Create a grid with 2 columns. If you change the scrollDirection to
              // horizontal, this produces 2 rows.
              crossAxisCount: 2,
              // Generate 100 widgets that display their index in the List.
              children: List.generate(100, (index) {
                return Center(
                  child: Text(
                    'Item $index',
                    style: Theme.of(context).textTheme.headline,
                  ),
                );
              }),
            )
          ],
        ),
      ),
    ),
    ),
    );
  }
}

最佳答案

因为您使用 SingleChildScrollView 作为您的 GridView 的父控件,所以您需要指定 primary: false shrinkWrap: true 因此 GridView 根据项目计数采用最小高度。

完整代码:

void main() {
  runApp(new MaterialApp(
    home: new MyHome(),
 ));
}

class MyHome extends StatefulWidget {
  @override
  _AppState createState() => _AppState();
}

TextEditingController controller = new TextEditingController();

class _AppState extends State<MyHome> {
  final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey,
      appBar: PreferredSize(
        preferredSize: Size(null, 180),
        child: CustomAppBar(_scaffoldKey, controller),
      ),
      drawer: createDrawer(),
      body: SingleChildScrollView(
        child: Container(
          color: Colors.black12,
      //=========Main Container For Scrollview==============//
          child: Padding(
            padding: const EdgeInsets.fromLTRB(0, 15, 0, 0),
            child: Column(
              children: <Widget>[
                Container(
              //================Container for Categories==================//
                  color: Colors.white,
                  child: Padding(
                    padding: const EdgeInsets.fromLTRB(15, 10, 15, 10),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: <Widget>[
                        Column(
                          children: <Widget>[
                        CircleAvatar(
                          backgroundImage:
                              ExactAssetImage('images/user_icon.png'),
                          minRadius: 20,
                          maxRadius: 30,
                        ),
                        Text(
                          'Women',
                          style: TextStyle(
                              fontSize: 13,
                              color: Colors.black,
                              fontFamily: 'SFProRegular'),
                        )
                      ],
                    ),
                    Column(
                      children: <Widget>[
                        CircleAvatar(
                          backgroundImage:
                              ExactAssetImage('images/user_icon.png'),
                          minRadius: 20,
                          maxRadius: 30,
                        ),
                        Text(
                          'Women',
                          style: TextStyle(
                              fontSize: 13,
                              color: Colors.black,
                              fontFamily: 'SFProRegular'),
                        )
                      ],
                    ),
                    Column(
                      children: <Widget>[
                        CircleAvatar(
                          backgroundImage:
                              ExactAssetImage('images/user_icon.png'),
                          minRadius: 20,
                          maxRadius: 30,
                        ),
                        Text(
                          'Women',
                          style: TextStyle(
                              fontSize: 13,
                              color: Colors.black,
                              fontFamily: 'SFProRegular'),
                        )
                      ],
                    ),
                    Column(
                      children: <Widget>[
                        CircleAvatar(
                          backgroundImage:
                              ExactAssetImage('images/user_icon.png'),
                          minRadius: 20,
                          maxRadius: 30,
                        ),
                        Text(
                          'Women',
                          style: TextStyle(
                              fontSize: 13,
                              color: Colors.black,
                              fontFamily: 'SFProRegular'),
                        )
                      ],
                    ),
                  ],
                ),
              ),
            ),
            Card(
              child: SizedBox(
                  height: 200.0,
                  child: Carousel(
                    images: [
                      NetworkImage(
                          'https://cdn-images-1.medium.com/max/2000/1*GqdzzfB_BHorv7V2NV7Jgg.jpeg'),
                      NetworkImage(
                          'https://cdn-images-1.medium.com/max/2000/1*wnIEgP1gNMrK5gZU7QS0-A.jpeg'),
                    ],
                    dotSize: 4.0,
                    dotSpacing: 15.0,
                    indicatorBgPadding: 5.0,
                    borderRadius: false,
                  )),
            ),
 GridView.count(   
shrinkWrap: true,
primary: false,  
              childAspectRatio: 4.0,
              // Create a grid with 2 columns. If you change the scrollDirection to
              // horizontal, this produces 2 rows.
              crossAxisCount: 2,
              // Generate 100 widgets that display their index in the List.
              children: List.generate(100, (index) {
                return Center(
                  child: Text(
                    'Item $index',
                    style: Theme.of(context).textTheme.headline,
                  ),
                );
              }),
            )
          ],
        ),
      ),
    ),
    ),
    );
  }
}

关于android - 如果不固定父容器的高度,GridView.Count 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59476148/

相关文章:

flutter - 如何在滑动时为全屏照片转换设置动画,就像在 Telegram 中一样?

android - 如何在 Flutter 中绘制矢量形状?

android - 用后端检索的领域存储数据,与解析 LocalStorage 相同

ios - 在导航栏中插入图标​​/使 BarButtonItem 不可点击 Swift iOS

ios - 试图用 `AVAssetExportSession` 分割视频

ios - swift:当我打开 View Controller 并第一次按下手势识别器时,它说我按下了两次。如何解决这个问题?

flutter 卡住 :Could not generate `toJson` code for `data` because of type

android - react native : Handle silent push notification

Android 从整个应用程序调用 asynctask

android - 重新打包 APK 文件以包含自定义 Assets - 使用什么构建工具?