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

相关推荐
卡布叻_星星2 小时前
前端JavaScript笔记之父子组件数据传递,watch用法之对象形式监听器的核心handler函数
前端·javascript·笔记
开发加微信:hedian1163 小时前
短剧小程序开发全攻略:从技术选型到核心实现(前端+后端+运营干货)
前端·微信·小程序
YCOSA20255 小时前
ISO 雨晨 26200.6588 Windows 11 企业版 LTSC 25H2 自用 edge 140.0.3485.81
前端·windows·edge
小白呀白5 小时前
【uni-app】树形结构数据选择框
前端·javascript·uni-app
吃饺子不吃馅6 小时前
深感一事无成,还是踏踏实实做点东西吧
前端·svg·图形学
90后的晨仔6 小时前
Mac 上配置多个 Gitee 账号的完整教程
前端·后端
少年阿闯~~7 小时前
CSS——实现盒子在页面居中
前端·css·html
开发者小天7 小时前
uniapp中封装底部跳转方法
前端·javascript·uni-app
阿波罗尼亚7 小时前
复杂查询:直接查询/子查询/视图/CTE
java·前端·数据库
正义的大古7 小时前
OpenLayers地图交互 -- 章节九:拖拽框交互详解
前端·vue.js·openlayers