티스토리 뷰
목차
반응형
import 'package:archive_idea/database/database_helper.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart';
import 'package:intl/intl.dart';
import '../data/idea_info.dart';
class MainScreen extends StatefulWidget {
const MainScreen({super.key});
@override
State<MainScreen> createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
var dbHelper = DatabaseHelper(); // 데이터베이스 접근을 용이하게 해주는 유틸 객체
List<IdeaInfo> lstideaInfo = []; //아이디어 목록 데이터 담길 공간
@override
void initState() {
// TODO: implement initState
super.initState();
//아이디어 목록들 가져오기
getIdeaInfo();
//샘플 데이터 넣기
//setInsertIdeaInfo();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
elevation: 0,
title: Text(
'Archive Idea',
style: TextStyle(
color: Colors.black,
fontSize: 32,
fontWeight: FontWeight.bold,
),
),
),
body: Container(
margin: EdgeInsets.all(16),
child: ListView.builder(
itemCount: lstideaInfo.length,
itemBuilder: (context, index) {
return listItem(index);
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 새아이디어 작성 화면으로 이동
},
child: Image.asset(
'assets/informative.png',
width: 48,
height: 48,
),
backgroundColor: Color(0xff7f52fd).withOpacity(0.7),
),
);
}
Widget listItem(int index) {
return Container(
height: 82,
margin: EdgeInsets.only(top: 16),
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(color: Color(0xffd9d9d9), width: 1),
borderRadius: BorderRadius.circular(10),
)),
child: Stack(
alignment: Alignment.centerLeft,
children: [
/// 아이디어 제목
Container(
margin: EdgeInsets.only(left: 16, bottom: 16),
child: Text(
lstideaInfo[index].title,
style: TextStyle(fontSize: 16),
),
),
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart';
import 'package:intl/intl.dart';
import '../data/idea_info.dart';
class MainScreen extends StatefulWidget {
const MainScreen({super.key});
@override
State<MainScreen> createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
var dbHelper = DatabaseHelper(); // 데이터베이스 접근을 용이하게 해주는 유틸 객체
List<IdeaInfo> lstideaInfo = []; //아이디어 목록 데이터 담길 공간
@override
void initState() {
// TODO: implement initState
super.initState();
//아이디어 목록들 가져오기
getIdeaInfo();
//샘플 데이터 넣기
//setInsertIdeaInfo();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
elevation: 0,
title: Text(
'Archive Idea',
style: TextStyle(
color: Colors.black,
fontSize: 32,
fontWeight: FontWeight.bold,
),
),
),
body: Container(
margin: EdgeInsets.all(16),
child: ListView.builder(
itemCount: lstideaInfo.length,
itemBuilder: (context, index) {
return listItem(index);
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 새아이디어 작성 화면으로 이동
},
child: Image.asset(
'assets/informative.png',
width: 48,
height: 48,
),
backgroundColor: Color(0xff7f52fd).withOpacity(0.7),
),
);
}
Widget listItem(int index) {
return Container(
height: 82,
margin: EdgeInsets.only(top: 16),
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(color: Color(0xffd9d9d9), width: 1),
borderRadius: BorderRadius.circular(10),
)),
child: Stack(
alignment: Alignment.centerLeft,
children: [
/// 아이디어 제목
Container(
margin: EdgeInsets.only(left: 16, bottom: 16),
child: Text(
lstideaInfo[index].title,
style: TextStyle(fontSize: 16),
),
),
///일시
Align(
alignment: Alignment.bottomRight,
child: Container(
margin: EdgeInsets.only(right: 16, bottom: 8),
child: Text(
DateFormat('yyyy.MM.dd HH:mm').format(
DateTime.fromMillisecondsSinceEpoch(
lstideaInfo[index].createdAt),
),
style: TextStyle(
color: Color(0xffaeaeae),
fontSize: 10,
),
),
),
),
/// 아이디어 중요도 점수(별형태)
Container(
margin: EdgeInsets.only(left: 16, bottom: 8),
child: Align(
alignment: Alignment.bottomLeft,
child: RatingBar.builder(
initialRating: lstideaInfo[index].priority.toDouble(),
minRating: 1,
itemCount: 5,
direction: Axis.horizontal,
itemSize: 16,
itemPadding: EdgeInsets.symmetric(horizontal: 0),
itemBuilder: (context, index) {
return Icon(
Icons.star,
color: Colors.amber,
);
},
ignoreGestures: true,
updateOnDrag: false,
onRatingUpdate: (value) {},
),
),
)
],
),
);
}
Future<void> getIdeaInfo() async {
await dbHelper.initDatabase();
lstideaInfo = await dbHelper.getAllIdeaInfo();
// 리스트 객체 역순으로 정렬
lstideaInfo.sort((a, b) => b.createdAt.compareTo(a.createdAt));
setState(() {});
}
Future<void> setInsertIdeaInfo() async {
await dbHelper.initDatabase();
await dbHelper.insertIdeaInfo(IdeaInfo(
title: '# 가나다라마바사',
motive: '길가다가 쓰레게 줍기',
content: '상세 내용 입니다',
priority: 5,
feedback: '피드백 사항',
createdAt: DateTime.now().millisecondsSinceEpoch,
));
}
}
반응형
'개발' 카테고리의 다른 글
비쥬얼코드 visual code 유용한 확장프로그램 (0) | 2024.09.23 |
---|---|
플러터 - 이미지 모서리 둥글게 (round) (0) | 2024.09.23 |
내부 DB sqflite CRUD 샘플 (0) | 2024.09.23 |
안드로이드 스튜디오 프로젝트 삭제 (프로젝트 제거) (0) | 2024.09.23 |
플러터 pubspec.yaml 사용할 패키지 가져오기(이미지,폰트) (0) | 2024.09.23 |