Flutter插件gemini_flutter的使用_gemini Flutter 是一个 Dart 包,它简化了将 Gemini API 集成到 Flutter 应用程序中的过程

Flutter插件gemini_flutter的使用_gemini Flutter 是一个 Dart 包,它简化了将 Gemini API 集成到 Flutter 应用程序中的过程

Gemini Flutter 是一个 Dart 包,它简化了将 Gemini API 集成到 Flutter 应用程序中的过程。它提供了方便的方法来进行 Gemini 模型请求并处理响应。

Flutter插件gemini_flutter新特性

版本 0.1.1

  1. 添加了 countTokens() 方法 用户现在可以灵活地在外部分别使用 countTokens() 方法。过去,用户只能通过在 API 调用中设置标志来启用令牌计数。

版本 0.1.0

  1. 添加了 Gemini-Pro-Vision API 方法 引入了 Gemini-Pro-Vision API 方法以增强系统的功能。此新方法允许用户利用 Gemini Pro Vision 提供的高级功能,为改进与视觉相关的功能打开了机会。 使用我们的系统轻松管理您的图像上传。您可以提供图像路径、提交文件对象或直接使用 base64 编码——我们为您处理其余部分!

  2. 增加了令牌计数功能 添加了一个新的功能来对所有方法进行令牌计数。用户可以通过在相应方法中设置 countToken 参数来启用令牌计数。

Flutter插件gemini_flutter开始使用

要使用该包,请遵循以下步骤:

  1. pubspec.yaml 文件中添加 gemini_flutter 依赖:

    dependencies:
      gemini_flutter: ^0.0.1+1
    

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

  2. 在您的 Dart 代码中导入包:

    import 'package:gemini_flutter/gemini_flutter.dart';
    
  3. main 函数中初始化 GeminiHandler

    void main() {
      GeminiHandler().initialize(
        apiKey: "YOUR_API_KEY",
        temperature: 0.7,
        topK: 50,
        topP: 0.8,
        outputLength: 100,
      );
    
      runApp(MyApp());
    }
    

    请确保将 "YOUR_API_KEY" 替换为您的实际 Gemini API 密钥。您也可以根据需要自定义其他参数。

参数

  • temperature: 此参数控制生成文本的随机性。较高的温度(例如,0.9)会产生更多样化和有创意的输出,而较低的值(例如,0.1)则会使输出更加集中和确定性。
  • topP: 此参数用于核采样以控制生成文本的多样性。它表示要从中采样的顶级候选者的累积概率。在您的示例中,它设置为 0.95。
  • topK: 此参数是在核采样期间从多少个顶级候选者中进行采样。在您的示例中,它设置为 40。
  • outputLength: 此参数指定生成文本的期望长度。在您的示例中,它设置为 100 个字符。

使用示例

文本生成

void generateText() async {
  final response = await GeminiHandler().geminiPro(
    text: "Write a long story about a magic backpack.",
    temprature: 0.9,
    topP: 0.95,
    topK: 40,
    outputLength: 1024,
  );

  if (response != null) {
    print("Generated Text: ${response.generatedText}");
  }
}

在此函数中,调用了 GeminiHandler 类的 geminiPro 方法。 此方法似乎使用 Gemini API 生成文本。它接受各种参数:

  • text: 用于文本生成的提示(“Write a long story about a magic backpack.”)。
  • temperature: 控制生成文本随机性的参数(在此示例中为 0.9)。
  • topP: 核心采样参数,控制多样性(在此示例中为 0.95)。
  • topK: 在核心采样期间从多少个顶级候选者中进行采样(在此示例中为 40)。
  • outputLength: 生成文本的期望长度(在此示例中为 1024 个字符)。
  • countTokens: 记录此提示将消耗的令牌数量。

Gemini-pro-vision

使用 geminiProVision 方法从图像生成文本或让 Gemini Pro 告诉您图像中的内容:

void generateTextFromImage() async {
  final response = await GeminiHandler().geminiProVision(
    text: "Write a long story about the image.",
    path: "path/to/your/image.jpg",
    temprature: 0.9,
    topP: 0.95,
    topK: 40,
    outputLength: 1024,
  );

  if (response != null) {
    print("Generated Text: ${response.generatedText}");
  }
}

上述代码片段调用了 GeminiHandler 类的 geminiProVision 方法进行文本生成。以下是参数的解释:

  • text: 这个参数期望一个字符串,代表用于生成输出的输入文本或提示。在您的示例中,它设置为 “Write a long story about the image.”。
  • path: 这个参数指定图像文件的路径。在您的示例中,它设置为 “path/to/your/image.jpg”。它似乎表明文本生成与图像的内容或上下文有关。
  • imageBase64: 这个参数接受 base64 格式的图像,这是 Gemini APIs 接受图像的形式。
  • file: 这个参数接受文件对象形式的图像,所有其他转换都由包处理。
  • temperature: 控制生成文本随机性的参数(在此示例中为 0.9)。
  • topP: 核心采样参数,控制多样性(在此示例中为 0.95)。
  • topK: 在核心采样期间从多少个顶级候选者中进行采样(在此示例中为 40)。
  • outputLength: 生成文本的期望长度(在此示例中为 1024 个字符)。
  • countTokens: 记录此提示将消耗的令牌数量。

