Flutter人工智能识别插件ispect_ai的使用

Flutter人工智能识别插件ispect_ai的使用

一个用于移动应用调试的便捷工具箱 🚀

ISpect 是一个灵感来自网页检查器的简单而多功能的库,专为移动应用开发设计。 这是一个附加包,用于使用 Gemini AI API 生成 `报告` 和 `日志` 问题。
给予一些❤️并 给仓库加星 以支持该项目!

Pub License: MIT Pub
Pub likes Pub popularity Pub points

#

ISpect 可以通过其他部分扩展。

版本 描述
ispect Pub
ispect_ai Pub 这是一个附加包,用于使用 Gemini AI API 生成 `报告` 和 `日志` 问题。
ispect_jira Pub 这是一个附加包,用于使用 Jira Atlassian API 立即通过 `反馈` 创建问题单。
ispect_device Pub 这是一个附加包,用于使用工具查看平台和设备信息。
ispectify Pub 这是一个附加包,用于日志记录和处理。基于 Talker
ispectify_bloc Pub 这是一个附加包,用于日志记录和处理 BLoC
ispectify_dio Pub 这是一个附加包,用于日志记录和处理 Dio
ispectify_http Pub 这是一个附加包,用于日志记录和处理 http

📌 特性 #

  • ✅ 可拖动面板,可导航到 ISpect 页面并管理检查器工具。 您也可以单独使用它: https://pub.dev/packages/draggable_panel
  • ✅ 支持本地化:ru, en, kk。 (未来会添加更多翻译。)
  • ISpectify 日志记录实现: BLoCDiohttp路由Provider
  • ✅ 您可以在初始化 ISpect 时自定义更多选项,如 BLoC、调度器错误等。
  • ✅ 更新后的 ISpect 页面:添加了更多选项。
    • 详细的 HTTP 日志: 请求响应错误
    • 调试工具
    • 缓存管理器
    • 设备和应用信息 (ispect_device)
  • ✅ 反馈构建器来自 pub.dev/feedback
  • ✅ 性能跟踪器
  • ✅ AI 辅助工具

📜 展示 #

易于使用 #

简单的 ISpect 使用示例。
您可以使用 ISpect.read(context) 来管理 ISpect。 将此代码放在您的项目中的任意屏幕,并了解其工作原理。 😊

使用说明: #

  1. ISpect.run 方法包装 runApp 并传递 ISpectify 实例。
  2. MaterialApp 中初始化 ISpectGoogleAi 并传递 Google AI 令牌。 例如,从 .env 文件或环境变量中获取。
ISpectGoogleAi.init('token');
  1. ISpectOptionsactionItems 中添加相应的操作按钮。 例如:
actionItems: [
          ISpectifyActionItem(
            title: 'AI Chat',
            icon: Icons.bubble_chart,
            onTap: (context) {
              Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (context) => const AiChatPage(),
                ),
              );
            },
          ),
          ISpectifyActionItem(
            title: 'AI Reporter',
            icon: Icons.report_rounded,
            onTap: (context) {
              Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (context) => const AiReporterPage(),
                ),
              );
            },
          ),
        ],
  1. MaterialApplocalizationsDelegates 中添加 ISpectAILocalization
localizationsDelegates: ISpectLocalizations.localizationDelegates([
          ExampleGeneratedLocalization.delegate, // 您的本地化代理
          ISpectAILocalization.delegate, // ISpect AI 本地化代理
        ]),
  1. 使用 ISpectScopeWrapper 小部件包裹您的根小部件,以启用 ISpect,您可以在其中传递主题和选项。
  2. 在您的 Material App 的 builder 中添加 ISpectBuilder 小部件,并放入 NavigatorObserver

请参阅 example 获取更多详细信息。

注意

  • 要添加 ISpect Jira,请遵循此处提供的说明 ispect_jira

您还可以直接查看 ispect_jira/example 中的使用示例。

  • 要使用 平台 & 设备 工具,请遵循此处提供的说明 ispect_device

