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() 等,根据您的具体需求进行完善。

单选框选中后不能及时选中可能的原因:

  1. 没有及时调用 setState 方法:onChanged 方法中,需要调用 setState 方法来更新 _selectedIndex 的值,以及相应的界面状态。
  2. _selectedIndex 的值与单选框的选中状态不一致: 确保 _selectedIndex 的值与单选框的选中状态保持一致,可以通过 groupValue 属性来实现。

优化建议:

  1. 使用 null 安全性检查,避免程序在运行过程中出现异常。
  2. 完善代码逻辑,确保所有功能都能正常运行。
  3. 添加更多功能,例如添加提示词管理功能、对话历史记录保存功能等。
  4. 进行界面设计,使应用更加美观易用。

其他:

  • 使用 TextEditingController 来控制文本输入框的值,方便进行数据管理。
  • 使用 FutureBuilder 来处理异步加载数据。
  • 使用 Provider 或其他状态管理方案来管理应用状态。
  • 使用 package:flutter_localizations 来支持多语言。
  • 使用 package:flutter_test 进行单元测试和集成测试。
  • 使用 package:flutter_lint 进行代码风格检查。

希望这些信息能够帮助您优化您的应用!

Flutter Chat GPT 应用 - 使用 AI 进行对话

原文地址: https://www.cveoy.top/t/topic/lQtu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录