LogoSkills

bloc

BLoC/Cubit state management pattern + Freezed implementation

ํ•ญ๋ชฉ๋‚ด์šฉ
Invoke/bloc:create
Aliases/state:bloc, /flutter:bloc
Categorykobic-development
Complexitymoderate
MCP Serversserena, context7

/bloc:create โ€” ํ™”๋ฉด ์ƒํƒœ ๊ด€๋ฆฌ ์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑ๊ธฐ#

ํ•œ๋งˆ๋””๋กœ#

์•ฑ ํ™”๋ฉด์ด "๋กœ๋”ฉ ์ค‘ / ์™„๋ฃŒ / ์˜ค๋ฅ˜" ๊ฐ™์€ ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃฐ์ง€ ์ •ํ•ด์ฃผ๋Š” ๋ผˆ๋Œ€ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค. ์š”๋ฆฌ๋กœ ์น˜๋ฉด, ๋งค๋ฒˆ ์ƒˆ๋กœ ๋งŒ๋“ค ํ•„์š” ์—†์ด ๊ฒ€์ฆ๋œ ๋ ˆ์‹œํ”ผ ํ‹€์„ ๊ทธ๋Œ€๋กœ ๊น”์•„์ฃผ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„์š”.

๋ˆ„๊ฐ€ยท์–ธ์ œ ์“ฐ๋‚˜์š”#

  • ์ƒˆ ํ™”๋ฉด(์˜ˆ: ํ™ˆ, ๋กœ๊ทธ์ธ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ)์„ ๋งŒ๋“ค๋ฉด์„œ ๊ทธ ํ™”๋ฉด์˜ ์ƒํƒœ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ
  • ๋งค๋ฒˆ ์†์œผ๋กœ ์ž‘์„ฑํ•˜๋˜ BLoC/Cubit ๊ตฌ์กฐ๋ฅผ ํ‘œ์ค€ ๊ทœ์น™์— ๋งž์ถฐ ๋น ๋ฅด๊ฒŒ ๊น”๊ณ  ์‹ถ์„ ๋•Œ

๋ฌด์—‡์„ ํ•ด์ฃผ๋‚˜์š”#

๊ธฐ๋Šฅ ํด๋” ์•ˆ์— ์ƒํƒœ ๊ด€๋ฆฌ์šฉ ํŒŒ์ผ 3๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

  • {bloc_name}_bloc.dart โ€” ์‹ค์ œ ๋™์ž‘์„ ๋‹ด๋‹นํ•˜๋Š” ๋ณธ์ฒด
  • {bloc_name}_event.dart โ€” ํ™”๋ฉด์—์„œ ์ผ์–ด๋‚˜๋Š” "์‚ฌ๊ฑด"(๋ฒ„ํŠผ ๋ˆ„๋ฆ„ ๋“ฑ)์„ ์ •์˜
  • {bloc_name}_state.dart โ€” ํ™”๋ฉด์˜ ์ƒํƒœ(์ดˆ๊ธฐ / ๋กœ๋”ฉ / ์™„๋ฃŒ / ์˜ค๋ฅ˜)๋ฅผ ์ •์˜

์ƒ์„ฑ๋˜๋Š” ์ฝ”๋“œ๋Š” ํšŒ์‚ฌ ํ‘œ์ค€ ๊ทœ์น™(์ƒํƒœ๋Š” ์ดˆ๊ธฐยท๋กœ๋”ฉยท์™„๋ฃŒยท์˜ค๋ฅ˜ ๋„ค ๊ฐ€์ง€, ๋น„๋™๊ธฐ ์ž‘์—… ํ›„ ์•ˆ์ „ ์ ๊ฒ€ ๋“ฑ)์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์“ฐ๋‚˜์š”#

# ํ™ˆ ํ”ผ๋“œ ํ™”๋ฉด์šฉ (๋ถˆ๋Ÿฌ์˜ค๊ธฐยท์ƒˆ๋กœ๊ณ ์นจ ๊ธฐ๋Šฅ ์—ฐ๊ฒฐ)
/bloc:create home Home --usecases GetFeed,RefreshFeed

