【问题标题】:How can I create staggered grid view like this in flutter如何在颤动中创建这样的交错网格视图
【发布时间】:2020-03-18 03:45:16
【问题描述】:

如果您需要更多信息,请发表评论。谢谢

如何创建颤动交错网格视图,如 这与每个网格图块中的 headerTile + 图像 + 居中文本

【问题讨论】:

  • 我不喜欢你的代码中的HomeHeaderTileHomeTile。请也添加它们。
  • 我已编辑此内容,请查看@RavinderKumar
  • 也许对你有帮助 link
  • 让我为你发布一个有效的答案,给我一些时间
  • @pankajsharma 我知道这个包。这个问题只是关于这个包。我不知道如何自定义这个包,这就是我寻求帮助的原因

标签: flutter dart flutter-layout


【解决方案1】:

首先,创建一个子模型类和父模型类,ParentModel 包含一个标题文本以及它的子节点列表,

class ParentModel {
  String title;
  List<ChildModel> list;
  ParentModel(this.title, this.list);
}

class ChildModel {
  String text;
  ChildModel(this.text);
}

然后创建一个 ListView,这个列表将包含标题及其子项的网格。

class ComplexList extends StatefulWidget {
  @override
  _ComplexListState createState() => _ComplexListState();
}

class _ComplexListState extends State<ComplexList> {
  List<ParentModel> parentList = List();

  @override
  void initState() {
    super.initState();
// this list is just to add dummy data, replace this with your list from api
    List<ChildModel> childList = List();
    childList.add(ChildModel('Child1'));
    childList.add(ChildModel('Child2'));
    childList.add(ChildModel('Child3'));
    childList.add(ChildModel('Child4'));
    List<ChildModel> childList1 = List();
    childList1.add(ChildModel('Child5'));
    childList1.add(ChildModel('Child6'));
    childList1.add(ChildModel('Child7'));
    childList1.add(ChildModel('Child8'));
    parentList.add(ParentModel('Title1', childList));
    parentList.add(ParentModel('Title2', childList1));
  }

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
        itemCount: parentList.length,
        itemBuilder: (context, index) {
          ParentModel parentModel = parentList[index];
          return Column(
            children: <Widget>[Text('${parentModel.title}',style: TextStyle(fontSize: 16),),
              GridView.count(
                shrinkWrap: true,
                // 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(parentModel.list.length, (index) {
                  ChildModel childModel = parentModel.list[index];
                  return Card(

                    child: Center(
                      child: Text(
                        'Item ${childModel.text}',
                        style: Theme
                            .of(context)
                            .textTheme
                            .headline,
                      ),
                    ),
                  );
                }),
              ),
            ],
          );
        });
  }
}

这段代码的输出,

【讨论】:

  • 不可以,不用它也能实现上面的设计。无需为此添加额外的依赖项。
  • 背景图片或图标怎么样
  • 我使用的是深色主题,这就是为什么它在您的情况下显示为黑色,它会自动采用浅色主题。只需将您的卡片包裹在一个容器中,并在那里给一个蓝色背景。
  • 此代码有效,但滚动变慢。有时滚动不起作用
  • Flutter 应用在​​调试模式下运行缓慢。尝试安装发布apk。转到终端并输入flutter run --release
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多