deepseek_client 0.0.1 copy "deepseek_client: ^0.0.1" to clipboard
deepseek_client: ^0.0.1 copied to clipboard

Dart library for DeepSeek API interaction, facilitating message exchange and response processing.

example/lib/main.dart

import 'package:deepseek/deepseek_client.dart';
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'DeepSeek Chat',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const DeepSeepChat(),
    );
  }
}

class DeepSeepChat extends StatefulWidget {
  const DeepSeepChat({super.key});

  @override
  DeepSeepChatState createState() => DeepSeepChatState();
}

class DeepSeepChatState extends State<DeepSeepChat> {
  final TextEditingController _controller = TextEditingController();
  DeekSeekModels model = DeekSeekModels.chat;
  bool isLoading = false;
  final List<Message> _messages = [
    Message(content: "You are a helpful assistant", role: "system")
  ];
  String? _response;

  Future<void> _sendMessage() async {
    isLoading = true;
    _messages.add(Message(role: 'user', content: _controller.text));
    _controller.clear();
    setState(() {});
    final nonStream =
        await DeepSeekClient.sendMessage(messages: _messages, model: model);
    _response = nonStream.choices?.first.message?.content;
    _messages.add(Message(content: _response!, role: "assistant"));
    isLoading = false;
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        appBar: AppBar(
          title: const Text('DeepSeek Chat'),
          actions: [
            IconButton(
              icon: const Icon(Icons.settings),
              onPressed: () {
                showMenu(
                  context: context,
                  position: const RelativeRect.fromLTRB(25.0, 25.0, 0.0, 0.0),
                  items: DeekSeekModels.values
                      .map(
                        (e) => PopupMenuItem(
                          value: e.name,
                          child: Row(
                            children: [
                              if (model == e) const Icon(Icons.done),
                              Text(e.name),
                            ],
                          ),
                        ),
                      )
                      .toList(),
                ).then((value) {
                  if (value == 'chat') {
                    setState(() {
                      model = DeekSeekModels.chat;
                    });
                  } else if (value == 'coder') {
                    setState(() {
                      model = DeekSeekModels.coder;
                    });
                  }
                });
              },
            ),
          ],
        ),
        body: Column(
          children: [
            Expanded(
              child: ListView.builder(
                reverse: true,
                itemCount: _messages.length + 1,
                itemBuilder: (context, index) {
                  if (index == _messages.length) {
                    return Container();
                  } else {
                    final message = _messages.reversed.toList()[index];
                    if (message.role == "system") {
                      return const SizedBox.shrink();
                    }
                    return ListTile(
                      title: MarkdownBody(data: message.content),
                      subtitle: Text(message.role),
                    );
                  }
                },
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: TextField(
                controller: _controller,
                decoration: InputDecoration(
                    hintText: 'Type a message...',
                    border: const OutlineInputBorder(),
                    suffixIcon: Visibility(
                      visible: isLoading,
                      replacement: IconButton(
                        icon: const Icon(Icons.send),
                        onPressed: _sendMessage,
                      ),
                      child: Transform.scale(
                        scale: 0.5,
                        child: const CircularProgressIndicator(),
                      ),
                    )),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
1
likes
130
pub points
15%
popularity

Publisher

verified publisherbixat.dev

Dart library for DeepSeek API interaction, facilitating message exchange and response processing.

Documentation

API reference

License

MIT (license)

Dependencies

flutter, http

More

Packages that depend on deepseek_client