Flutter Cupertino风格表格插件cupertino_tables的使用

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

Flutter Cupertino风格表格插件cupertino_tables的使用

标题

Flutter Cupertino风格表格插件cupertino_tables的使用

内容

  • 示例工作流 example workflow

  • iOS应用内审样例 In-App Review iOS Demo

  • 功能介绍

    • 提供可配置且易于使用的Cupertino iOS风格的表格部分和表格行。
  • 安装方法

    run 'flutter pub add cupertino_tables'
    
    run 'flutter pub get'
    
  • 使用方法

    import 'package:cupertino_tables/cupertino_table_section.dart';
    import 'package:cupertino_tables/cupertino_table_row.dart';
    
    // 使用默认构造函数`CTableSection`实现长分隔符之间的行。
    CupertinoTableSection(children: []);
    
    // 使用命名构造函数`CTableSection.leaded`实现短分隔符之间的行,因为前导元素将被视为。
    CupertinoTableSection.leaded(children: []);
    
  • 额外信息

  • 贡献指南

    • 欢迎对本库进行贡献:
      • 叉开仓库
      • 添加更改(别忘了添加测试)
      • 创建Pull Request (PR)
    • 我们会尽快检查您的输入。
  • 发布者

  • 免责声明

    • 对于此库的支持仅提供“最佳努力”。
    • 此库尚未经过安全专业人士的审查或验证。

示例代码

import 'package:flutter/cupertino.dart';
import 'package:cupertino_tables/cupertino_table_row.dart';
import 'package:cupertino_tables/cupertino_table_section.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const CupertinoApp(
      debugShowCheckedModeBanner: false,
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
        navigationBar: const CupertinoNavigationBar(
          middle: Text("Cupertino Tables Demo"),
        ),
        child: Container(
          padding: const EdgeInsets.only(top: 22.0),
          color: CupertinoColors.systemGroupedBackground,
          child: SafeArea(
            top: true,
            child: Column(
              children: [
                _buildAlbumsSection(),
                _buildSettingsSection(),
                _buildSimpleSection(),
              ],
            ),
          ),
        ));
  }

  Widget _buildAlbumsSection() {
    return CupertinoTableSection(
      header: const Text("ALbums"),
      children: [
        CupertinoTableRow(
          title: const Text("Immortal Flame"),
          helper: const Text("The never ending life"),
          leading: const CupertinoTableRowIcon(
            backgroundColor: CupertinoColors.systemRed,
            icon: CupertinoIcons.flame,
          ),
          trailing: const CupertinoTableRowNavigationIndicator(),
          onPress: () {
            // do something on press
          },
        ),
        CupertinoTableRow(
          title: const Text("Happy Clouds"),
          helper: const Text("High in the sky"),
          leading: const CupertinoTableRowIcon(
            backgroundColor: CupertinoColors.activeBlue,
            icon: CupertinoIcons.cloud,
          ),
          trailing: const CupertinoTableRowNavigationIndicator(),
          onPress: () {
            // do something on press
          },
        )
      ],
    );
  }

  Widget _buildSettingsSection() {
    return CupertinoTableSection(
      header: const Text("Settings"),
      children: [
        CupertinoTableRow(
          title: const Text("Dark Mode"),
          leading: const CupertinoTableRowIcon(
            icon: CupertinoIcons.moon_stars,
          ),
          trailing: const CupertinoTableRowNavigationIndicator(),
          onPress: () {
            // do something on press
          },
        ),
        CupertinoTableRow(
          title: const Text("Card"),
          leading: const CupertinoTableRowIcon(
            backgroundColor: CupertinoColors.activeGreen,
            icon: CupertinoIcons.cart,
          ),
          trailing: const CupertinoTableRowNavigationIndicator(),
          onPress: () {
            // do something on press
          },
        ),
      ],
    );
  }

  Widget _buildSimpleSection() {
    return CupertinoTableSection(
      header: const Text("Simple List"),
      footer: const Text("Copyright © 22 AndroDevelopment"),
      children: [
        const CupertinoTableRow(
          title: Text("Some Information"),
        ),
        const CupertinoTableRow(
          title: Text("Star walking"),
          leading: Icon(
            CupertinoIcons.star,
            color: CupertinoColors.systemPurple,
          ),
        ),
        CupertinoTableRow(
          title: const Text("Turn me ON"),
          leading: const Icon(
            CupertinoIcons.lightbulb_fill,
            color: CupertinoColors.systemYellow,
          ),
          trailing: CupertinoSwitch(
            value: true,
            onChanged: (value) {
              // do something on switch
            },
          ),
        ),
      ],
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter中使用cupertino_tables插件来创建Cupertino风格的表格的示例代码。cupertino_tables并不是一个官方Flutter插件,但假设它是一个第三方库,我们可以模拟其使用方法。不过,由于cupertino_tables不是实际存在的库(至少在我最后的知识更新中),我将展示如何使用Flutter内置的Cupertino组件来创建一个类似风格的表格。

Flutter自带的Cupertino组件库提供了一些iOS风格的UI组件,虽然没有直接的表格组件,但我们可以结合CupertinoDataTable(如果存在的话,实际上Flutter标准库中只有DataTable,这里假设一个类似的实现)和CupertinoSectionedTableView来自定义实现。由于CupertinoDataTable实际上并不存在,我们将使用ListViewColumn等组件来模拟一个表格。

以下是一个示例代码,展示如何使用Flutter的Cupertino组件创建一个类似iOS风格的表格:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      home: CupertinoPageScaffold(
        navigationBar: CupertinoNavigationBar(
          middle: Text('Cupertino Style Table'),
        ),
        child: SafeArea(
          child: CustomCupertinoTable(),
        ),
      ),
    );
  }
}

