Flutter编程构建块插件programming_blocks的使用
Flutter编程构建块插件programming_blocks的使用

PorgrammingBlocks 允许我们定义一个自定义的编程环境,使用图形化块,而无需担心拖放的工作,或如何管理创建面板中的块。我们只需要定义我们的部分列表以及每个部分将包含的块列表。
安装
在 pubspec.yaml
文件中添加:
dependencies:
programming_blocks: ^0.0.1
简单示例
import 'package:flutter/material.dart';
import 'package:programming_blocks/programming_blocks.dart';
class ProgrammingPage extends StatelessWidget {
const ProgrammingPage({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: ProgrammingBlocks(
sections: [
FollowSection(),
LogicSection(),
NumbersSection(),
],
),
),
);
}
}
复杂示例
你可以在 example 文件夹中找到此动画的代码,在线演示
如何使用
唯一必需的属性是部分列表,其他所有属性都是设置和小部件事件监听器:
- Color? backgroundCanvasColor: 绘图画布的背景颜色。
- Curve? creationPanelAnimationCurve: 打开和关闭创建面板的动画曲线。
- Duration? creationPanelAnimationDuration: 创建面板打开和关闭动画的持续时间。
- Color? creationPanelBackgroundColor: 创建面板的背景颜色。
- double? creationPanelHeight: 创建面板的高度。
- Widget Function()? creationPanelOpenCloseBuilder: 创建面板打开/关闭按钮的小部件构建器。
- Widget Function(BuildContext context, CreationSectionData creationSectionData,bool selected)? creationSectionButtonBuilder: 每个部分在创建面板中的按钮的小部件构建器。
- double defaultFuntionSize =2000: 函数的默认大小。
- Duration? doubleTapAnimDuration: 块上的双击动画的持续时间。
- Duration dragDelay=100: 拖动块的延迟。
- bool drawMainScope=true: 是否绘制主范围。
- bool enableFunctions=true: 是否启用函数。
- Color? foregroundCanvasColor: 绘图画布前景的颜色。
- Color? functionsSectionColor: 创建面板中函数部分的颜色。
- Widget Function(BuildContext context, String tabName, bool selected)? functionTabsBuilder: 函数标签的小部件构建器。
- String mainFunctionName = ‘Main’: 主函数的名称。
- Function( RunningState runningState, )? onChangeRunningState: 更改运行状态的回调函数。
- Function(ProgrammingBlocksProjectModel projectModel)? onProjectChange: 更改项目模型的回调函数。
- double? opacityScrollBars: 滚动条的不透明度。
- ProgrammingBlocksProjectModel? projectModel: 项目模型。
- double? radiusScrollBars: 滚动条的半径。
- Widget Function(Color? enterBlockColor)? runBuilder: 运行按钮的小部件构建器。
- Color? scrollBarsColor: 滚动条的颜色。
- double? scrollBarsWeight: 滚动条的宽度。
- List[] sections: 创建面板中的部分列表。
- Widget Function()? stopBuilder: 停止按钮的小部件构建器。
- Widget Function(bool onBlockEnter)? trashBuilder: 垃圾箱图标的小部件构建器。
CreationSectionData
CreationSectionData
类包含有关部分名称和颜色的信息。
部分
SimpleSection
SimpleSection
类表示元素创建中的简单部分。该类有以下参数:
- Widget Function(CreationSectionData)? addInstanceButtonBuilder: 一个负责构建添加新实例按钮的小部件构建器。它是可选的,可以为 null。
- CreationSectionData creationSectionData: 包含创建部分数据的对象。
- List [] blocktypes: - 一个定义可以添加到部分的块类型的
<BlockType>
对象列表。
DividedSection
DividedSection
类表示元素创建中的分割部分。该类有以下参数:
- CreationSectionData creationSectionData: 包含创建部分数据的对象。
- List [] subSections: 一个包含分割部分的
<CreationSection>
的映射,其中键是子部分的名称,值是类型为<CreationSection>
的对象。
TypedSection
TypedSection
类表示元素创建中的类型化部分。该类有以下参数:
- Widget Function(BuildContext, CreationSectionData)? addInstanceButtonBuilder: - 负责构建添加新实例按钮的小部件构建器。它是可选的,可以为 null。
- CreationSectionData creationSectionData: 包含创建部分数据的对象。
- BlockType instancesblockType: 定义元素实例的块类型的对象。
- List [] instancesFunctionsBlockTypes: - 定义可以添加到元素实例中的函数的块类型的列表。
- String typeName: 表示正在创建的部分中元素类型的字符串。
必要的方法
- Future<ConfigurationBlockModel?>(BuildContext context) addInstance: 该方法必须返回由开发人员决定的方法的新
ConfigurationBlockModel
。 - void (BuildContext context, ConfigurationBlockController controller)onEditInstance: 该方法必须包含用户决定编辑/删除实例的界面。
BlockType
参数
- CreationSectionData sectionData: 包含创建部分数据的对象。
- ProgrammingBlockShape shape: 这将定义块的形状和交互。
- String name: 用以区分不同类型的块的名称。
必要的方法
- Widget(ProgrammingBlockController? blockController) nameBuilder: 构建并返回表示块名称的小部件。
blockController
参数是可选的,用于控制块的行为。 - Widget(ProgrammingBlockController? blockController) panelBuilder: 构建并返回表示块面板的小部件。
blockController
参数是可选的,用于控制块的行为。 - Future: 执行编程块。
executionController
参数是可选的,用于控制块的执行。 - Future: 从编程块读取数据。
readBlockController
参数是可选的,用于控制从块中读取数据。 - ProgrammingBlockModel? blockModel: 返回基于块形状的编程块模型。
示例代码
import 'package:example/programming_page.dart';
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
title: 'Programming blocks',
home: ProgrammingPage(),
);
}
}
更多关于Flutter编程构建块插件programming_blocks的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter编程构建块插件programming_blocks的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
programming_blocks
是一个用于 Flutter 的插件,它允许开发者通过拖放块的方式来构建程序逻辑。这种可视化编程方式通常用于教育领域,帮助初学者理解编程概念。以下是如何在 Flutter 项目中使用 programming_blocks
插件的基本步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 programming_blocks
插件的依赖。
dependencies:
flutter:
sdk: flutter
programming_blocks: ^1.0.0 # 请使用最新版本
然后,运行 flutter pub get
来获取依赖。
2. 导入库
在你的 Dart 文件中导入 programming_blocks
库。
import 'package:programming_blocks/programming_blocks.dart';
3. 创建 ProgrammingBlocks
小部件
ProgrammingBlocks
是插件提供的一个主要小部件,你可以在你的应用中使用它来创建编程块界面。
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Programming Blocks Example'),
),
body: ProgrammingBlocks(
blocks: [
// 在这里添加你的编程块
],
onRun: (List<Block> blocks) {
// 当用户点击“运行”按钮时执行的操作
print('Running blocks: $blocks');
},
),
);
}
}
4. 添加编程块
你可以在 blocks
参数中添加不同的编程块。每个块都有一个类型和一组属性。
blocks: [
Block(
type: 'start',
label: 'Start',
),
Block(
type: 'print',
label: 'Print',
properties: {
'text': 'Hello, World!',
},
),
Block(
type: 'end',
label: 'End',
),
],
5. 处理块逻辑
当用户点击“运行”按钮时,onRun
回调会被触发,并传递当前所有的块。你可以在这里处理块的逻辑。
onRun: (List<Block> blocks) {
for (var block in blocks) {
if (block.type == 'print') {
print(block.properties['text']);
}
}
},
6. 运行应用
现在,你可以运行你的 Flutter 应用,并在界面中看到编程块。用户可以通过拖放块来构建程序逻辑,并点击“运行”按钮来执行。
7. 自定义块
你还可以自定义块的类型和外观。programming_blocks
插件提供了扩展点,允许你添加新的块类型和修改现有块的行为。
示例代码
以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:programming_blocks/programming_blocks.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Programming Blocks Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Programming Blocks Example'),
),
body: ProgrammingBlocks(
blocks: [
Block(
type: 'start',
label: 'Start',
),
Block(
type: 'print',
label: 'Print',
properties: {
'text': 'Hello, World!',
},
),
Block(
type: 'end',
label: 'End',
),
],
onRun: (List<Block> blocks) {
for (var block in blocks) {
if (block.type == 'print') {
print(block.properties['text']);
}
}
},
),
);
}
}