本站已进行升级,老用户可以通过找回密码登录。

Flutter 工程化 · 實戰原始碼 · AI Coding

少寫重複程式碼, 更快完成你的 Flutter App。

從可重用的 GetX 工程架構,到 AI Skills、完整業務原始碼和系統影片課程。建立規範的開發流程,把時間花在真正重要的產品功能上。

工程化架構 真實專案原始碼 AI 辅助開發
flutter · workspace

EXPLORER

⌄ lib/

main.dart

global.dart

pages/

⌄ common/

api/

models/

network/

services/

routers/

i18n/

style/

values/

widgets/

components/

cache/

extension/

utils/

main.dart
/// Flutter 入口:先渲染 [AppBootstrap],再异步 [Global.init]。
void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const AppBootstrap());
}

/// 可渲染的启动根组件,区分加载、失败和就绪。
class AppBootstrap extends StatefulWidget {
  const AppBootstrap({super.key, this.initialize, this.readyBuilder});

  /// 测试可注入初始化;生产用 [Global.init]。
  final Future<void> Function()? initialize;

  /// 测试可替换就绪页。
  final WidgetBuilder? readyBuilder;

  @override
  State<AppBootstrap> createState() => _AppBootstrapState();
}

class _AppBootstrapState extends State<AppBootstrap> {
  Object? _error;
  bool _ready = false;
  bool _loading = true;

  @override
  void initState() {
    super.initState();
    _initialize();
  }

