deepseek_ai_flutter 1.0.0+1 copy "deepseek_ai_flutter: ^1.0.0+1" to clipboard
deepseek_ai_flutter: ^1.0.0+1 copied to clipboard

This is fork from the deepseek_client. A Dart library for DeepSeek API interaction, facilitating message exchange and response processing.

example/lib/main.dart

import 'package:deepseek_ai_flutter/deepseek_ai_flutter.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(),
                      ),
                    )),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
3
likes
140
points
5
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

This is fork from the deepseek_client. A Dart library for DeepSeek API interaction, facilitating message exchange and response processing.

License

MIT (license)

Dependencies

flutter, http

More

Packages that depend on deepseek_ai_flutter