Flutter Chat GPT 应用 - 使用 AI 进行对话
class chat_gpt extends StatefulWidget {
@override
_chat_gptState createState() => _chat_gptState();
}
var _filteredStringList = [];
var _stringList = [];
int _selectedIndex = 0;
class _chat_gptState extends State<chat_gpt> {
List<types.Message> _messages = [];
final _user = const types.User(
id: '82091008-a484-4a89-ae75-a22bf8d6f3ac',
);
//从assets/prompts.json中读取数据,并转换为List<Map<String, String>>
void loadprompts() async {
String prompt = await rootBundle.loadString('assets/prompts.json');
_stringList = json.decode(prompt);
_filteredStringList = List.from(_stringList);
}
@override
void initState() {
super.initState();
_loadMessages();
loadprompts();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Chat with GPT'),
//加入返回按鈕
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
//跳转到成绩页面
Navigator.push(context, MaterialPageRoute(builder: (context) {
return HomePage();
}));
},
),
actions: <Widget>[
IconButton(
icon: Icon(Icons.settings),
onPressed: () {
showDialog(
context: context,
builder: (context) {
return Scaffold(
appBar: AppBar(
title: Text('设置'),
actions: [
IconButton(
icon: const Icon(Icons.search),
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: FloatingActionButton(
child: Icon(Icons.search),
tooltip: '搜索语句',
onPressed: () => showSearch(
context: context,
delegate: SearchPage(
items: _stringList,
searchLabel: '搜索语句',
suggestion: Center(
child: Text('查询你要注入的语句'),
),
failure: Center(
child: Text('什么都没找到哦 :('),
),
filter: (person) => [
person['act'],
person['prompt'],
],
builder: (person) => ListTile(
title: Text(person['act']!),
subtitle:
Text(person['prompt']!),
onTap: () {
Navigator.pop(
context, person);
},
),
),
),
),
);
}).then((value) {
if (value != null) {
setState(() {
_filteredStringList = [value];
_selectedIndex = 0;
});
}
});
},
),
],
),
body: ListView.builder(
itemCount: _filteredStringList.length,
itemBuilder: (BuildContext context, int index) {
String act = _filteredStringList[index]['act']!; // 可能需要进行 null 安全性检查
String prompt = _filteredStringList[index]['prompt']!; // 可能需要进行 null 安全性检查
return RadioListTile(
title: Text('行为: $act'),
subtitle: Text('语句: $prompt'),
value: index,
groupValue: _selectedIndex,
onChanged: (int? value) {
setState(() {
_selectedIndex = value!; // 可能需要进行 null 安全性检查
});
},
);
},
));
});
},
),
],
),
body: Chat(
messages: _messages,
onAttachmentPressed: _handleAttachmentPressed,
onMessageTap: _handleMessageTap,
onPreviewDataFetched: _handlePreviewDataFetched,
onSendPressed: _handleSendPressed,
showUserAvatars: true,
showUserNames: true,
user: _user,
),
);
}
// 可能需要添加其他方法,例如 _loadMessages() 等
}
可能需要添加其他方法,例如 _loadMessages() 等,根据您的具体需求进行完善。
单选框选中后不能及时选中可能的原因:
- 没有及时调用
setState方法: 在onChanged方法中,需要调用setState方法来更新_selectedIndex的值,以及相应的界面状态。 _selectedIndex的值与单选框的选中状态不一致: 确保_selectedIndex的值与单选框的选中状态保持一致,可以通过groupValue属性来实现。
优化建议:
- 使用
null安全性检查,避免程序在运行过程中出现异常。 - 完善代码逻辑,确保所有功能都能正常运行。
- 添加更多功能,例如添加提示词管理功能、对话历史记录保存功能等。
- 进行界面设计,使应用更加美观易用。
其他:
- 使用
TextEditingController来控制文本输入框的值,方便进行数据管理。 - 使用
FutureBuilder来处理异步加载数据。 - 使用
Provider或其他状态管理方案来管理应用状态。 - 使用
package:flutter_localizations来支持多语言。 - 使用
package:flutter_test进行单元测试和集成测试。 - 使用
package:flutter_lint进行代码风格检查。
希望这些信息能够帮助您优化您的应用!
原文地址: https://www.cveoy.top/t/topic/lQtu 著作权归作者所有。请勿转载和采集!