  Future<void> _initialize() async {
    setState(() {
      _loading = true;
      _error = null;
    });
    try {
      await (widget.initialize ?? Global.init)();
      if (!mounted) return;
      setState(() {
        _ready = true;
        _loading = false;
      });
    } catch (error) {
      if (!mounted) return;
      setState(() {
        _error = error;
        _loading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    if (_ready) return widget.readyBuilder?.call(context) ?? const App();
    return GetMaterialApp(
      debugShowCheckedModeBanner: false,
      translations: AppTranslations(),
      locale: AppTranslations.fallbackLocale,
      fallbackLocale: AppTranslations.fallbackLocale,
      supportedLocales: AppTranslations.supportedLocales,
      localizationsDelegates: GlobalMaterialLocalizations.delegates,
      theme: AppTheme.lightTheme,
      darkTheme: AppTheme.darkTheme,
      home: Scaffold(
        body: Center(
          child: Padding(
            padding: const EdgeInsets.all(32),
            child: _loading
                ? const CircularProgressIndicator()
                : Column(
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      const Icon(Icons.error_outline_rounded, size: 48),
                      const SizedBox(height: 16),
                      Text(
                        TrKeys.initializationFailed.tr,
                        style: const TextStyle(
                          fontSize: 18,
                          fontWeight: FontWeight.w700,
                        ),
                      ),
                      const SizedBox(height: 8),
                      Text(_error.toString(), textAlign: TextAlign.center),
                      const SizedBox(height: 20),
                      FilledButton(
                        onPressed: _initialize,
                        child: Text(TrKeys.retry.tr),
                      ),
                    ],
                  ),
          ),
        ),
      ),
    );
  }
}

/// 根组件:亮暗主题 + GoRouter。
class App extends StatelessWidget {
  const App({super.key});

  @override
  Widget build(BuildContext context) {
    return AdaptiveTheme(
      light: AppTheme.lightTheme,
      dark: AppTheme.darkTheme,
      initial: Global.savedThemeMode ?? AdaptiveThemeMode.system,
      builder: (theme, darkTheme) {
        return GetMaterialApp.router(
          title: AppConfig.appName,
          debugShowCheckedModeBanner: false,
          translations: AppTranslations(),
          locale: Get.isRegistered<LocaleService>()
              ? Get.find<LocaleService>().locale
              : AppTranslations.fallbackLocale,
          fallbackLocale: AppTranslations.fallbackLocale,
          supportedLocales: AppTranslations.supportedLocales,
          localizationsDelegates: GlobalMaterialLocalizations.delegates,
          theme: theme,
          darkTheme: darkTheme,
          builder: (context, child) {
            ScreenUtil.init(
              context,
              designSize: Size(
                AppConfig.ui.designWidth,
                AppConfig.ui.designHeight,
              ),
            );
            return child ?? const SizedBox.shrink();
          },
          routerDelegate: AppRouter.router.routerDelegate,
          routeInformationParser: AppRouter.router.routeInformationParser,
          routeInformationProvider: AppRouter.router.routeInformationProvider,
          backButtonDispatcher: AppRouter.router.backButtonDispatcher,
        );
      },
    );
  }
}
Flutter · GetX · GoRouterDart
Flutter / GetX 工程示意 · 以課程實際工程與目錄為准

系統影片教學

從基礎到專案實戰

真實專案原始碼

结合課程理解工程實現

工程化實践

架構、網路與業務開發

開源 AI Skills

規範 AI 编程工作流

Featured / Flutter

從一套可靠的架構開始

不止是看懂 GetX,更要掌握能持續迭代的 Flutter 工程與完整業務開發流程。

目前主推 · 工程化實戰

Flutter GetX Starter Kit:工程化架构、实战开发与 AI Coding

用 GetX、go_router、Dio、Freezed 构建可维护的 Flutter 项目,掌握网络、Auth & Session、Design System、业务实战,并让 AI 按你的工程规范开发代码。

查看課程完整目錄

38 講 · 7 個章節

Flutter + GetX
01

App / Routing

應用組織與頁面路由

02

Network

網路請求與資料處理

03

Features

業務模块與元件重用

04

Workflow

從開發到完整專案

不只是課程影片

把知识落到程式碼,把開發经验帶進你的下一個專案。

系統教學影片

按課程目錄循序學習,理解每一步實現思路。

可重用的專案原始碼

结合配套原始碼學習架構、模块拆分與元件重用。

完整專案開發流程

從專案組織到業務實現,串起完整的開發過程。

AI Coding 實戰

结合真實專案與開源 Skills,學習規範的 AI 協作。

OPEN SOURCE / AI SKILLS

讓 AI 遵守工程規範, 把想法变成可維護的程式碼

貓哥開源 Skills 支持 Codex、Claude Code 和 Cursor,覆盖 Flutter 專案初始化、資源處理和深度程式碼审查。

  • getx 腳手架
  • riverpod 腳手架
  • 圖片壓縮適配
  • 深度程式碼稽核
查看開源 Skills
terminal — ducafecat/skills

# 安装命令 · 详见專案說明

$ npx skills@latest add ducafecat/skills

  • flutter-getx-init
  • flutter-riverpod-init
  • flutter-assets-compress
  • deep-code-review

$ _

CodexClaude CodeCursor

Pricing

從免費體驗開始,按需深入

先了解教學方式,再選擇適合自己的學習计划。

Free 免費版

公開課程與資源,體驗貓哥的教學方式。

¥0

  • 公開免費課程
  • 部分付費内容試看
  • 技術文章與公開資源
開始免費學習
推荐计划

VIP 高级會員

獲取所有課程內容。

¥399/ 365 天

  • 解鎖全部課程內容
  • 成為貓哥的密友
  • 加入貓哥 VIP 微信群,和同頻夥伴一起進階
  • 會員期內可學全部課程,學過的課過期後仍可回看
  • 影片講解 + 完整原始碼 + 配套文件
  • 提供專案完整原始碼與高複用程式碼模板
查看 VIP 詳情

具體課程、原始碼權限與購買規则,以正式課程頁和定價頁為准。

FAQ

你可能想了解的問題

零基礎適合從哪裡開始?

建議先學習 Dart 和 Flutter 免費基礎課程;商业專案實戰課程需要相應基礎,请查看各課程的先修要求。

實戰課程包含原始碼嗎?

課程配套资料以各課程詳情頁為准。VIP 正式權益包含影片講解、完整原始碼與配套文档。

VIP 到期後,課程還能回看嗎?

按照現有會員說明,會員期間存取過的課程可以永久使用;具體權益以正式定價頁為准。

公開 AI Skills 是否免費?

貓哥 Skills 為公開的開源工具集,可在專案頁查看安装方法與倉庫說明。

下一款 Flutter App,從這里開始。

從工程化架構到真實專案實戰,建立屬於自己的產品開發能力。

查看全部課程