Flutter电商设计系统插件ecommerce_design_system_package的使用
Flutter电商设计系统插件ecommerce_design_system_package的使用
Atomic Flutter Package
Atomic Flutter Package 是一个用于Flutter应用程序的设计系统包,根据原子设计原则组织。它提供了一个结构化的UI组件层次结构,这些组件是模块化、可重用且易于集成到你的Flutter项目中的。
入门指南
安装
在pubspec.yaml
文件中添加ecommerce_design_system_package
:
dependencies:
ecommerce_design_system_package: ^1.0.0
然后运行以下命令:
flutter pub get
使用
原子(Atoms)
原子是设计系统的最基本构建块。
示例:
import 'package:ecommerce_design_system_package/atoms/skeleton_widget.dart';
SkeletonWidget(
height: 100,
width: 100,
);
分子(Molecules)
分子是由多个UI元素组成的相对简单的组合,这些元素作为一个单元共同工作。
示例:
import 'package:ecommerce_design_system_package/molecules/detail_card.dart';
ProductCard(
cardData: ProductCardModel(
id: 1,
title: '测试标题',
image: 'assets/molecule.png',
subtitle: '测试副标题'),
);
组织(Organisms)
组织是由多个分子和/或原子组成的相对复杂的UI组件。
示例:
import 'package:ecommerce_design_system_package/organisms/login_form.dart';
LoginForm(
usernameController: TextEditingController(),
passwordController: TextEditingController(),
onLogin: () => print('登录按钮被按下'),
);
模板(Templates)
模板是在页面级别上将组件放入布局中,并表达设计的基本内容结构的对象。
示例:
import 'package:ecommerce_design_system_package/templates/login_template.dart';
LoginTemplate(
usernameController: TextEditingController(),
passwordController: TextEditingController(),
onLogin: () => print('登录按钮被按下'),
);
页面(Pages)
页面是模板的具体实例,它们将实际内容填充到布局中。
示例:
import 'package:ecommerce_design_system_package/pages/login_page.dart';
LoginPage(
handleLogin: () => print('登录按钮被按下'),
usernameController: TextEditingController(),
passwordController: TextEditingController(),
);
示例代码
以下是一个完整的示例代码,展示了如何使用该插件的不同部分。
import 'package:example/pages/atoms_page.dart';
import 'package:example/pages/molecules_page.dart';
import 'package:example/pages/organism_page.dart';
import 'package:example/pages/pages_page.dart';
import 'package:example/pages/templates_page.dart';
import 'package:example/widget/option_card.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: '原子设计'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: SingleChildScrollView(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Padding(
padding: EdgeInsets.all(8.0),
child: Text(
'在这个示例中,你可以通过ecommerce_design_system_package插件理解原子设计:',
),
),
Padding(
padding: const EdgeInsets.all(18.0),
child: GridView(
shrinkWrap: true,
padding: const EdgeInsets.symmetric(vertical: 12),
physics: const NeverScrollableScrollPhysics(),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 20.0,
crossAxisSpacing: 12.0,
childAspectRatio: 1 / 1.0,
),
children: [
OptionCardWidget(
title: '原子',
urlImage: 'assets/atom.png',
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const AtomsPage()),
);
},
),
OptionCardWidget(
title: '分子',
urlImage: 'assets/molecule.png',
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MoleculesPage()),
);
},
),
OptionCardWidget(
title: '组织',
urlImage: 'assets/organism.png',
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => OrganismPage()),
);
},
),
OptionCardWidget(
title: '页面',
urlImage: 'assets/page.png',
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const PagesPage()),
);
},
),
OptionCardWidget(
title: '模板',
urlImage: 'assets/template.png',
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const TemplatesPage()),
);
},
),
],
),
),
],
),
),
),
);
}
}
更多关于Flutter电商设计系统插件ecommerce_design_system_package的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter电商设计系统插件ecommerce_design_system_package的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
ecommerce_design_system_package
是一个为 Flutter 开发者提供的电商设计系统插件,旨在帮助开发者快速构建具有一致性和可扩展性的电商应用。它通常包含了一系列预定义的组件、样式和布局,以加速开发流程并确保设计的一致性。
1. 安装插件
首先,你需要在 pubspec.yaml
文件中添加 ecommerce_design_system_package
依赖。
dependencies:
flutter:
sdk: flutter
ecommerce_design_system_package: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装插件。
2. 导入插件
在你的 Dart 文件中导入插件:
import 'package:ecommerce_design_system_package/ecommerce_design_system_package.dart';
3. 使用组件
ecommerce_design_system_package
提供了多种预定义的组件,例如按钮、卡片、导航栏、商品列表等。以下是一些常见组件的使用示例:
3.1 按钮
EcommerceButton(
onPressed: () {
print('Button Pressed!');
},
text: 'Add to Cart',
buttonType: EcommerceButtonType.primary,
);
3.2 商品卡片
EcommerceProductCard(
imageUrl: 'https://example.com/product.jpg',
title: 'Product Name',
price: 29.99,
onTap: () {
print('Product Tapped!');
},
);
3.3 导航栏
EcommerceAppBar(
title: 'My Ecommerce App',
actions: [
IconButton(
icon: Icon(Icons.search),
onPressed: () {
print('Search Pressed!');
},
),
IconButton(
icon: Icon(Icons.shopping_cart),
onPressed: () {
print('Cart Pressed!');
},
),
],
);
4. 自定义主题
ecommerce_design_system_package
通常允许你自定义主题以匹配你的品牌风格。你可以在 MaterialApp
中设置主题:
MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
// 其他自定义主题设置
),
home: MyHomePage(),
);
5. 使用布局组件
插件可能还提供了一些布局组件,例如网格布局、列表布局等,以帮助你在电商应用中展示商品。
5.1 网格布局
EcommerceGridView(
itemCount: 10,
itemBuilder: (context, index) {
return EcommerceProductCard(
imageUrl: 'https://example.com/product$index.jpg',
title: 'Product $index',
price: 19.99 + index,
);
},
);
5.2 列表布局
EcommerceListView(
itemCount: 10,
itemBuilder: (context, index) {
return EcommerceProductCard(
imageUrl: 'https://example.com/product$index.jpg',
title: 'Product $index',
price: 19.99 + index,
);
},
);