Flutter:零基础可操作的 mason 脚手架完整流程


1. 安装 mason CLI(如已安装跳过)

csharp 复制代码
dart pub global activate mason_cli

2. 初始化 mason(如已有 .mason/ 可跳过)

csharp 复制代码
mason init

3. 新建 brick

arduino 复制代码
mason new fast_page

会生成 .mason/bricks/fast_page/ 目录。


4. 在 .mason/bricks/fast_page/__brick__/ 下新建目录和文件

进入 .mason/bricks/fast_page/__brick__/,新建如下目录结构(直接写模板变量名):

scss 复制代码
view/
  {{name.snakeCase()}}_page.dart
provider/
  {{name.snakeCase()}}_provider.dart
route.txt
route_const.txt

5. 填写模板内容

view/{{name.snakeCase()}}_page.dart

typescript 复制代码
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../provider/{{name.snakeCase()}}_provider.dart';

class {{name.pascalCase()}}Page extends ConsumerWidget {
  const {{name.pascalCase()}}Page({super.key});

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    return Scaffold(
      appBar: AppBar(title: const Text('{{name.pascalCase()}}')),
      body: const Center(child: Text('This is {{name.pascalCase()}}Page')),
    );
  }
}

provider/{{name.snakeCase()}}_provider.dart

dart 复制代码
import 'package:flutter_riverpod/flutter_riverpod.dart';

final {{name.camelCase()}}Provider = StateProvider<int>((ref) => 0);

route.txt

scss 复制代码
GoRoute(
  path: RouterConst.{{name.camelCase()}}Page,
  name: '{{name.pascalCase()}}',
  builder: (context, state) => const {{name.pascalCase()}}Page(),
),

route_const.txt

arduino 复制代码
static const String {{name.camelCase()}}Page = '/{{name.paramCase()}}';

6. 配置 brick.yaml(在 .mason/bricks/fast_page/brick.yaml

yaml 复制代码
name: fast_page
description: Flutter page with provider and route

version: 0.1.0+1

environment:
  mason: ^0.1.1

vars:
  name:
    type: string
    description: The page name
    prompt: What is the name of the page?

7. 配置项目根目录 mason.yaml

在你项目根目录的 mason.yaml 里加:

yaml 复制代码
bricks:
  fast_page:
    path: .mason/bricks/fast_page

8. 拉取模板

arduino 复制代码
mason get

9. 使用 mason 生成页面

在你想生成的目录(建议项目根目录)下执行:

css 复制代码
mason make fast_page --name login

10. 复制文件到目标位置

  • view/login_page.dartprovider/login_provider.dart 移动到你实际 feature 模块目录(如 lib/features/login/view/lib/features/login/provider/
  • route.txt 内容复制到 lib/route/app_router.dart(你的 go_router 配置)
  • route_const.txt 内容复制到 lib/route/router_const.dart(你的 RouterConst 类)

结论

  1. 一次性生成页面/provider/路由片段/路由常量
  2. 复制粘贴,极大提升你的 Flutter 工程效率和规范

相关推荐
OpenTiny社区17 分钟前
告别代码焦虑,单元测试让你代码自信力一路飙升!
前端·github
pe7er27 分钟前
HTTPS:本地开发绕不开的设置指南
前端
晨枫阳34 分钟前
前端VUE项目-day1
前端·javascript·vue.js
江山如画,佳人北望41 分钟前
SLAM 前端
前端
患得患失9491 小时前
【前端】【Iconify图标库】【vben3】createIconifyIcon 实现图标组件的自动封装
前端
颜酱1 小时前
抽离ant-design后台的公共查询设置
前端·javascript·ant design
用户95251151401551 小时前
js最简单的解密分析
前端
FogLetter1 小时前
深入浅出React-Router-Dom:从前端路由到SPA架构的华丽转身
前端·react.js
绅士玖1 小时前
JavaScript 设计模式之单例模式🚀
前端·javascript·设计模式
Dream耀1 小时前
useReducer:React界的"灭霸手套",一个dispatch搞定所有状态乱局
前端·javascript·react.js