728x90
728x170
▶ pubspec.yaml
name: test_app
description: A new Flutter application.
publish_to: 'none'
version: 1.0.0+1
environment:
sdk: ">=2.7.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
carousel_slider: ^3.0.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
assets:
- assets/image1.jpg
- assets/image2.jpg
- assets/image3.jpg
728x90
▶ main.dart
import 'package:flutter/material.dart';
import 'package:carousel_slider/carousel_slider.dart';
final imageList = [
Image.asset('assets/image1.jpg', fit: BoxFit.cover),
Image.asset('assets/image2.jpg', fit: BoxFit.cover),
Image.asset('assets/image3.jpg', fit: BoxFit.cover),
];
void main() {
runApp(TestApplication());
}
class TestApplication extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Test Application',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MainPage(),
);
}
}
class MainPage extends StatefulWidget {
@override
_MainPageState createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
int _index = 0;
List<StatelessWidget> _pageList = [
HomePage(),
ServicePage(),
ProfilePage(),
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
centerTitle: true,
title: Text(
'Test Application',
style: TextStyle(color: Colors.black),
),
actions: <Widget>[
IconButton(
icon: Icon(
Icons.add,
color: Colors.black,
),
onPressed: () {},
),
],
),
body: _pageList[_index],
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.assignment),
label: 'Service',
),
BottomNavigationBarItem(
icon: Icon(Icons.account_circle),
label: 'Profiles',
),
],
onTap: (index) {
setState(() {
_index = index;
});
},
),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView(
children: <Widget>[
_buildTop(),
_buildMiddle(),
_buildBottom(),
],
);
}
Widget _buildTop() {
return Padding(
padding: const EdgeInsets.only(top: 20, bottom: 20),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
GestureDetector(
child: Column(
children: <Widget>[
Icon(
Icons.local_taxi,
size: 40,
),
Text('자동차1'),
],
),
onTap: () {
print('자동차1 클릭');
},
),
GestureDetector(
child: Column(
children: <Widget>[
Icon(
Icons.local_taxi,
size: 40,
),
Text('자동차2'),
],
),
onTap: () {
print('자동차2 클릭');
},
),
GestureDetector(
child: Column(
children: <Widget>[
Icon(
Icons.local_taxi,
size: 40,
),
Text('자동차3'),
],
),
onTap: () {
print('자동차3 클릭');
},
),
GestureDetector(
child: Column(
children: <Widget>[
Icon(
Icons.local_taxi,
size: 40,
),
Text('자동차4'),
],
),
onTap: () {
print('자동차4 클릭');
},
),
],
),
SizedBox(
height: 20,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
GestureDetector(
child: Column(
children: <Widget>[
Icon(
Icons.local_taxi,
size: 40,
),
Text('자동차5'),
],
),
onTap: () {
print('자동차5 클릭');
},
),
GestureDetector(
child: Column(
children: <Widget>[
Icon(
Icons.local_taxi,
size: 40,
),
Text('자동차6'),
],
),
onTap: () {
print('자동차6 클릭');
},
),
GestureDetector(
child: Column(
children: <Widget>[
Icon(
Icons.local_taxi,
size: 40,
),
Text('자동차7'),
],
),
onTap: () {
print('자동차7 클릭');
},
),
Opacity(
opacity: 0.0,
child: Column(
children: <Widget>[
Icon(
Icons.local_taxi,
size: 40,
),
Text('자동차8'),
],
),
),
],
),
],
),
);
}
Widget _buildMiddle() {
return CarouselSlider(
options: CarouselOptions(height: 150.0, autoPlay: true),
items: imageList.map((image) {
return Builder(
builder: (BuildContext context) {
return Container(
width: MediaQuery.of(context).size.width,
margin: EdgeInsets.symmetric(horizontal: 5.0),
child: ClipRRect(
borderRadius: BorderRadius.circular(10.0),
child: image,
),
);
},
);
}).toList(),
);
}
Widget _buildBottom() {
final _itemList = List.generate(10, (i) {
return ListTile(
leading: Icon(Icons.notifications_none),
title: Text('[이벤트] 공지 사항이 있습니다.'),
);
});
return ListView(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
children: _itemList,
);
}
}
class ServicePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Text(
'Service',
style: TextStyle(fontSize: 40),
),
);
}
}
class ProfilePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Text(
'Profile',
style: TextStyle(fontSize: 40),
),
);
}
}
728x90
그리드형(광고전용)
'Flutter' 카테고리의 다른 글
[FLUTTER] Opacity 클래스 : opacity 속성을 사용해 불투명도 표시하기 (0) | 2021.05.01 |
---|---|
[FLUTTER] ScaffoldState 클래스 : showSnackBar 메소드를 사용해 스낵바 표시하기 (0) | 2021.05.01 |
[FLUTTER] TextFormField 클래스 : validator 속성을 사용해 입력 값 검증하기 (0) | 2021.05.01 |
[FLUTTER] Form 클래스 : 입력 값 검증하기 (0) | 2021.05.01 |
[FLUTTER] TextEditingController 클래스 사용하기 (0) | 2021.05.01 |
[FLUTTER] Navigator 클래스 : pushNamed 정적 메소드를 사용해 화면 이동하기 (0) | 2021.04.27 |
[FLUTTER] Navigator 클래스 : push/pop 정적 메소드를 사용해 화면 이동하기 (0) | 2021.04.27 |
[FLUTTER] import 키워드 : 파일 분할하기 (0) | 2021.04.27 |
[FLUTTER] CupertinoPicker 클래스 사용하기 (0) | 2021.04.26 |
[FLUTTER] CupertinoAlertDialog 클래스 : 알림 대화 상자 사용하기 (0) | 2021.04.26 |