纯原生Flutter3 + Dio 实战 DeepSeek V4.1 SSE流式对话 – yxybox

纯原生Flutter3 + Dio 实战 DeepSeek V4.1 SSE流式对话 – yxybox


最新 2026 年: 使用 Flutter3.41 + ディオ アクセス ディープシーク V4.1 :ストリーミングAI対話アプリ開発実践。

纯原生Flutter3 + Dio 实战 DeepSeek V4.1 SSE流式对话 – yxybox

プロジェクトテクノロジースタックの概要📦

カテゴリ

テクノロジー/プラグイン

バージョン

説明する

UIフレームワーク

フラッター

3.41.5

クロスプラットフォーム UI フレームワーク

プログラミング言語

ダーツ

3.11

Flutter サポート言語

大型モデル

DeepSeek-V4.1-フラッシュ

—

大規模なチャット モデル、ストリーミング出力と詳細な思考をサポート

ネットワークリクエスト

ディオ

^5.11.1

HTTP クライアント、SSE ストリーミング リクエストを処理します

ルーティング/状態管理

得る

^4.7.3

ルートジャンプ、依存性注入、リアクティブ状態管理

ローカルストレージ

ストレージの取得

^2.1.1

セッションと構成を保存するための軽量のキー/値ストレージ

マークダウン分析

flutter_markdown_plus

^1.0.12

コア Markdown レンダリング エンジン

コードの強調表示

flutter_highlight

^0.7.0

コードブロック構文の強調表示

LaTeX式

flutter_markdown_plus_latex

^1.0.5

インライン/ブロックレベルの数式レンダリング

マーメイドチャート

フラッターマーメイド

^0.1.0

フローチャート/シーケンス図/ガントチャートのレンダリング

ポップアップコンポーネント

シャーネダイアログ

^4.9.0

カスタムポップアップウィンドウ、トースト、下部ポップアップレイヤー

画像プレビュー

easy_image_viewer

^1.5.1

クリックして拡大、ジェスチャーでズーム、スライドして切り替え

環境変数

flutter_dotenv

^6.0.1

読む .env API キーなどの機密情報を構成および管理する

画像

画像

特徴✨

モジュール

ファンクションポイント

説明する

基本的な能力

Flutter3.41 + Dart3 ビルドプロジェクト

Android/iOS/Web/Windows を実行するクロスプラットフォーム

大型モデル

DeepSeek-V4.1 にアクセスする

ストリーミング タイピング出力をサポートし、会話をスムーズにします。

思考モデル

深い考え

推論プロセス/思考の連鎖を表示、折りたたみ可能

数式

LaTeX 数式レンダリング

業界内でのサポート $...$ ブロックレベルあり $$...$$

コードの経験

コードブロックの水平スクロール

長いコードでもレイアウトが崩れない

コードの経験

コードの強調表示

多言語構文の強調表示

コードの経験

コードをコピーする

ワンクリックでコードブロックの内容をコピー

会話スキル

複数のコンテキストセッション

歴史的なメッセージを伝え、コンテキストを失うことなく継続的な会話を行う

データストレージ

ローカルストレージに関する会話

GetStorage 永続セッション/履歴

リッチテキスト

画像プレビュー

クリックしてズーム、ジェスチャーしてズーム

リッチテキスト

リンクジャンプ

Markdown リンクは安全に開かれます

リッチテキスト

テーブルのレンダリング

AI によって返される Markdown テーブルをサポート

マルチエンドレイアウト

モバイル版/デスクトップ版 750px

狭い画面の 1 列、750 ピクセル以上でデスクトップ/ワイドスクリーン レイアウトに切り替え

プロジェクト構造ディレクトリ

画像

画像

Flutter プロジェクトの環境変数

画像

# 项目名称
APP_NAME = 'Flutter3-DeepSeek'

# DeepSeek API配置
DEEPSEEK_API_KEY = your apikey
DEEPSEEK_BASE_URL = 

無題のPC

main.dartの設定

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:shirne_dialog/shirne_dialog.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';

