Flutter故事编辑器插件mirroru_story_editor的使用

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

Flutter故事编辑器插件mirroru_story_editor的使用

特性

miroru故事编辑器在主题定制和现代、可扩展架构方面具有优势。它遵循Material Design指南,使用ThemeData进行所有主题设置,简化了修改应用程序外观和感觉的过程。

  • 智能主题适应
    根据所选背景图像的亮度自动调整主题,在浅色模式和深色模式之间切换,增强用户体验和可读性。
  • 快速主题定制
    通过使用ThemeData,可以轻松高效地更改主题以匹配您的偏好或品牌身份。
  • 设计灵活
    我们的架构确保易于定制和未来的扩展,使miroru故事编辑器保持技术前沿。
  • 多语言支持
    miroru故事编辑器支持六种语言:英语、日语、中文、韩语、俄语和印地语,满足多样化用户群体的需求。

支持的语言

支持 语言
英语
日语
中文
韩语
俄语
印地语

开始使用

首先,添加插件到你的pubspec.yaml文件中:

dependencies:
  miroru_story_editor: ^最新版本号

然后运行以下命令来安装插件:

flutter pub add miroru_story_editor

使用示例

完整示例Demo

下面是一个完整的示例代码,展示了如何使用miroru_story_editor插件来创建一个简单的Flutter应用:

import 'dart:io';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:miroru_story_editor/miroru_story_editor.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:device_info_plus/device_info_plus.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

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

class _MyHomePageState extends State<MyHomePage> {
  Uint8List? image;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('miroru故事编辑器'),
      ),
      body: Column(
        children: [
          Expanded(
            child: image != null
                ? Image.memory(image!) // 显示编辑后的图片
                : Center(
                    child: Column(
                      mainAxisSize: MainAxisSize.min,
                      children: [
                        SizedBox(
                          width: 200,
                          height: 200,
                          child: Image.asset('assets/images/miroru_girl.png'), // 默认显示的图片
                        ),
                      ],
                    ),
                  ),
          ),
          Center(
            child: FilledButton(
              onPressed: () async {
                // 请求权限
                if (Platform.isAndroid) {
                  final deviceInfo = DeviceInfoPlugin();
                  final androidInfo = await deviceInfo.androidInfo;
                  if (androidInfo.version.sdkInt >= 33) {
                    await Permission.photos.request(); // Android 13及以上请求照片权限
                  } else {
                    await Permission.storage.request(); // Android 13以下请求存储权限
                  }
                } else {
                  await Permission.photos.request(); // iOS请求照片权限
                }

                // 打开图片选择器
                final file = await ImagePicker().pickImage(
                  source: ImageSource.gallery, // 从相册选择图片
                );

                if (file == null) {
                  return; // 用户取消选择
                }

                if (!context.mounted) {
                  return; // 确保上下文仍然存在
                }

                // 打开miroru故事编辑器
                final imageData = await showMiroruStoryEditor(
                  context,
                  imageFile: File(file.path), // 传递选择的图片文件
                );

                if (imageData == null) {
                  return; // 用户取消编辑
                }

                setState(() {
                  image = imageData; // 更新状态,显示编辑后的图片
                });
              },
              child: const Text('打开miroru故事编辑器'),
            ),
          ),
        ],
      ),
      bottomNavigationBar: const SafeArea(
        child: Padding(
          padding: EdgeInsets.all(8),
          child: Text(
            'naoki namba / miroru.com',
            style: TextStyle(
              fontSize: 16,
              fontWeight: FontWeight.bold,
            ),
            textAlign: TextAlign.center,
          ),
        ),
      ),
    );
  }
}

主要功能说明

  1. 权限处理
    在打开图片选择器之前,根据平台和Android版本请求相应的权限。对于Android 13及以上版本,请求照片权限;对于Android 13以下版本,请求存储权限。iOS则统一请求照片权限。

  2. 图片选择
    使用ImagePicker从相册中选择一张图片。如果用户取消选择,则不会继续执行后续操作。

  3. 打开miroru故事编辑器
    调用showMiroruStoryEditor方法,传递选择的图片文件。编辑器返回编辑后的图片数据(Uint8List),并将其显示在界面上。

  4. 显示编辑后的图片
    如果用户成功编辑了图片,编辑后的图片将显示在界面上。如果没有编辑或取消编辑,则保持原样。

自定义主题

你可以通过传递ThemeDataDto来自定义编辑器的主题。例如:

await showMiroruStoryEditor(
  context,
  imageFile: File(file.path),
  themeDataDto: ThemeDataDto(
    themeLight: yourLightTheme, // 自定义浅色主题
    themeDark: yourDarkTheme,   // 自定义深色主题
  ),
);

更改语言

你还可以通过传递languageType参数来更改编辑器的语言。例如,将语言设置为日语:

await showMiroruStory_editor(
  context,
  imageFile: File(file.path),
  languageType: LanguageType.ja, // 设置为日语
);

更多关于Flutter故事编辑器插件mirroru_story_editor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter故事编辑器插件mirroru_story_editor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用Flutter故事编辑器插件 mirroru_story_editor 的代码案例。假设你已经在你的Flutter项目中添加了该插件的依赖。

首先,确保在你的 pubspec.yaml 文件中添加 mirroru_story_editor 依赖:

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

然后运行 flutter pub get 以获取依赖。

接下来,在你的 Flutter 应用中使用 mirroru_story_editor 插件。以下是一个基本的示例代码,展示如何集成和使用该插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Story Editor Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: StoryEditorScreen(),
    );
  }
}

class StoryEditorScreen extends StatefulWidget {
  @override
  _StoryEditorScreenState createState() => _StoryEditorScreenState();
}

class _StoryEditorScreenState extends State<StoryEditorScreen> {
  MirroruStoryEditorController? _controller;

  @override
  void initState() {
    super.initState();
    _controller = MirroruStoryEditorController();
  }

  @override
  void dispose() {
    _controller?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Story Editor Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Expanded(
              child: MirroruStoryEditor(
                controller: _controller!,
                placeholder: 'Start writing your story here...',
                // 你可以在这里添加更多的配置选项
                // 例如:backgroundColor, textStyle, etc.
              ),
            ),
            SizedBox(height: 16.0),
            ElevatedButton(
              onPressed: () {
                // 获取故事内容
                final storyContent = _controller!.getStoryContent();
                // 你可以在这里处理故事内容,例如保存到数据库或显示给用户
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(
                    content: Text('Story Content: $storyContent'),
                  ),
                );
              },
              child: Text('Get Story Content'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下事情:

  1. 添加依赖:在 pubspec.yaml 文件中添加了 mirroru_story_editor 依赖。
  2. 创建主应用:在 MyApp 类中定义了应用的主题和主页 StoryEditorScreen
  3. 创建故事编辑器屏幕:在 StoryEditorScreen 类中,我们创建了一个 MirroruStoryEditorController 实例,并在 MirroruStoryEditor 小部件中使用它。
  4. 获取故事内容:在按钮点击事件中,我们通过 _controller!.getStoryContent() 方法获取故事的内容,并使用 ScaffoldMessenger.of(context).showSnackBar() 显示内容。

请注意,这只是一个基本示例,mirroru_story_editor 插件可能提供了更多功能和配置选项,你可以根据插件的文档进行更详细的配置和使用。

回到顶部