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 79 80 81 82 83 84 85 86 87 88
| // dog_detail_page.dart
class _DogDetailPageState extends State<DogDetailPage> { final double dogAvatarSize = 150.0; // slider의 초기값 double _sliderValue = 10.0;
// ...
Widget get addYourRating { return Column( children: <Widget>[ Container( padding: EdgeInsets.symmetric( vertical: 16.0, horizontal: 16.0, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[ // row, column, listvie, 기타 등에서 Flexbile(유연한) 위젯은 // CSS의 flex-grow속성과 매우 유사하게 작동하는 래퍼(wrapper)다. Flexible( flex: 1, // 많은 폼 요소와 마찬가지로 slider는 자체 값을 알고 그 값을 업데이트하는 방법을 알야야함. // // slider는 값이 변경될때 onChanged가 호출 되지만, // 오직 setState를 사용하여 state의 value속성이 변경될때만 다시 그린다. // // The workflow is: // 작동흐름은 // 1. 사용자가 slider를 드래그(drag)한다. // 2. onChanged가 호출된다. // 3. onChanged의 콜백이 sliderValue state를 설정한다. // 4. 플러터는 SliderValue에 의존하는 모든것을 다시 그린다. // 이 경우에는 slidera만 새로운 값으로 변경한다. child: Slider( activeColor: Colors.indigoAccent, min: 0.0, max: 15.0, onChanged: (newRating) { setState(() => _sliderValue = newRating); }, value: _sliderValue, ), ), // slider의 값을 표시하는 부분. Container( width: 50.0, alignment: Alignment.center, child: Text('${_sliderValue.toInt()}', style: Theme.of(context).textTheme.display1), ), ], ), ), submitRatingButton, ], ); }
// 현재로선 아무것도 하는게 없는 간단한 Raised 버튼. Widget get submitRatingButton { return RaisedButton( onPressed: () => print('pressed!'), child: Text('Submit'), color: Colors.indigoAccent, ); }
@override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.black87, appBar: AppBar( backgroundColor: Colors.black87, title: Text('Meet ${widget.dog.name}'), ), // Make the body a ListView that displays // both the profile and the rating form. // body를 프로필(profile)과 평가 폼 두개를 모두 표시하는 ListView로 만든다. body: ListView( children: <Widget>[dogProfile, addYourRating], ), ); } }
|