class CustomCupertinoTable extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView.separated(
      padding: EdgeInsets.all(16.0),
      itemCount: data.length + 1, // +1 for header
      separatorBuilder: (_, __) => Divider(height: 1, color: CupertinoColors.inactiveGray),
      itemBuilder: (_, index) {
        if (index == 0) {
          // Table header
          return CupertinoTheme(
            data: CupertinoThemeData(
              brightness: Brightness.light,
              primaryColor: CupertinoColors.activeBlue,
            ),
            child: Row(
              children: headers.map((header) => Expanded(
                child: Center(
                  child: Text(
                    header,
                    style: TextStyle(
                      color: CupertinoColors.white,
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
              )).toList(),
            ),
          );
        } else {
          // Table rows
          final rowData = data[index - 1];
          return Row(
            children: rowData.map((cellData) => Expanded(
              child: Center(
                child: Text(
                  cellData,
                  style: TextStyle(
                    color: CupertinoColors.black,
                  ),
                ),
              ),
            )).toList(),
          );
        }
      },
    );
  }

  final List<String> headers = ['Name', 'Age', 'Occupation'];
  final List<List<String>> data = [
    ['Alice', '30', 'Engineer'],
    ['Bob', '25', 'Designer'],
    ['Charlie', '35', 'Teacher'],
  ];
}

在这个示例中:

  1. 我们使用CupertinoAppCupertinoPageScaffold来创建iOS风格的应用框架。
  2. 使用ListView.separated来创建表格,其中itemCount包括一个表头行和多个数据行。
  3. separatorBuilder用于在行之间添加分隔线。
  4. itemBuilder根据索引构建表头或数据行。表头使用CupertinoThemeRow组件,并设置文本样式以匹配iOS风格。数据行也使用Row组件,但文本样式较为简单。

请注意,这个示例并不是使用名为cupertino_tables的插件,而是展示了如何使用Flutter内置的Cupertino组件来模拟iOS风格的表格。如果cupertino_tables插件确实存在,其使用方法可能会有所不同,但核心思想将是相似的:创建表头和行,并应用适当的Cupertino样式。

回到顶部