您还可以直接查看 ispect_device/example 中的使用示例。

对于路由处理 (GoRouter) #

您可以使用 ISpectNavigatorObserver,但在实践中它并不总是与 GoRouter 包正确配合工作。您需要在每个 GoRoute 中添加观察者。 或者,您可以使用 listener

_router.routerDelegate.addListener(() {
  final String location = _router.routerDelegate.currentConfiguration.last.matchedLocation;
  ISpect.route(location);
});

引用的包: #

我在 ISpect 中使用的优秀包列表: path_provider, device_info_plus, share_plus, package_info_plus, gap, auto_size_text, feedback, inspector, performance, cr_json_widget


感谢所有为这个包做出贡献的人


示例代码

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:ispect/ispect.dart';
import 'package:ispect_ai/ispect_ai.dart';
import 'package:ispect_example/src/core/localization/generated/app_localizations.dart';
import 'package:ispect_example/theme_manager.dart';
import 'package:ispectify_dio/dio_logger_interceptor.dart';

// Dio 实例
final dio = Dio(
  BaseOptions(
    baseUrl: 'https://jsonplaceholder.typicode.com',
  ),
);

void main() {
  final iSpectify = ISpectifyFlutter.init();

  ISpect.run(
    () => runApp(
      ThemeProvider(
        child: App(iSpectify: iSpectify),
      ),
    ),
    iSpectify: iSpectify,
    isPrintLoggingEnabled: true,
    onInitialized: () {
      dio.interceptors.add(
        ISpectifyDioLogger(
          iSpectify: ISpect.iSpectify,
        ),
      );
    },
  );
}

class App extends StatefulWidget {
  final ISpectify iSpectify;
  const App({super.key, required this.iSpectify});

  [@override](/user/override)
  State<App> createState() => _AppState();
}

class _AppState extends State<App> {
  [@override](/user/override)
  void initState() {
    super.initState();
    ISpectGoogleAi.init('token');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    const locale = Locale('en');
    final observer = ISpectNavigatorObserver();

    final themeMode = ThemeProvider.themeMode(context);

    return ISpectScopeWrapper(
      options: ISpectOptions(
        locale: locale,
        actionItems: [
          ISpectifyActionItem(
            title: 'AI Chat',
            icon: Icons.bubble_chart,
            onTap: (context) {
              Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (context) => const AiChatPage(),
                ),
              );
            },
          ),
          ISpectifyActionItem(
            title: 'AI Reporter',
            icon: Icons.report_rounded,
            onTap: (context) {
              Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (context) => const AiReporterPage(),
                ),
              );
            },
          ),
        ],
      ),
      isISpectEnabled: true,
      child: MaterialApp(
        navigatorObservers: [observer],
        locale: locale,
        supportedLocales: ExampleGeneratedLocalization.supportedLocales,
        localizationsDelegates: ISpectLocalizations.localizationDelegates([
          ExampleGeneratedLocalization.delegate,
          ISpectAILocalization.delegate,
        ]),
        theme: ThemeData.from(
          colorScheme: ColorScheme.fromSeed(
            seedColor: Colors.blue,
            brightness: Brightness.light,
          ),
        ),
        darkTheme: ThemeData.from(
          colorScheme: ColorScheme.fromSeed(
            seedColor: Colors.blue,
            brightness: Brightness.dark,
          ),
        ),
        themeMode: themeMode,
        builder: (context, child) {
          child = ISpectBuilder(
            observer: observer,
            initialPosition: (x: 0, y: 200),
            onPositionChanged: (x, y) {
              debugPrint('x: $x, y: $y');
            },
            child: child,
          );
          return child;
        },
        home: const _Home(),
      ),
    );
  }
}

class _Home extends StatelessWidget {
  const _Home();

