Flutter网格布局插件bootstrap_grid的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter网格布局插件bootstrap_grid的使用

使用 bootstrap_grid 插件可以帮助你在 Flutter 应用中实现响应式网格布局。以下是如何使用该插件的详细步骤。

响应式网格布局

通过使用 BootstrapRowBootstrapCol,你可以获得与 Bootstrap 网格系统相似的效果。

示例代码

BootstrapRow(
  children: [
    BootstrapCol(
      lg: 12,
      child: Container(
        height: 100,
        alignment: Alignment(0, 0),
        color: Colors.purple,
        child: Text("lg : 12"),
      ),
    ),
    BootstrapCol(
      xs: 6,
      md: 3,
      child: Container(
        height: 100,
        alignment: Alignment(0, 0),
        color: Colors.green,
        child: Text("xs : 6 \r\nmd : 3"),
      ),
    ),
    BootstrapCol(
      xs: 6,
      md: 3,
      child: Container(
        height: 100,
        alignment: Alignment(0, 0),
        color: Colors.orange,
        child: Text("xs : 6 \r\nmd : 3"),
      ),
    ),
    BootstrapCol(
      xs: 6,
      md: 3,
      child: Container(
        height: 100,
        alignment: Alignment(0, 0),
        color: Colors.red,
        child: Text("xs : 6 \r\nmd : 3"),
      ),
    ),
    BootstrapCol(
      xs: 6,
      md: 3,
      child: Container(
        height: 100,
        alignment: Alignment(0, 0),
        color: Colors.blue,
        child: Text("xs : 6 \r\nmd : 3"),
      ),
    ),
  )
)

效果展示

网格布局效果 网格布局效果

响应式网格列表

ResponsiveGridList 的工作方式略有不同。你只需指定项目所需的宽度和间距,它将决定一行中可以放置多少个项目,并调整项目的宽度和间距以填充整个宽度。

示例代码

ResponsiveGridList(
  desiredItemWidth: 100,
  minSpacing: 10,
  children: [
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8,
    9,
    10,
    11,
    12,
    13,
    14,
    15,
    16,
    17,
    18,
    19,
    20
  ].map((i) {
    return Container(
      height: 100,
      alignment: Alignment(0, 0),
      color: Colors.cyan,
      child: Text(i.toString()),
    );
  }).toList()
)

效果展示

网格列表效果 网格列表效果

完整示例代码

以下是完整的示例代码,展示了如何在 Flutter 中使用 bootstrap_grid 插件。

import 'package:flutter/material.dart';
import 'package:bootstrap_grid/bootstrap_grid.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title}) : super(key: key);

  final String? title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 2,
      child: Scaffold(
        appBar: AppBar(
          title: Text(widget.title!),
          bottom: const TabBar(tabs: [
            Tab(
              text: "Grid List",
              icon: Icon(Icons.table_chart),
            ),
            Tab(
              text: "Row",
              icon: Icon(Icons.table_rows),
            ),
          ]),
        ),
        body: TabBarView(
          children: [
            _buildGridList(),
            _buildRow(),
          ],
        ),
      ),
    );
  }

  Widget _buildRow() {
    return Column(children: [
      BootstrapRow(
        horizontalSpacing: 5,
        runSpacing: 5,
        itemHeight: 150,
        children: [
          BootstrapCol(
            xs: 12,
            md: 8,
            lg: 6,
            xl: 4,
            xxl: 2,
            child: Container(
              color: Colors.blue.shade50,
              child: Text("Row 1, Col 1"),
            ),
          ),
          BootstrapCol(
            xs: 12,
            md: 4,
            lg: 6,
            xl: 4,
            xxl: 3,
            child: Container(
              color: Colors.red.shade50,
              child: Text("Row 1, Col 2"),
            ),
          ),
          BootstrapCol(
            xs: 12,
            md: 8,
            lg: 6,
            xl: 4,
            xxl: 6,
            child: Container(
              color: Colors.green.shade50,
              child: Text("Row 1, Col 3"),
            ),
          ),
        ],
      ),
      Divider(
        color: Colors.purple,
        height: 10,
        thickness: 3,
      ),
      BootstrapRow(
          horizontalSpacing: 5,
          runSpacing: 5,
          itemHeight: 100,
          children: [
            BootstrapCol(
              xs: 12,
              md: 4,
              lg: 6,
              xl: 4,
              xxl: 4,
              child: Container(
                color: Colors.blue.shade200,
                child: Text("Row 2, Col 1"),
              ),
            ),
            BootstrapCol(
              xs: 12,
              md: 4,
              lg: 6,
              xl: 4,
              xxl: 3,
              child: Container(
                color: Colors.red.shade200,
                child: Text("Row 2, Col 2"),
              ),
            ),
            BootstrapCol(
              xs: 12,
              md: 4,
              lg: 6,
              xl: 4,
              xxl: 5,
              child: Container(
                color: Colors.green.shade200,
                child: Text("Row 2, Col 3"),
              ),
            ),
          ]),
    ]);
  }

  Widget _buildGridList() {
    return BootstrapList(
        rowMainAxisAlignment: MainAxisAlignment.center,
        desiredItemWidth: 100,
        minSpacing: 10,
        children: [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18,
          19,
          20
        ].map((i) {
          return Container(
            height: 100,
            alignment: Alignment(0, 0),
            color: Colors.cyan,
            child: Text(i.toString()),
          );
        }).toList());
  }
}

