1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| // new_dog_form.dart
import 'package:flutter/material.dart';
class AddDogFormPage extends StatefulWidget { @override _AddDogFormPageState createState() => _AddDogFormPageState(); }
class _AddDogFormPageState extends State<AddDogFormPage> { @override Widget build(BuildContext context) { // 새로운 페이지는 scaffolding이 필요하다. return Scaffold( appBar: AppBar( title: Text('Add a new Dog'), backgroundColor: Colors.black87, ), body: Container( color: Colors.black54, child: Padding( padding: const EdgeInsets.symmetric( vertical: 8.0, horizontal: 32.0, ), child: Column( children: [ Padding( padding: const EdgeInsets.only(bottom: 8.0), // Text Field는 플러터의 기본 입력 위젯이다. // 이것은 아래에서 볼 수 있는 labelText와 같은 훌륭한UI 및 기능이 내장되어 있다. child: TextField( decoration: InputDecoration( labelText: 'Name the Pup', )), ), Padding( padding: const EdgeInsets.only(bottom: 8.0), child: TextField( decoration: InputDecoration( labelText: "Pup's location", )), ), Padding( padding: const EdgeInsets.only(bottom: 8.0), child: TextField( decoration: InputDecoration( labelText: 'All about the pup', ), ), ), // A Strange situation. // 이상한 현상. // 여러분이 다음 섹션에서 추가해야할 앱의 일부는 context를 알아야 하며, // context를 전달하는 가장 쉬운 방법은 builder 메서드를 사용하는 것이다. // 그래서 나는 이 button을 Builder에 일종의 'hack'으로 감쌌다. Padding( padding: const EdgeInsets.all(16.0), child: Builder( builder: (context) { // 기본 Material 디자인 액션 버튼 return RaisedButton( // 만약 onPressed가 null이면 button 은 비활성화(disabled)된다. // 이건 필자가 만든 임시 callback 이다. onPressed: () => print('PRESSED'), color: Colors.indigoAccent, child: Text('Submit Pup'), ); }, ), ), ], ), ), ), ); } }
|