중복된 요소
import 'package:flutter/material.dart'; class RouteOneScreen extends StatelessWidget { const RouteOneScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Route One'), ), body: Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ ElevatedButton( onPressed: () { Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) => RouteOneScreen(), ), ); }, child: Text('Pop'), ) ], ), ), ); } }
import 'package:flutter/material.dart'; class RouteTwoScreen extends StatelessWidget { const RouteTwoScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Route Two'), ), body: Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ ElevatedButton( onPressed: () { Navigator.of(context).pop(); }, child: Text('Pop'), ) ], ), ), ); } }
위와 같이 중복될 경우, 중복되는 영역을 layout 화 시켜서 사용하자.
// lib/layout/main_layout.dart import 'package:flutter/material.dart'; class MainLayout extends StatelessWidget { final String title; // 변경되어야 하는 부분을 변수로 받음 final List<Widget> children; // 변경되어야 하는 부분을 변수로 받음 const MainLayout({required this.title, required this.children, super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(title), ), body: Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.stretch, children: children, ), ), ); } }