Flutter思维导图插件mind_map的使用

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

Flutter思维导图插件mind_map的使用

Introduction

Mind map 是一个帮助用户创建思维树的库。这个包是从 mind_map 库中分叉出来的,并添加了额外的功能。

Demo

image Screenshot 2024-01-24 at 11 16 24

示例代码

完整的示例Demo

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

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

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

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Mind map'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: SafeArea(
        child: SingleChildScrollView(
          child: Row(
            children: [
              Container(
                decoration: BoxDecoration(
                    color: Colors.grey,
                    borderRadius: BorderRadius.circular(10)),
                padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10).copyWith(right: 0),
                margin: const EdgeInsets.only(left: 10),
                child: const Text('Parent MindMap'),
              ),
              MindMap(
                padding: const EdgeInsets.only(left: 50),
                dotRadius: 4,
                children: [
                  Row(
                    children: [
                      Container(
                        decoration: BoxDecoration(
                          color: Colors.grey,
                          borderRadius: BorderRadius.circular(10),
                        ),
                        padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                        margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10).copyWith(right: 0),
                        child: const Text('Component 1'),
                      ),
                      MindMap(
                        dotRadius: 4,
                        children: [
                          Container(
                            decoration: BoxDecoration(
                              color: Colors.grey,
                              borderRadius: BorderRadius.circular(10),
                            ),
                            padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            child: const Text('Component 2'),
                          ),
                          Container(
                            decoration: BoxDecoration(
                              color: Colors.grey,
                              borderRadius: BorderRadius.circular(10),
                            ),
                            padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            child: const Text('Component 3'),
                          ),
                          Row(
                            children: [
                              Container(
                                decoration: BoxDecoration(
                                  color: Colors.grey,
                                  borderRadius: BorderRadius.circular(10),
                                ),
                                padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                                margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10).copyWith(right: 0),
                                child: const Text('Component 4'),
                              ),
                              MindMap(dotRadius: 4,
                              children: [
                                Container(
                                  decoration: BoxDecoration(
                                    color: Colors.grey,
                                    borderRadius: BorderRadius.circular(10),
                                  ),
                                  padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                                  margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                                  child: const Text('Component 5'),
                                ),
                              ]),
                            ],
                          )
                        ],
                      ),
                    ],
                  ),
                  GestureDetector(
                    onTap: () {
                      debugPrint('12313');
                    },
                    child: Container(
                      decoration: BoxDecoration(
                          color: Colors.grey,
                          borderRadius: BorderRadius.circular(10)),
                      padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                      margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                      child: const Text('Component 2'),
                    ),
                  ),
                  Container(
                    decoration: BoxDecoration(
                      color: Colors.grey,
                      borderRadius: BorderRadius.circular(10),
                    ),
                    margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                    padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                    child: const Text('Component 5'),
                  ),
                  Container(
                    decoration: BoxDecoration(
                      color: Colors.grey,
                      borderRadius: BorderRadius.circular(10),
                    ),
                    margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                    padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                    child: const Text('Component 5'),
                  ),
                  Row(
                    children: [
                      Container(
                        decoration: BoxDecoration(
                          color: Colors.grey,
                          borderRadius: BorderRadius.circular(10),
                        ),
                        margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10).copyWith(right: 0),
                        padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                        child: const Text('Component 5121212121'),
                      ),
                      MindMap(
                        dotRadius: 4,
                        children: [
                          Container(
                            decoration: BoxDecoration(
                              color: Colors.grey,
                              borderRadius: BorderRadius.circular(10),
                            ),
                            margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            child: const Text('Component 5121212121'),
                          ),
                          Container(
                            decoration: BoxDecoration(
                              color: Colors.grey,
                              borderRadius: BorderRadius.circular(10),
                            ),
                            margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            child: const Text('Component 5121212121'),
                          ),
                          Container(
                            decoration: BoxDecoration(
                              color: Colors.grey,
                              borderRadius: BorderRadius.circular(10),
                            ),
                            margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            child: const Text('Component 5121212121'),
                          ),
                          Container(
                            decoration: BoxDecoration(
                              color: Colors.grey,
                              borderRadius: BorderRadius.circular(10),
                            ),
                            margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            child: const Text('Component 5121212121'),
                          ),
                          Container(
                            decoration: BoxDecoration(
                              color: Colors.grey,
                              borderRadius: BorderRadius.circular(10),
                            ),
                            margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
                            child: const Text('Component 5121212121'),
                          ),
                        ],
                      ),
                    ],
                  )
                ],
              )
            ],
          ),
        ),
      ),
    );
  }
}

