Flutter自定义图标结构插件eticon_struct的使用
Flutter自定义图标结构插件eticon_struct的使用
![](https://user-images.githubusercontent.com/36012868/130392291-52b82b9b-fd52-424b-ba5a-b7630e9cf343.png)
安装到项目中
在 pubspec.yaml
文件中添加 eticon_struct
作为 dev_dependencies
:
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^1.0.0
eticon_struct: ^1.0.0
项目结构
项目结构如下所示:
├── 📁 assets
│ ├── 📁 fonts
│ │ └── 📄 empty.ttf
│ ├── 📁 icons
│ │ └── 🖼 empty.png
│ └── 📁 images
│ └── 🖼 empty.png
└── 📁 lib
├── 📄 main.dart
├── 📁 models
│ └── 📄 about_models.txt
├── 📁 project_utils
│ ├── 📄 pj_colors.dart
│ ├── 📄 pj_icons.dart
│ └── 📄 pj_utils.dart
├── 📁 project_widgets
│ ├── 📄 pj_appbar.dart
│ ├── 📄 pj_text.dart
│ └── 📄 pj_widgets.dart
└── 📁 screens
└── 📁 main_screen
├── 📁 cubit
│ ├── 📄 cb_main_screen.dart
│ └── 📄 st_main_screen.dart
├── 📄 main_screen.dart
└── 📄 main_screen_provider.dart
创建项目结构
在创建一个新的 Flutter 项目后,通过终端执行以下命令来创建项目结构:
flutter pub run eticon_struct:create
这将创建以下内容:
- 项目工具。
- 全局小部件。
- 资源文件夹。
- 模型文件夹。
- 一个带有与之相连的 Cubit 的基本无状态屏幕。
此外,还会添加一些基本库到项目中:
如果你想创建一个没有 Cubit 的基础屏幕,可以使用特殊标志 --without-cubit
:
flutter pub run eticon_struct:create --without-cubit
如果你想创建一个基础的有状态屏幕,可以使用特殊标志 --stf
:
flutter pub run eticon_struct:create --stf
你也可以同时使用这两个标志:
flutter pub run eticon_struct:create --stf --without-cubit
在项目中创建新的屏幕
你可以使用特殊的命令来创建新的屏幕:
flutter pub run eticon_struct:screen --name=<file_name>
例如:
flutter pub run eticon_struct:screen --name=new
执行此命令后,将在项目中添加一个名为 new_screen
的新屏幕。
注意:
名称指定方式与 Dart 文件命名相同,即使用 _
作为单词分隔符。不要在名称末尾添加 “screen”,因为创建屏幕时会自动添加!
类似于创建项目结构,你可以使用标志 --stf
(创建有状态的小部件)和 --without-cubit
(创建没有 Cubit 的屏幕)。
例如:
flutter pub run eticon_struct:screen --name=order_schedule --stf --without-cubit
创建不绑定到特定屏幕的新 Cubit
你可以创建不绑定到特定屏幕的新 Cubit:
flutter pub run eticon_struct:cubit --name=<file_name> --path=<your_path>
例如:
flutter pub run eticon_struct:cubit --name=my_cubit --path=project_utils
执行此命令后,将在 project_utils
目录下添加一个新的 Cubit:my_cubit
。
注意:
名称指定方式与 Dart 文件命名相同,即使用 _
作为单词分隔符。path
是新 Cubit 将被创建的目录路径,需要考虑到 path
将被替换为以下行:lib /
。
创建单例
你可以使用以下命令创建单例:
flutter pub run eticon_struct:singleton --name=<file_name>
例如:
flutter pub run eticon_struct:singleton --name=my_settings
执行此命令后,将在 project_utils
目录下创建一个名为 singletons
的新目录,其中包含所有创建的单例。
创建的单例结果如下:
class SgMySettings {
SgMySettings._();
static SgMySettings instance = SgMySettings._();
static int cnt = 0; // 一些变量
// 一些方法
void inc(){
cnt++;
}
}
此类将自动添加到 project_utils.dart
中。
联系我们
如果你有任何问题或建议改进这个包,请通过电子邮件联系我们:main@eticon.ru
示例代码
示例代码:main.dart
import 'package:flutter/material.dart';
void main() async {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Empty example'),
),
body: Center(
child: Container(
width: 150,
height: 150,
color: Colors.black,
),
),
);
}
}
更多关于Flutter自定义图标结构插件eticon_struct的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter自定义图标结构插件eticon_struct的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用自定义图标结构插件 eticon_struct
的示例代码案例。这个示例假定你已经添加了 eticon_struct
插件到你的 pubspec.yaml
文件中,并且已经运行了 flutter pub get
。
1. 添加依赖
首先,确保你的 pubspec.yaml
文件中包含了 eticon_struct
依赖:
dependencies:
flutter:
sdk: flutter
eticon_struct: ^最新版本号 # 替换为实际的最新版本号
2. 导入插件并定义图标数据
在你的 Dart 文件中,导入 eticon_struct
插件,并定义你的图标数据。这里我们假设你有一个简单的图标数据结构。
import 'package:flutter/material.dart';
import 'package:eticon_struct/eticon_struct.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Eticon Struct Example'),
),
body: Center(
child: CustomIconWidget(),
),
),
);
}
}
class CustomIconWidget extends StatelessWidget {
// 定义图标路径数据
final List<PathData> _iconPathData = [
PathData(
commands: [
PathCommand.moveTo(50, 50),
PathCommand.lineTo(100, 50),
PathCommand.lineTo(75, 100),
PathCommand.closePath(),
],
),
];
@override
Widget build(BuildContext context) {
return CustomPaint(
size: Size(100, 100),
painter: EticonPainter(_iconPathData),
);
}
}
// 自定义图标绘制器
class EticonPainter extends CustomPainter {
final List<PathData> pathData;
EticonPainter(this.pathData);
@override
void paint(Canvas canvas, Size size) {
final Paint paint = Paint()
..color = Colors.blue
..style = PaintingStyle.fill;
for (var path in pathData) {
final Path customPath = Path();
for (var command in path.commands) {
if (command is PathCommand.moveTo) {
customPath.moveTo(command.x, command.y);
} else if (command is PathCommand.lineTo) {
customPath.lineTo(command.x, command.y);
} else if (command is PathCommand.closePath) {
customPath.close();
}
}
canvas.drawPath(customPath, paint);
}
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return false;
}
}
3. PathData 和 PathCommand 的定义
你可能需要定义 PathData
和 PathCommand
类来存储和表示你的图标路径数据。这些类通常在你的项目中自定义,或者你可以使用现有的库(如果 eticon_struct
提供了这些类)。为了简单起见,这里假设你有一个基本的实现:
abstract class PathCommand {
void applyToPath(Path path);
}
class MoveTo implements PathCommand {
final double x, y;
MoveTo(this.x, this.y);
@override
void applyToPath(Path path) {
path.moveTo(x, y);
}
}
class LineTo implements PathCommand {
final double x, y;
LineTo(this.x, this.y);
@override
void applyToPath(Path path) {
path.lineTo(x, y);
}
}
class ClosePath implements PathCommand {
@override
void applyToPath(Path path) {
path.close();
}
}
class PathData {
final List<PathCommand> commands;
PathData({required this.commands});
}
注意
eticon_struct
插件的具体 API 可能有所不同,因此你需要查阅该插件的文档以获取准确的用法。- 上述代码示例是基于假设的 API 和数据结构。如果
eticon_struct
插件提供了不同的方式来定义和使用图标数据,请遵循插件的文档进行修改。 - 如果
eticon_struct
插件包含内置的图标数据解析和绘制功能,你可能不需要手动定义PathCommand
和PathData
类。
希望这个示例能帮助你理解如何在 Flutter 中使用 eticon_struct
插件来自定义图标结构。如果你有更具体的问题或需要进一步的帮助,请查阅该插件的官方文档或提出更详细的问题。