Flutter浏览器AI功能插件chrome_ai的使用
Flutter浏览器AI功能插件chrome_ai的使用
ChromeAI
最近,Chrome 浏览器新增了 window.ai
功能——内置了 Gemini Nano AI 模型,这意味着开发者可以在浏览器中直接使用设备上的 AI 而无需任何配置。
我相信这将真正改变网络应用。应用场景无穷无尽:智能自动补全、错误修正与验证、自然语言过滤、表单自动填充、UI 建议、初步摘要和搜索等。
因此,我开发了一个库来在 Flutter 中启用此功能。有了这个库,你也可以轻松地在 Flutter Web 中使用这一功能。
安装
你可以观看以下视频了解如何在 Chrome 中启用 AI 并运行此库。
1. 启用 AI 在 Chrome 中
Chrome 内置的 AI 是一个预览功能,你需要使用版本 127 或更高的 Chrome,现在可以在 开发版 或 Canary 版 中找到,可能在 2024 年 7 月 17 日发布到稳定版。
之后,你需要开启以下标志:
<a>chrome://flags/#prompt-api-for-gemini-nano</a>
:启用
<a>chrome://flags/#optimization-guide-on-device-model</a>
:启用 BypassPrefRequirement
<a>chrome://components/</a>
: 点击Optimization Guide On Device Model
下载模型。
2. 添加库
flutter pub add chrome_ai
3. 运行你的项目
1. 打开终端并运行 Web 服务器
flutter run -d web-server
2. 打开 Chrome 开发版或 Canary 版,并在 http://localhost:port
中打开你的项目
使用
检查 Chrome AI 的可用性
import 'package:chrome_ai/chrome_ai.dart';
final availability = await ChromeAI.canCreateTextSession();
if(availability == AIModelAvailability.no){
// 无法创建文本会话
}else if(availability == AIModelAvailability.afterDownload) {
// 需要下载模型
}else if(availability == AIModelAvailability.readily){
// 模型已准备好
}
生成文本
import 'package:chrome_ai/chrome_ai.dart';
final session = await ChromeAI.createTextSession();
var result = await session.prompt("为什么天空是蓝色的?");
print(result);
生成流式文本
import 'package:chrome_ai/chrome_ai.dart';
final session = await ChromeAI.createTextSession();
final stream = session.promptStreaming("为什么天空是蓝色的?");
stream.listen((result) {
print(result);
}).onError((e, stackTrace) {
print(e.toString());
});
需要帮助!
该项目非常新。如果你有任何问题,请打开一个 issue。贡献非常欢迎。
示例代码
以下是完整的示例代码,展示了如何在 Flutter 应用中使用 chrome_ai
插件。
import 'package:chrome_ai/chrome_ai.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final TextEditingController _controller =
TextEditingController(text: "为什么天空是蓝色的?");
String _displayText = "This space is filled with text.";
String? _error;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
controller: _controller,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: '输入一些文本',
),
),
const SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () async {
final availability = await ChromeAI.canCreateTextSession();
if (availability == AIModelAvailability.no) {
// 无法创建文本会话
} else if (availability ==
AIModelAvailability.afterDownload) {
// 需要下载模型
} else if (availability == AIModelAvailability.readily) {
// 模型已准备好
}
setState(() {
_displayText = availability.toString();
});
},
child: const Text('是否可以创建文本会话?'),
),
const SizedBox(width: 10),
ElevatedButton(
onPressed: () async {
final session = await ChromeAI.createTextSession();
var result = await session.prompt(_controller.text);
setState(() {
_displayText = result;
});
},
child: const Text('生成文本'),
),
const SizedBox(width: 10),
ElevatedButton(
onPressed: () async {
final session = await ChromeAI.createTextSession();
final stream = session.promptStreaming(_controller.text);
stream.listen((result) {
setState(() {
_displayText = result;
});
}).onError((e, stackTrace) {
setState(() {
_error = e.toString();
});
});
},
child: const Text('流式生成文本'),
),
],
),
const SizedBox(height: 20),
if (_error != null)
Text('错误: $_error', style: const TextStyle(color: Colors.red)),
Expanded(
child: SingleChildScrollView(
child: Text(
_displayText,
style: Theme.of(context).textTheme.bodyLarge,
),
),
),
],
),
),
);
}
}
更多关于Flutter浏览器AI功能插件chrome_ai的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter浏览器AI功能插件chrome_ai的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,作为一个IT专家,我可以为你提供一个关于如何在Flutter项目中集成并使用chrome_ai
插件的示例代码。chrome_ai
是一个假设存在的插件,用于在Flutter应用中提供基于Chrome的AI功能。请注意,实际开发中可能需要查找并安装真实的插件,或者根据具体插件的文档进行调整。
以下是一个基本的示例,展示了如何在Flutter应用中集成并使用一个名为chrome_ai
的插件。
1. 添加插件依赖
首先,你需要在pubspec.yaml
文件中添加chrome_ai
插件的依赖。请注意,这里的插件名和版本号是假设的,你需要根据实际情况进行替换。
dependencies:
flutter:
sdk: flutter
chrome_ai: ^1.0.0 # 假设的版本号
2. 导入插件并初始化
在你的Flutter应用的Dart文件中(例如main.dart
),导入chrome_ai
插件并进行初始化。
import 'package:flutter/material.dart';
import 'package:chrome_ai/chrome_ai.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Chrome AI Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: ChromeAIDemo(),
);
}
}
class ChromeAIDemo extends StatefulWidget {
@override
_ChromeAIDemoState createState() => _ChromeAIDemoState();
}
class _ChromeAIDemoState extends State<ChromeAIDemo> {
ChromeAI? chromeAI;
@override
void initState() {
super.initState();
// 初始化chrome_ai插件
chromeAI = ChromeAI();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Chrome AI Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'使用Chrome AI插件',
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
// 调用AI功能,例如文本分析
chromeAI?.analyzeText("Hello, this is a test text for Chrome AI plugin.")
.then((result) {
// 处理结果
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text("AI 分析结果: $result"),
),
);
})
.catchError((error) {
// 处理错误
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text("AI 分析出错: $error"),
backgroundColor: Colors.red,
),
);
});
},
child: Text('分析文本'),
),
],
),
),
);
}
}
3. 插件方法实现(假设)
请注意,这里的ChromeAI
类和它的analyzeText
方法是假设的。在实际开发中,你需要根据chrome_ai
插件提供的API文档来实现这些方法。
class ChromeAI {
// 假设的API调用,实际开发中需要替换为插件提供的真实方法
Future<String> analyzeText(String text) async {
// 这里应该包含与Chrome AI服务交互的代码
// 例如发送HTTP请求,处理响应等
// 这里仅返回一个假设的结果
return "Analyzed text: $text";
}
}
注意事项
- 插件真实性:
chrome_ai
是一个假设的插件名称,你需要查找并安装一个真实存在的、提供类似功能的Flutter插件。 - API文档:实际开发中,你需要参考插件的官方API文档来了解如何正确初始化插件、调用其功能以及处理错误。
- 权限和网络:如果你的插件需要与互联网上的AI服务交互,确保你的应用有适当的网络权限,并处理网络错误和超时情况。
希望这个示例能帮助你在Flutter项目中集成并使用chrome_ai
插件(或类似的插件)。如果有任何其他问题,请随时提问!