  [@override](/user/override)
  Widget build(BuildContext context) {
    final themeMode = ThemeProvider.themeMode(context);

    return Scaffold(
      appBar: AppBar(
        title: Text(ExampleGeneratedLocalization.of(context)!.app_title),
        actions: [
          IconButton(
            icon: Icon(
              themeMode == ThemeMode.dark ? Icons.dark_mode : Icons.light_mode,
            ),
            onPressed: () {
              ThemeProvider.toggleTheme(context);
            },
          ),
        ],
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                dio.get('/posts/1');
              },
              child: const Text('发送 HTTP 请求'),
            ),
            ElevatedButton(
              onPressed: () {
                dio.get('/post3s/1');
              },
              child: const Text('发送带错误的 HTTP 请求'),
            ),
            ElevatedButton(
              onPressed: () {
                dio.options.headers.addAll({
                  'Authorization': 'Bearer token',
                });
                dio.get('/posts/1');
                dio.options.headers.remove('Authorization');
              },
              child: const Text('发送带有 Token 的 HTTP 请求'),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter人工智能识别插件ispect_ai的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter人工智能识别插件ispect_ai的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用ispect_ai插件进行人工智能识别的代码示例。ispect_ai是一个假设的插件名称,实际使用时请确保你有一个真实存在的、支持Flutter的AI识别插件,并参考其官方文档进行具体实现。由于ispect_ai并非一个真实存在的公开插件,以下代码将基于一个假设的插件API结构来编写。

首先,确保你已经在pubspec.yaml文件中添加了ispect_ai插件依赖(注意:这里ispect_ai是假设的,你需要替换为实际的插件名称和版本):

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

然后,运行flutter pub get来安装插件。

接下来,在你的Flutter项目中,你可以按照以下步骤使用ispect_ai插件进行AI识别:

  1. 导入插件
import 'package:ispect_ai/ispect_ai.dart';
  1. 初始化插件并进行识别
void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late IspectAi _ispectAi;
  String _recognitionResult = '';

  @override
  void initState() {
    super.initState();
    // 初始化插件
    _ispectAi = IspectAi();
    // 假设有一个方法用于加载模型或进行必要的初始化
    _ispectAi.initialize().then((_) {
      // 加载完成后,可以进行识别操作
      _performRecognition();
    }).catchError((error) {
      print('Initialization failed: $error');
    });
  }

  void _performRecognition() async {
    // 假设有一个方法用于从图像或摄像头获取输入数据
    var imageData = await _captureImageData();

    try {
      // 进行AI识别
      var result = await _ispectAi.recognize(imageData);
      // 更新UI显示识别结果
      setState(() {
        _recognitionResult = result.description; // 假设result有一个description字段
      });
    } catch (error) {
      print('Recognition failed: $error');
    }
  }

  // 这是一个假设的方法,用于获取图像数据
  Future<Uint8List> _captureImageData() async {
    // 这里可以是从相机、图库获取图像数据,或者从网络加载图像数据
    // 由于这是一个示例,我们直接返回一个空的Uint8List
    return Uint8List.fromList([]); // 需要替换为实际的图像数据获取逻辑
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('AI Recognition Demo'),
        ),
        body: Center(
          child: Text('Recognition Result: $_recognitionResult'),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            // 触发新的识别操作(这里可以是一个按钮点击事件)
            _performRecognition();
          },
          tooltip: 'Recognize',
          child: Icon(Icons.camera_alt),
        ),
      ),
    );
  }
}

注意

  • 上述代码中的IspectAi类及其方法(如initializerecognize)是假设的,你需要根据实际使用的AI识别插件的API文档进行替换。
  • _captureImageData方法同样是一个占位符,你需要实现实际的图像数据获取逻辑,可能是从相机、图库获取,或者从网络加载图像。
  • 错误处理部分(如catchErrorcatch)非常重要,以确保在初始化失败或识别失败时能够给出适当的反馈。

请确保你查阅并遵循实际使用的AI识别插件的官方文档,以获取准确的API信息和使用方法。

回到顶部