更多关于Flutter网格布局插件bootstrap_grid的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网格布局插件bootstrap_grid的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,bootstrap_grid 插件允许你以类似于 Bootstrap 框架的方式来创建响应式网格布局。虽然 Flutter 本身没有直接集成 Bootstrap,但 bootstrap_grid 提供了一个方便的工具来实现类似的功能。

以下是一个使用 bootstrap_grid 插件创建简单网格布局的示例代码。首先,确保你已经在 pubspec.yaml 文件中添加了 bootstrap_grid 依赖:

dependencies:
  flutter:
    sdk: flutter
  bootstrap_grid: ^x.y.z  # 替换为最新版本号

然后,运行 flutter pub get 来获取依赖。

接下来,在你的 Dart 文件中,你可以这样使用 bootstrap_grid

import 'package:flutter/material.dart';
import 'package:bootstrap_grid/bootstrap_grid.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Bootstrap Grid Layout'),
      ),
      body: BootstrapGrid(
        columns: 12,
        children: <Widget>[
          // Row 1: Two columns, each taking 6 columns width (50% of the row)
          BootstrapGridItem(
            cols: 6,
            child: Container(
              color: Colors.lightBlue,
              child: Center(child: Text('Column 1')),
            ),
          ),
          BootstrapGridItem(
            cols: 6,
            child: Container(
              color: Colors.lightGreen,
              child: Center(child: Text('Column 2')),
            ),
          ),
          // Row 2: Three columns, each taking 4 columns width (33.33% of the row)
          BootstrapGridItem(
            cols: 4,
            child: Container(
              color: Colors.lightCoral,
              child: Center(child: Text('Column 3')),
            ),
          ),
          BootstrapGridItem(
            cols: 4,
            child: Container(
              color: Colors.lightGoldenrodYellow,
              child: Center(child: Text('Column 4')),
            ),
          ),
          BootstrapGridItem(
            cols: 4,
            child: Container(
              color: Colors.lightPink,
              child: Center(child: Text('Column 5')),
            ),
          ),
        ],
      ),
    );
  }
}

在这个示例中:

  1. BootstrapGrid 组件定义了网格布局,并指定了总共有 12 列。
  2. BootstrapGridItem 组件定义了网格中的每个项,并通过 cols 属性指定它应该占据多少列宽度。
  3. 每个 BootstrapGridItem 包含了一个 ContainerContainer 中放置了一个居中的 Text 小部件来显示列号。

这样,你就可以使用 bootstrap_grid 插件在 Flutter 中创建响应式的网格布局了。根据你的需求,你可以调整列数和每个项的宽度来创建不同的布局。

回到顶部