# ๋กœ๊ทธ์ธ ํ™”๋ฉด์šฉ (Cubit ๋ฐฉ์‹, ๊ณตํ†ต ์œ„์น˜์— ์ƒ์„ฑ)
/bloc:create auth Login --type cubit --location common

# ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ ํ™”๋ฉด์šฉ (์ฝ˜์†” ์œ„์น˜์— ์ƒ์„ฑ)
/bloc:create dashboard Dashboard --location console
  • feature_name (ํ•„์ˆ˜): ๊ธฐ๋Šฅ ์ด๋ฆ„ (์˜ˆ: home, auth, store)
  • bloc_name (ํ•„์ˆ˜): ๋งŒ๋“ค ์ƒํƒœ ๊ด€๋ฆฌ ์ด๋ฆ„ (์˜ˆ: Home, Login, Cart)
  • --type: bloc ๋˜๋Š” cubit ์„ ํƒ (๊ธฐ๋ณธ๊ฐ’ bloc)
  • --location: ์ƒ์„ฑ ์œ„์น˜ (application, common, console)
  • --usecases: ์—ฐ๊ฒฐํ•  ๊ธฐ๋Šฅ ๋‹จ์œ„ (์˜ˆ: GetUser,UpdateUser)

์•ˆ์—์„œ ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๋‚˜์š”#

  1. ์ž…๋ ฅํ•œ ๊ธฐ๋Šฅ ์ด๋ฆ„ยท์ƒํƒœ ์ด๋ฆ„ยท์˜ต์…˜์„ ๋ฐ”ํƒ•์œผ๋กœ ์–ด๋””์— ๋ฌด์—‡์„ ๋งŒ๋“ค์ง€ ์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ‘œ์ค€ ๊ทœ์น™์— ๋งž๋Š” ํŒŒ์ผ 3๊ฐœ(๋ณธ์ฒดยท์‚ฌ๊ฑดยท์ƒํƒœ)๋ฅผ ํ•ด๋‹น ๊ธฐ๋Šฅ ํด๋”์— ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. ์ฐธ๊ณ  ์ž๋ฃŒ(Context7์˜ flutter_bloc ๊ณต์‹ ๋ฌธ์„œ)์™€ ๊ธฐ์กด ์ฝ”๋“œ ํŒจํ„ด(Serena ๋ถ„์„)์„ ํ™œ์šฉํ•ด ์ผ๊ด€๋œ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

โš™๏ธ ์ƒ์„ธ ์˜ต์…˜ยท์‹คํ–‰ ๋ช…์„ธ (๊ฐœ๋ฐœ์ž / AI ์—์ด์ „ํŠธ์šฉ)

Usage#

/bloc:create {feature_name} {bloc_name} [--options]

Parameters#

ParameterRequiredDescriptionExample
feature_nameโœ…Feature Module namehome, auth, store
bloc_nameโœ…BLoC NameHome, Login, Cart
--typeโŒTypebloc, cubit (default: bloc)
--locationโŒLocationapplication, common, console
--usecasesโŒUseCases to connectGetUser,UpdateUser

Generated Files#

feature/{location}/{feature_name}/lib/src/presentation/bloc/
โ”œโ”€โ”€ {bloc_name}_bloc.dart      # BLoC ๊ตฌํ˜„
โ”œโ”€โ”€ {bloc_name}_event.dart     # Event ์ •์˜ (sealed class)
โ””โ”€โ”€ {bloc_name}_state.dart     # State ์ •์˜ (Freezed)

Core Rules#

  • Event: sealed class + private _ prefix Class
  • State: Freezed union type (initial, loading, loaded, error)
  • UseCase: const UseCase() Direct creation (DI not used)
  • Safety: await After must if (isClosed) return; Check

Examples#

# Home feed BLoC
/bloc:create home Home --usecases GetFeed,RefreshFeed

# Auth login Cubit
/bloc:create auth Login --type cubit --location common

# Admin dashboard BLoC
/bloc:create dashboard Dashboard --location console

MCP Integration#

MCP ServerPurpose
Context7flutter_bloc official documentation
SerenaExisting BLoC Pattern Analysis