Flutter自定义原子设计系统插件custom_atomic_design_co的使用

Flutter自定义原子设计系统插件custom_atomic_design_co的使用


CUSTOM_ATOMIC_DESIGN_CO

此包代表在原子设计系统下创建的Sign_in页面。

alt text


概述

CUSTOM_ATOMIC_DESIGN_CO 是一个用于实现基于原子设计原则的Flutter设计系统的包。该包允许开发者在其Flutter应用中创建并维护一致的设计系统。此外,该包还包括一个展示示例,以演示每个组件的功能。


目录


开始使用

安装

要安装该包,请将其添加到您的pubspec.yaml文件中:

dependencies:
  custom_atomic_design_co:
    git:
      url: https://github.com/tiancris01/CUSTOM_ATOMIC_DESIGN_CO.git
      ref: main

然后运行以下命令以获取依赖项:

flutter pub get

使用

要在Dart文件中导入该包并使用其中的组件,请执行以下操作:

import 'package:custom_atomic_design_co/custom_atomic_design_co.dart';

现在您可以将这些组件集成到您的Flutter应用程序中。


示例

一个完整的示例应用程序包含在example目录中。要运行该示例,请按照以下步骤操作:

  1. 克隆存储库。
  2. 转到example目录。
  3. 运行flutter pub get以获取依赖项。
  4. 运行flutter run以启动应用程序。

该示例展示了所有组件的实际效果,并演示了如何在自己的项目中使用它们。


组件

原子

原子是设计的最小构建块。例如按钮、文本字段和标签。

示例

class ButtonAtom extends StatelessWidget {
  const ButtonAtom({
    super.key,
    required Widget child,
    required VoidCallback onPressed,
  })  : _child = child,
        _hasBorder = false,
        _onPressed = onPressed;

  const ButtonAtom.border({
    super.key,
    required Widget child,
    required String label,
    required VoidCallback onPressed,
  })  : _child = child,
        _hasBorder = true,
        _onPressed = onPressed;

  final Widget _child;
  final bool _hasBorder;
  final VoidCallback _onPressed;

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      style: ElevatedButton.styleFrom(
        backgroundColor: _hasBorder
            ? ColorFoundation.background.bgWhite
            : ColorFoundation.background.bgPrimary,
        foregroundColor: _hasBorder
            ? ColorFoundation.background.bgPrimary
            : ColorFoundation.background.bgWhite,
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(SizeFoundations.radius.r_8),
          side: BorderSide(
            color: _hasBorder
                ? ColorFoundation.border.borderDark
                : Colors.transparent,
            width: _hasBorder ? 1 : 0,
          ),
        ),
      ),
      onPressed: _onPressed,
      child: _child,
    );
  }
}

分子

分子是由原子组合而成的相对简单的UI组件。例如,带输入字段的表单标签或一组按钮。

示例

class SignInInputMolecule extends StatelessWidget {
  final String emailText;
  final String passwordText;

  final String emailTextFieldHint;
  final String passwordTextFieldHint;

  const SignInInputMolecule({
    super.key,
    required this.emailText,
    required this.passwordText,
    required this.emailTextFieldHint,
    required this.passwordTextFieldHint,
  });

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        SizedBox(height: SizeFoundations.size.w_16),
        Align(
          alignment: Alignment.centerLeft,
          child: Text(emailText),
        ),
        SizedBox(height: SizeFoundations.size.w_12),
        TextFieldAtom(
          hintText: emailTextFieldHint,
          keyboardType: TextInputType.emailAddress,
        ),
        SizedBox(height: SizeFoundations.size.w_16),
        Align(
          alignment: Alignment.centerLeft,
          child: Text(passwordText),
        ),
        SizedBox(height: SizeFoundations.size.w_12),
        TextFieldAtom.password(
          hintText: passwordTextFieldHint,
          keyboardType: TextInputType.number,
        ),
      ],
    );
  }
}

有机体

有机体是相对复杂的UI组件,构成界面的不同部分。例如标题、页脚或带有筛选器的搜索栏。

示例

class SignInCardOrganism extends StatelessWidget {
  final SignInCardInputParams signInCardInputParams;
  final SignInCardButtonParams signInCardButtonParams;

  const SignInCardOrganism({
    super.key,
    required this.signInCardInputParams,
    required this.signInCardButtonParams,
  });

