如何快速构建智能任务管理应用:Flutter与Gemini AI集成完整指南

【免费下载链接】samples A collection of Flutter examples and demos 【免费下载链接】samples 项目地址: https://gitcode.com/GitHub_Trending/sam/samples

Flutter与Gemini AI集成是构建智能任务管理应用的终极解决方案,本教程将带你从0到1实现一个功能完备的AI驱动任务管理工具。通过Flutter的跨平台优势和Gemini AI的强大自然语言处理能力,即使是新手也能轻松开发出专业级应用。

🚀 项目概述:Flutter + Gemini AI的完美结合

Gemini Tasks项目展示了如何将Google的Gemini AI模型与Flutter框架无缝集成,创建具有自然语言交互能力的智能任务管理应用。该应用允许用户通过语音或文本指令添加、查询和管理任务,实现了AI驱动的高效任务管理体验。

核心功能包括:

  • ✅ 自然语言任务创建与管理
  • ✅ 智能任务分类与查询
  • ✅ 跨平台支持(Android/iOS/macOS等)
  • ✅ 简洁直观的用户界面

项目结构清晰,主要代码位于gemini_tasks/lib/目录下,包含应用主逻辑和UI组件。

🔑 核心技术解析

Gemini AI集成原理

应用通过google_generative_ai包实现与Gemini API的通信,核心代码位于gemini_tasks/lib/main.dart。关键实现包括:

final model = GenerativeModel(
  model: 'gemini-pro',
  apiKey: widget.apiKey,
  requestOptions: const RequestOptions(apiVersion: 'v1beta'),
  tools: [/* 定义任务管理相关工具函数 */]
);

这段代码初始化了Gemini Pro模型,并配置了任务管理所需的工具函数,如添加任务、查询任务等。

任务数据结构设计

应用使用了简洁的任务数据结构:

typedef Task = (int id, {String name, String? description, bool completed});

这种不可变数据结构确保了任务数据的安全性和一致性,同时通过扩展方法实现了JSON序列化:

extension on Task {
  Map<String, Object?> toJson() {
    return {
      'id': $1,
      'name': name,
      'description': description,
      'completed': completed,
    };
  }
}

自然语言交互流程

应用实现了完整的自然语言交互流程,用户输入会被发送到Gemini AI进行处理:

Future<void> sendMessage() async {
  final message = controller.text.trim();
  if (message.isEmpty) return;
  controller.clear();
  addMessage(Sender.user, message);
  loading.value = true;
  try {
    // 构建提示并发送到Gemini AI
    final prompt = StringBuffer();
    prompt.writeln('If the following is not a question assume it is a new task to be added:');
    prompt.writeln(message);
    final response = await callWithActions([Content.text(prompt.toString())]);
    // 处理AI响应...
  } catch (e) {
    addMessage(Sender.system, 'Error sending message: $e');
  } finally {
    loading.value = false;
  }
}

📱 应用界面设计

API密钥配置界面

首次启动应用时,用户需要输入Gemini API密钥,这一功能由gemini_tasks/lib/widgets/api_key_widget.dart实现:

class ApiKeyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(title)),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              const Text('To use the Gemini API, you\'ll need an API key...'),
              const SizedBox(height: 8),
              Link(
                uri: Uri.https('aistudio.google.com', '/app/apikey'),
                target: LinkTarget.blank,
                builder: (context, followLink) => TextButton(
                  onPressed: followLink,
                  child: const Text('Get an API Key'),
                ),
              ),
            ],
          ),
        ),
      ),
      // API密钥输入框...
    );
  }
}

消息界面组件

应用的核心交互界面使用了自定义的MessageWidget组件,位于gemini_tasks/lib/widgets/message_widget.dart

class MessageWidget extends StatelessWidget {
  const MessageWidget({
    super.key,
    this.text,
    this.image,
    required this.isFromUser,
  });

  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: isFromUser ? MainAxisAlignment.end : MainAxisAlignment.start,
      children: [
        Flexible(
          child: Container(
            constraints: const BoxConstraints(maxWidth: 520),
            decoration: BoxDecoration(
              color: isFromUser 
                ? Theme.of(context).colorScheme.primaryContainer
                : Theme.of(context).colorScheme.surfaceContainerHighest,
              borderRadius: BorderRadius.circular(18),
            ),
            padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 20),
            margin: const EdgeInsets.only(bottom: 8),
            child: Column(
              children: [
                if (text case final text?) MarkdownBody(data: text),
                ?image,
              ],
            ),
          ),
        ),
      ],
    );
  }
}

这个组件支持文本和图片消息,并根据发送者(用户或系统)显示不同的样式。

上下文菜单交互

应用还展示了丰富的上下文菜单交互功能,支持多种操作:

上下文菜单示例 图:多级上下文菜单展示,支持颜色选择等高级功能

自定义菜单示例 图:自定义样式的上下文菜单,展示了Cut/Copy/Paste等常用操作

💻 快速开始:安装与配置

1. 克隆项目

git clone https://gitcode.com/GitHub_Trending/sam/samples
cd sam/samples/gemini_tasks

2. 获取Gemini API密钥

  1. 访问Google AI Studio
  2. 创建新项目并生成API密钥
  3. 保存密钥备用

3. 安装依赖

flutter pub get

4. 运行应用

flutter run

首次启动时,输入您的Gemini API密钥即可开始使用应用。

📝 使用指南:智能任务管理

添加任务

只需在输入框中输入自然语言指令,如:

  • "添加明天上午10点的会议任务"
  • "创建一个购物清单:牛奶、鸡蛋、面包"
  • "提醒我周五完成项目报告"

应用会自动解析您的指令并创建相应任务。

查询任务

您可以用自然语言查询任务:

  • "显示我所有未完成的任务"
  • "我今天有什么安排?"
  • "查找与项目相关的任务"

任务查询示例 图:应用支持识别文本中的关键信息并提供相关操作

更新任务

通过自然语言更新任务状态:

  • "将'项目报告'标记为已完成"
  • "把购物清单的截止日期改为周日"

🛠️ 扩展与定制

自定义任务类型

您可以通过修改gemini_tasks/lib/main.dart中的工具定义来扩展任务类型:

tools: [
  Tool(
    functionDeclarations: <FunctionDeclaration>[
      // 添加自定义工具函数
      FunctionDeclaration(
        'add_reminder',
        'Add a time-based reminder',
        Schema(
          SchemaType.object,
          properties: {
            'title': Schema(SchemaType.string),
            'time': Schema(SchemaType.string, format: 'date-time'),
            'repeat': Schema(SchemaType.boolean, default: false),
          },
        ),
      ),
      // 其他工具函数...
    ],
  ),
]

主题定制

应用支持主题颜色自定义,修改gemini_tasks/lib/main.dart中的主题配置:

final themeColor = ValueNotifier<Color>(Colors.orangeAccent);

您可以根据需要更改默认颜色值,或添加主题切换功能。

📚 学习资源

🎯 总结

通过本指南,您已经了解了如何使用Flutter和Gemini AI构建智能任务管理应用。这个项目展示了AI与移动应用结合的强大潜力,为用户提供了自然、高效的任务管理体验。无论是个人使用还是作为企业应用的一部分,这种AI驱动的交互方式都将成为未来应用开发的趋势。

现在就开始您的智能应用开发之旅吧!如有任何问题,可以查阅项目中的README.md或提交issue获取帮助。

【免费下载链接】samples A collection of Flutter examples and demos 【免费下载链接】samples 项目地址: https://gitcode.com/GitHub_Trending/sam/samples

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