Flutter人工智能识别插件ispect_ai的使用
Flutter人工智能识别插件ispect_ai的使用
一个用于移动应用调试的便捷工具箱 🚀
ISpect 是一个灵感来自网页检查器的简单而多功能的库,专为移动应用开发设计。
这是一个附加包,用于使用 Gemini AI API 生成 `报告` 和 `日志` 问题。
给予一些❤️并 给仓库加星 以支持该项目!
包 #
ISpect 可以通过其他部分扩展。
包 | 版本 | 描述 |
---|---|---|
ispect | 主 包 | |
ispect_ai | 这是一个附加包,用于使用 Gemini AI API 生成 `报告` 和 `日志` 问题。 | |
ispect_jira | 这是一个附加包,用于使用 Jira Atlassian API 立即通过 `反馈` 创建问题单。 | |
ispect_device | 这是一个附加包,用于使用工具查看平台和设备信息。 | |
ispectify | 这是一个附加包,用于日志记录和处理。基于 Talker 。 |
|
ispectify_bloc | 这是一个附加包,用于日志记录和处理 BLoC 。 |
|
ispectify_dio | 这是一个附加包,用于日志记录和处理 Dio 。 |
|
ispectify_http | 这是一个附加包,用于日志记录和处理 http 。 |
📌 特性 #
- ✅ 可拖动面板,可导航到 ISpect 页面并管理检查器工具。 您也可以单独使用它: https://pub.dev/packages/draggable_panel
- ✅ 支持本地化:ru, en, kk。 (未来会添加更多翻译。)
- ✅
ISpectify
日志记录实现: BLoC、Dio、http、路由、Provider - ✅ 您可以在初始化 ISpect 时自定义更多选项,如 BLoC、调度器错误等。
- ✅ 更新后的 ISpect 页面:添加了更多选项。
- 详细的
HTTP
日志:请求
、响应
、错误
- 调试工具
- 缓存管理器
- 设备和应用信息 (ispect_device)
- 详细的
- ✅ 反馈构建器来自 pub.dev/feedback
- ✅ 性能跟踪器
- ✅ AI 辅助工具
📜 展示 #





易于使用 #
简单的 ISpect 使用示例。
您可以使用 ISpect.read(context)
来管理 ISpect。
将此代码放在您的项目中的任意屏幕,并了解其工作原理。 😊
使用说明: #
- 用
ISpect.run
方法包装runApp
并传递ISpectify
实例。 - 在
MaterialApp
中初始化ISpectGoogleAi
并传递 Google AI 令牌。 例如,从.env
文件或环境变量中获取。
ISpectGoogleAi.init('token');
- 在
ISpectOptions
的actionItems
中添加相应的操作按钮。 例如:
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(),
),
);
},
),
],
- 在
MaterialApp
的localizationsDelegates
中添加ISpectAILocalization
。
localizationsDelegates: ISpectLocalizations.localizationDelegates([
ExampleGeneratedLocalization.delegate, // 您的本地化代理
ISpectAILocalization.delegate, // ISpect AI 本地化代理
]),
- 使用
ISpectScopeWrapper
小部件包裹您的根小部件,以启用 ISpect,您可以在其中传递主题和选项。 - 在您的 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
更多关于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识别:
- 导入插件:
import 'package:ispect_ai/ispect_ai.dart';
- 初始化插件并进行识别:
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
类及其方法(如initialize
、recognize
)是假设的,你需要根据实际使用的AI识别插件的API文档进行替换。 _captureImageData
方法同样是一个占位符,你需要实现实际的图像数据获取逻辑,可能是从相机、图库获取,或者从网络加载图像。- 错误处理部分(如
catchError
和catch
)非常重要,以确保在初始化失败或识别失败时能够给出适当的反馈。
请确保你查阅并遵循实际使用的AI识别插件的官方文档,以获取准确的API信息和使用方法。