完整示例

以下是一个完整的示例代码,展示了如何在 Flutter 应用程序中使用 gemini_flutter 插件:

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

void main() {
  GeminiHandler().initialize(apiKey: "API_KEY");
  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Gemini Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

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

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String textData = "";

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text("Gemini Demo"),
      ),
      body: Center(
        child: ListView(
          padding: const EdgeInsets.symmetric(horizontal: 10),
          children: [
            const SizedBox(height: 20),
            Column(
              children: [
                ElevatedButton(
                  onPressed: () async {
                    final response = await GeminiHandler()
                        .geminiPro(text: "Write a story about Mustafa");
                    textData = response
                            ?.candidates?.first.content?.parts?.first.text ??
                        "Failed to fetch data";
                    setState(() {});
                  },
                  child: const Text("Gemini Pro"),
                ),
                ElevatedButton(
                  onPressed: () async {
                    final response = await GeminiHandler().geminiProVision(
                        logCountTokens: true,
                        base64Format: imageBase64,
                        text: "I am blind can you describe me the image");
                    textData = response
                            ?.candidates?.first.content?.parts?.first.text ??
                        "Failed to fetch data";
                    setState(() {});
                  },
                  child: const Text("Gemini Pro Vision"),
                ),
              ],
            ),
            const SizedBox(height: 20),
            const Text(
              'Press the button to get the response from Gemini',
              textAlign: TextAlign.center,
              style: TextStyle(
                fontSize: 16,
                fontWeight: FontWeight.bold,
                color: Colors.blueAccent,
              ),
            ),
            const Text(
              'Tokens Used: ',
              textAlign: TextAlign.center,
              style: TextStyle(
                fontSize: 16,
                fontWeight: FontWeight.bold,
                color: Colors.blueAccent,
              ),
            ),
            const SizedBox(height: 20),
            Text(
              textData,
            ),
          ],
        ),
      ),
      // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

更多关于Flutter插件gemini_flutter的使用_gemini Flutter 是一个 Dart 包,它简化了将 Gemini API 集成到 Flutter 应用程序中的过程的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件gemini_flutter的使用_gemini Flutter 是一个 Dart 包,它简化了将 Gemini API 集成到 Flutter 应用程序中的过程的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


探索和使用 gemini_flutter 插件时,了解其功能和API文档是至关重要的。由于我无法直接访问最新的插件文档或源代码(这些通常会在插件的GitHub仓库或pub.dev页面上提供),我将基于一般的Flutter插件使用方法和假设的API接口给出一个示例代码案例。请注意,实际使用时需要根据gemini_flutter插件的具体文档进行调整。

假设的 gemini_flutter 插件功能

假设gemini_flutter插件提供了以下主要功能:

  1. 初始化插件。
  2. 执行某些特定任务(如数据同步、设备连接等)。
  3. 监听事件或状态变化。

示例代码

1. 添加依赖

首先,在pubspec.yaml文件中添加对gemini_flutter插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  gemini_flutter: ^x.y.z  # 替换为实际版本号

运行flutter pub get来获取依赖。

2. 初始化插件

在应用的入口文件(通常是main.dart)中初始化插件:

import 'package:flutter/material.dart';
import 'package:gemini_flutter/gemini_flutter.dart'; // 假设的导入路径

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化gemini_flutter插件
  GeminiFlutter.instance.initialize().then((_) {
    runApp(MyApp());
  }).catchError((error) {
    print('Failed to initialize gemini_flutter: $error');
    runApp(MaterialApp(home: Scaffold(body: Center(child: Text('Initialization Failed')))));
  });
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

3. 使用插件功能

HomeScreen组件中使用插件提供的功能,例如执行特定任务并监听事件:

import 'package:flutter/material.dart';
import 'package:gemini_flutter/gemini_flutter.dart'; // 假设的导入路径

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  String status = 'Not Initialized';

  @override
  void initState() {
    super.initState();
    // 监听插件事件或状态变化
    GeminiFlutter.instance.addListener(() {
      setState(() {
        // 更新UI以反映插件的最新状态
        status = GeminiFlutter.instance.status; // 假设插件有一个status属性
      });
    });

    // 执行插件提供的特定任务
    GeminiFlutter.instance.performTask().then((result) {
      print('Task result: $result');
    }).catchError((error) {
      print('Task failed: $error');
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Gemini Flutter Demo'),
      ),
      body: Center(
        child: Text('Plugin Status: $status'),
      ),
    );
  }
}

注意事项

  • 实际API可能不同:上述代码是基于假设的API接口编写的,实际使用时需要参考gemini_flutter插件的官方文档。
  • 错误处理:在生产环境中,应添加更全面的错误处理和用户反馈机制。
  • 权限和配置:某些插件功能可能需要特定的设备权限或配置,请确保在AndroidManifest.xmlInfo.plist中正确配置。

结论

探索和使用gemini_flutter插件时,务必参考其官方文档和示例代码,以确保正确实现所需功能。上述示例提供了一个基本的框架,但具体实现细节将取决于插件的实际API和功能。

回到顶部