import 'controller/app.dart';
import 'controller/chat.dart';

// 引入路由配置
import 'router/index.dart';

void main() async {
  // 初始化存储服务
  await GetStorage.init();

  // 将.env文件内容加载到dotenv中
  await dotenv.load(fileName: '.env');

  // 注册GetxController
  Get.put(AppStore());
  Get.put(ChatStore());

  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    // 获取AppStore实例
    final appStore = AppStore.to;
    
    return AnnotatedRegion(
      value: SystemUiOverlayStyle(
        /**
         * 修复flutter3.32以上会出现底部导航栏背景黑色
         * The bottom navigation bar is always black from flutter: 3.32.1.
         * It's working fine on flutter: 3.29.3
        */
        systemNavigationBarColor: Colors.transparent,
        systemNavigationBarIconBrightness: Brightness.dark,
      ),
      child: GetMaterialApp(
        title: 'Flutter3-DeepSeek',
        debugShowCheckedModeBanner: false,
        theme: ThemeData(
          colorScheme: ColorScheme.fromSeed(seedColor: Color(0xFF5842F2)),
          useMaterial3: true,
          fontFamily: Platform.isWindows ? 'Microsoft YaHei' : null,
        ),
        // 初始路由
        initialRoute: appStore.isLogin ? '/' : '/login',
        // 路由页面
        getPages: routePages,
        // 初始弹窗key
        navigatorKey: MyDialog.navigatorKey,
        localizationsDelegates: [
          // Add your ShirneDialogLocalizations delegate here
          ShirneDialogLocalizations.delegate,
        ],
      ),
    );
  }
}

無題-f2

無題-f5

全体的なレイアウト構造

画像

@override
Widget build(BuildContext context) {
  return Scaffold(
    key: scaffoldKey,
    backgroundColor: Colors.white,
    appBar: AppBar(
      ...
      actions: [
        IconButton(icon: Icon(Icons.try_sms_star_outlined), onPressed: () => handleCreate(),),
      ],
    ),
    body: Center(
      child: ConstrainedBox(
        constraints: BoxConstraints(
          maxWidth: 750.0,
        ),
        child: Flex(
          direction: Axis.vertical,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Expanded(
              child: Stack(
                children: [
                  GestureDetector(
                    child: ScrollConfiguration(
                      behavior: CustomScrollBehavior().copyWith(scrollbars: false),
                      // GetBuilder响应流式输出
                      child: Obx(() {
                        if (chatStore.currentMessages.isEmpty) {
                          // 欢迎信息
                          return Welcome(
                            onChanged: (value) {
                              textEditingController.text = value;
                            },
                          );
                        }
                        return ListView.builder(
                          keyboardDismissBehavior: ScrollViewKeyboardDismissBehavior.onDrag, // 当滚动时候隐藏键盘
                          controller: scrollController,
                          padding: EdgeInsets.all(10.0),
                          reverse: true,
                          shrinkWrap: true,
                          itemCount: chatStore.currentMessages.length,
                          itemBuilder: (context, index) {
                            ...
                          }
                        );
                      }),
                    ),
                    onTap: () {
                      focusNode.unfocus();
                    },
                  ),
                  // 滚动到底部
                  AnimatedPositioned(
                    ...
                  ),
                ],
              ),
            ),
            // 底部编辑器区域
            ChatEditor(controller: textEditingController),
          ]
        ),
      ),
    ),
    // 侧边栏
    drawer: Drawer(
      child: Sidebar(),
    ),
  );
}

無題-pc5

この時点で、最初からのビルドは完了です フラッター3.41 + ダーツ3統合 DeepSeek-V4.1クロスプラットフォームのAIストリーミング会話アプリケーション。

この計画は通過しました SSEストリーミング応答と GetX 状態管理滑らかなタイプライタースタイルの会話インタラクションを可能にし、拡張性を高めます。 深い思考、LaTeX 数式、マーメイド チャート、コードのハイライト表示、画像プレビューおよびその他の機能により、Flutter は AI アプリケーション シナリオにおいてより完全な表現力を得ることができます。



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *