feat(app): 初始化 Flutter 前端项目 (Phase F0)

- Flutter 3.44.0 + Dart 3.12.0
- 设计系统: 7色Token×浅/深模式, NotoSansSC/Caveat字体, 圆角10/16/22/28/pill, 三级阴影
- ResponsiveScaffold: 手机底部TabBar / 平板侧边Rail / 桌面三栏
- go_router 路由表: 13个页面 (5个Tab + 8个全屏页面)
- 13个功能模块占位页面 (home/calendar/mood/search/profile/editor/auth/class/teacher/parent/achievement/stickers/templates)
- 依赖: flutter_bloc, go_router, freezed, isar, dio, perfect_freehand, fl_chart
- 中国镜像: PUB_HOSTED_URL + FLUTTER_STORAGE_BASE_URL
- flutter analyze: No issues found
This commit is contained in:
iven
2026-06-01 00:17:16 +08:00
parent 3d9896a676
commit ee5ce9bc56
90 changed files with 3933 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
class AchievementPage extends StatelessWidget {
const AchievementPage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Text('成就 - 占位页面'),
),
);
}
}

View File

@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
class LoginPage extends StatelessWidget {
const LoginPage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Text('登录 - 占位页面'),
),
);
}
}

View File

@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
class CalendarPage extends StatelessWidget {
const CalendarPage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Text('日历 - 占位页面'),
),
);
}
}

View File

@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
class ClassPage extends StatelessWidget {
const ClassPage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Text('班级 - 占位页面'),
),
);
}
}

View File

@@ -0,0 +1,20 @@
import 'package:flutter/material.dart';
class EditorPage extends StatelessWidget {
final String? journalId;
const EditorPage({super.key, this.journalId});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text(
journalId != null
? '编辑日记 ($journalId) - 占位页面'
: '新建日记 - 占位页面',
),
),
);
}
}

View File

@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Text('首页 - 占位页面'),
),
);
}
}

View File

@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
class MoodPage extends StatelessWidget {
const MoodPage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Text('心情 - 占位页面'),
),
);
}
}

View File

@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
class ParentPage extends StatelessWidget {
const ParentPage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Text('家长 - 占位页面'),
),
);
}
}

View File

@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
class ProfilePage extends StatelessWidget {
const ProfilePage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Text('我的 - 占位页面'),
),
);
}
}

View File

@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
class SearchPage extends StatelessWidget {
const SearchPage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Text('搜索 - 占位页面'),
),
);
}
}

View File

@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
class StickerLibraryPage extends StatelessWidget {
const StickerLibraryPage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Text('贴纸库 - 占位页面'),
),
);
}
}

View File

@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
class TeacherPage extends StatelessWidget {
const TeacherPage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Text('教师 - 占位页面'),
),
);
}
}

View File

@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
class TemplateGalleryPage extends StatelessWidget {
const TemplateGalleryPage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Text('模板画廊 - 占位页面'),
),
);
}
}