说明

  • MindMap 组件用于创建思维导图。
  • children 属性用于添加子节点。
  • dotRadius 属性用于设置连接点的半径。
  • padding 属性用于设置组件的内边距。
  • Container 组件用于创建节点内容,可以自定义样式和内容。

通过上述示例,您可以快速上手并创建复杂的思维导图。希望对您有所帮助!


更多关于Flutter思维导图插件mind_map的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter思维导图插件mind_map的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用mind_map插件来创建和显示思维导图的示例代码。这个示例将展示如何安装插件、导入必要的包以及构建一个基本的思维导图界面。

1. 安装插件

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

dependencies:
  flutter:
    sdk: flutter
  mind_map: ^最新版本号  # 请替换为实际可用的最新版本号

然后运行flutter pub get来安装依赖。

2. 导入必要的包

在你的Dart文件中,导入mind_map包:

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

3. 构建思维导图界面

下面是一个简单的示例,展示了如何使用mind_map插件来创建一个基本的思维导图:

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Mind Map Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MindMapScreen(),
    );
  }
}

class MindMapScreen extends StatefulWidget {
  @override
  _MindMapScreenState createState() => _MindMapScreenState();
}

class _MindMapScreenState extends State<MindMapScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Mind Map Example'),
      ),
      body: Center(
        child: Container(
          child: MindMapView(
            nodes: _createNodes(),
            lines: _createLines(),
          ),
        ),
      ),
    );
  }

  List<Node> _createNodes() {
    return [
      Node(
        id: 'root',
        label: 'Root Node',
        x: 300,
        y: 300,
        color: Colors.blue,
      ),
      Node(
        id: 'child1',
        label: 'Child Node 1',
        x: 150,
        y: 300,
        color: Colors.green,
      ),
      Node(
        id: 'child2',
        label: 'Child Node 2',
        x: 450,
        y: 300,
        color: Colors.red,
      ),
    ];
  }

  List<Line> _createLines() {
    return [
      Line(from: 'root', to: 'child1'),
      Line(from: 'root', to: 'child2'),
    ];
  }
}

class Node {
  final String id;
  final String label;
  final double x;
  final double y;
  final Color color;

  Node({required this.id, required this.label, required this.x, required this.y, required this.color});
}

class Line {
  final String from;
  final String to;

  Line({required this.from, required this.to});
}

注意

  • 在上面的代码中,MindMapView是一个假设的组件,用于展示思维导图。由于mind_map插件的具体API可能有所不同,你需要参考该插件的官方文档来正确实现这一组件。如果mind_map插件提供了类似MindMapView的组件,你可能需要按照文档调整节点和线条的传递方式。
  • NodeLine类是为了演示而创建的简单数据模型。你需要根据mind_map插件的实际要求来调整这些类的结构和属性。

4. 运行应用

确保你的开发环境已经正确配置,然后运行你的Flutter应用。你应该能够看到一个包含根节点和两个子节点的简单思维导图。

重要提示:由于mind_map插件的具体实现和API可能会有所不同,上述代码仅为示例,并非直接可用的完整实现。在实际开发中,请务必参考mind_map插件的官方文档和示例代码来获取准确的实现方法。

回到顶部