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 工程效率和规范

相关推荐
白兰地空瓶15 小时前
🚀你以为你在写 React?其实你在“搭一套前端操作系统”
前端·react.js
爱上妖精的尾巴15 小时前
6-4 WPS JS宏 不重复随机取值应用
开发语言·前端·javascript
似水流年QC16 小时前
深入探索 WebHID:Web 标准下的硬件交互实现
前端·交互·webhid
陪我去看海16 小时前
测试 mcp
前端
speedoooo17 小时前
在现有App里嵌入一个AI协作者
前端·ui·小程序·前端框架·web app
全栈胖叔叔-瓜州17 小时前
关于llamasharp 大模型多轮对话,模型对话无法终止,或者输出角色标识User:,或者System等角色标识问题。
前端·人工智能
三七吃山漆17 小时前
攻防世界——wife_wife
前端·javascript·web安全·网络安全·ctf
用户479492835691517 小时前
面试官问"try-catch影响性能吗",我用数据打脸
前端·javascript·面试
GISer_Jing17 小时前
前端营销技术实战:数据+AI实战指南
前端·javascript·人工智能
GIS之路18 小时前
使用命令行工具 ogr2ogr 将 CSV 转换为 Shp 数据(二)
前端