  @override
  Widget build(BuildContext context) {
    return Card(
      child: Padding(
        padding: EdgeInsets.all(SizeFoundations.radius.r_16),
        child: Column(
          children: [
            SignInInputMolecule(
              emailText: signInCardInputParams.emailText,
              emailTextFieldHint: signInCardInputParams.emailTextFieldHint,
              passwordText: signInCardInputParams.passwordText,
              passwordTextFieldHint:
                  signInCardInputParams.passwordTextFieldHint,
            ),
            Align(
              alignment: Alignment.centerRight,
              child: TextButton(
                onPressed: signInCardButtonParams.onForgotPasswordTap,
                child: Text(signInCardButtonParams.forgotPasswordText),
              ),
            ),
            Row(
              children: [
                Expanded(
                  child: SizedBox(
                    height: SizeFoundations.size.w_48,
                    child: ButtonAtom(
                      onPressed: signInCardButtonParams.onButtonTap,
                      child: Text(signInCardButtonParams.buttonText),
                    ),
                  ),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

模板

模板是页面级别的对象,将组件放置在布局中,并表达设计的基础内容结构。

示例

class SignInTemplate extends StatelessWidget {
  final String title;

  final SignInCardInputParams signInCardInputParams;
  final SignInCardButtonParams signInCardButtonParams;

  const SignInTemplate({
    super.key,
    required this.title,
    required this.signInCardInputParams,
    required this.signInCardButtonParams,
  });

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBarAtom(title: title),
      body: SafeArea(
        child: Padding(
          padding: EdgeInsets.all(SizeFoundations.size.w_16),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              SizedBox(height: SizeFoundations.size.w_16),
              SignInCardOrganism(
                signInCardInputParams: signInCardInputParams,
                signInCardButtonParams: signInCardButtonParams,
              ),
              SizedBox(height: SizeFoundations.size.w_16),
            ],
          ),
        ),
      ),
    );
  }
}

贡献

如果您希望为该包做出贡献,请按照以下步骤操作:

  1. Fork 仓库。
  2. 创建新分支(git checkout -b feature-branch)。
  3. 提交更改(git commit -am 'Add new feature')。
  4. 推送到分支(git push origin feature-branch)。
  5. 创建一个新的Pull Request。

许可证

该项目受MIT许可证保护 - 请参阅LICENSE文件了解详细信息。

Feel free to modify the examples and descriptions to better match your package's actual implementation.
1 回复

更多关于Flutter自定义原子设计系统插件custom_atomic_design_co的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


custom_atomic_design_co 是一个假设的 Flutter 插件,用于帮助开发者实现原子设计系统(Atomic Design System)。原子设计系统是一种将 UI 组件分解为更小、更可重用的部分的设计方法,通常包括原子(Atoms)、分子(Molecules)、组织(Organisms)、模板(Templates)和页面(Pages)。

以下是如何使用 custom_atomic_design_co 插件的步骤:

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 custom_atomic_design_co 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  custom_atomic_design_co: ^1.0.0  # 假设版本号为 1.0.0

然后运行 flutter pub get 来安装插件。

2. 导入插件

在你的 Dart 文件中导入插件:

import 'package:custom_atomic_design_co/custom_atomic_design_co.dart';

3. 使用原子组件

假设 custom_atomic_design_co 提供了一些预定义的原子组件,比如按钮、文本、图标等。你可以直接在代码中使用这些组件。

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Atomic Design Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            AtomicButton(
              onPressed: () {
                print('Button Pressed');
              },
              text: 'Click Me',
            ),
            SizedBox(height: 20),
            AtomicText(
              text: 'Hello, Atomic Design!',
              style: TextStyle(fontSize: 24),
            ),
          ],
        ),
      ),
    );
  }
}

4. 创建自定义原子组件

如果你需要创建自定义的原子组件,可以使用插件提供的基类或工具函数。

class CustomAtomicButton extends StatelessWidget {
  final String text;
  final VoidCallback onPressed;

  CustomAtomicButton({required this.text, required this.onPressed});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: onPressed,
      child: Text(text),
    );
  }
}

5. 组合分子组件

分子组件是由多个原子组件组合而成的。你可以使用原子组件来构建分子组件。

class SearchBar extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        Expanded(
          child: AtomicTextField(
            hintText: 'Search...',
          ),
        ),
        SizedBox(width: 10),
        AtomicButton(
          onPressed: () {
            print('Search');
          },
          text: 'Search',
        ),
      ],
    );
  }
}

6. 构建组织组件

组织组件是由多个分子组件组合而成的,通常代表一个完整的 UI 部分。

class Header extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        SearchBar(),
        SizedBox(height: 20),
        AtomicText(
          text: 'Welcome to the Atomic Design System',
          style: TextStyle(fontSize: 20),
        ),
      ],
    );
  }
}

7. 使用模板和页面

模板和页面是更高层次的组件,通常用于定义页面的整体布局。

class HomePageTemplate extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Page'),
      ),
      body: Column(
        children: <Widget>[
          Header(),
          Expanded(
            child: ListView(
              children: <Widget>[
                // Add more components here
              ],
            ),
          ),
        ],
      ),
    );
  }
}

8. 运行应用

最后,你可以在 main.dart 中运行你的应用。

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Atomic Design Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePageTemplate(),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!