μ§€λ‚œ 유튜브 UI ν΄λ‘ λΆ€λΆ„μ—μ„œ μ•Œμ•„λ‘λ©΄ 쒋을것 같은 λ‚΄μš©μž…λ‹ˆλ‹€.

image.png

μ£Όμ–΄μ§„ μ½”λ“œλŠ” SingleChildScrollView μœ„μ ―μ„ μ‚¬μš©ν•˜μ—¬ κ°€λ‘œ λ°©ν–₯으둜 슀크둀 κ°€λŠ₯ν•œ 메뉴λ₯Ό κ΅¬ν˜„ν•˜λŠ” λΆ€λΆ„μž…λ‹ˆλ‹€. **SingleChildScrollView**λŠ” ν•˜λ‚˜μ˜ μžμ‹ μœ„μ ―λ§Œ κ°€μ§ˆ 수 μžˆλŠ” 슀크둀 κ°€λŠ₯ν•œ μœ„μ ―μž…λ‹ˆλ‹€.

scrollDirection 속성은 **Axis.horizontal**으둜 μ„€μ •λ˜μ–΄ μžˆμœΌλ―€λ‘œ, κ°€λ‘œ λ°©ν–₯으둜 슀크둀 κ°€λŠ₯ν•œ 메뉴λ₯Ό λ§Œλ“€κ³ μž ν•©λ‹ˆλ‹€.

child μ†μ„±μ—λŠ” Row μœ„μ ―μ΄ μ‚¬μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€. **Row**λŠ” μˆ˜ν‰μœΌλ‘œ λ°°μ—΄λ˜λŠ” μžμ‹ μœ„μ ―λ“€μ˜ ν–‰μž…λ‹ˆλ‹€. 이 경우 **menus**λΌλŠ” 리슀트λ₯Ό μ‚¬μš©ν•˜μ—¬ TopMenuButton μœ„μ ―μ„ κ°€μ§„ μ—¬λŸ¬ 개의 μžμ‹ μœ„μ ―μ„ λ§Œλ“­λ‹ˆλ‹€.

**menus.map((e) => Padding(padding: const EdgeInsets.symmetric(horizontal:4), child: TopMenuButton(title: e))).toList()**λŠ” menus 리슀트의 각 μš”μ†Œμ— λŒ€ν•΄ Padding μœ„μ ―μ„ μ μš©ν•œ ν›„ TopMenuButton μœ„μ ―μ„ μƒμ„±ν•©λ‹ˆλ‹€. Padding μœ„μ ―μ€ κ°€λ‘œλ‘œ 4ν”½μ…€μ˜ 여백을 μ£ΌλŠ” 역할을 ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ, μ£Όμ–΄μ§„ μ½”λ“œλŠ” SingleChildScrollView μœ„μ ―μ„ μ‚¬μš©ν•˜μ—¬ κ°€λ‘œ λ°©ν–₯으둜 슀크둀 κ°€λŠ₯ν•œ 메뉴λ₯Ό λ§Œλ“€κ³ , 각 λ©”λ‰΄μ—λŠ” TopMenuButton μœ„μ ―μ΄ ν¬ν•¨λ˜λ©°, TopMenuButton μœ„μ ―μ€ menus 리슀트의 μš”μ†Œλ₯Ό 기반으둜 μƒμ„±λ©λ‹ˆλ‹€.

Navigation

화면을 μ „ν™˜μ„ λœ»ν•˜κ³  λ‹€λ₯Έ ν™”λ©΄μœΌλ‘œ μ „ν™˜μ€ push, λ‹€μ‹œ λ˜λŒμ•„μ˜€κΈ°λŠ” pop μž…λ‹ˆλ‹€

μƒˆλ‘œμš΄ ν™”λ©΄μœΌλ‘œ μ΄λ™ν•˜λ €λ©΄

onPressed: () {
Navigator.push(
context,
MaterialPageRoute(bulder: (context) => const SecondRoute()),
);
}

μ›λž˜ ν™”λ©΄μœΌλ‘œ λŒμ•„μ˜€λ €λ©΄

onPressed: () {
Navigator.pop(context);
}

Router

pub dev에 보면 go_router νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.


import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

void main() => runApp(const MyApp());

/// The route configuration.
final GoRouter _router = GoRouter(
  routes: <RouteBase>[
    GoRoute(
      path: '/',
      builder: (BuildContext context, GoRouterState state) {
        return const HomeScreen();
      },
      routes: <RouteBase>[
        GoRoute(
          path: 'details',
          builder: (BuildContext context, GoRouterState state) {
            return const DetailsScreen();
          },
        ),
      ],
    ),
  ],
);

μ΄ν•΄ν•˜κΈ° μ–΄λ €μ› λ˜ λ‚΄μš©κ³Ό κΈ°μ–΅ν•˜κ³  싢은것은..

스크란샷 2023-07-08 α„‹α…©α„Œα…₯ᆫ 4.21.17.png