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

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,从这里开始。

从工程化架构到真实项目实战,建立属于自己的产品开发能力。

查看全部课程