CarrotMarketApp - 동네생활 화면 만들기

송민경's avatar
Apr 18, 2024
CarrotMarketApp - 동네생활 화면 만들기

class NeighborhoodLife { final String category; final String profileImgUri; final String userName; final String location; final String content; final String contentImgUri; final int commentCount; final int authCount; final String date; NeighborhoodLife({ required this.category, required this.profileImgUri, required this.userName, required this.location, required this.content, required this.contentImgUri, required this.commentCount, required this.authCount, required this.date, }); } // 샘플 데이터 1 String lifeTitle = '이웃과 함께 만드는 봄 간식 지도 마음까지 따듯해지는 봄 간식을 만나보세요.'; // 샘플 데이터 2 List<NeighborhoodLife> neighborhoodLifeList = [ NeighborhoodLife( category: '우리동네질문', profileImgUri: 'https://picsum.photos/id/871/200/300?grayscale', // TODO 06 수정 userName: '헬로비비', location: '좌동', content: '예민한 개도 미용할 수 있는 곳이나 동물 병원 어디 있을까요?\n' '내일 유기견을 데려오기로 했는데 아직 성향을 잘 몰라서 걱정이 돼요 ㅜㅜ.', contentImgUri: 'https://picsum.photos/id/872/200/300?grayscale', commentCount: 11, authCount: 3, date: '3시간전', ), NeighborhoodLife( category: '우리동네소식', profileImgUri: 'https://picsum.photos/id/873/200/100?grayscale', userName: '당근토끼', location: '우동', content: '이명 치료 잘 아시는 분 있나요?', contentImgUri: 'https://picsum.photos/id/874/200/100?grayscale', commentCount: 2, authCount: 1, date: '1일전', ), NeighborhoodLife( category: '분실', profileImgUri: 'https://picsum.photos/id/875/200/100?grayscale', userName: 'flutter', location: '중동', content: '롯데캐슬 방향으로 재래시장 앞쪽 지나 혹시 에어팟 오른쪽 주우신 분 있나요ㅜㅜ', contentImgUri: '', commentCount: 11, authCount: 8, date: '1일전', ), NeighborhoodLife( category: '우리동네질문', profileImgUri: 'https://picsum.photos/id/880/200/100', userName: '구름나드리', location: '우동', content: '밤부터 새벽까지 하던 토스트 아저씨 언제 다시 오나요ㅜㅠ', contentImgUri: '', commentCount: 0, authCount: 7, date: '3일전', ), NeighborhoodLife( category: '우리동네질문', profileImgUri: 'https://picsum.photos/id/730/200/100?grayscale', userName: '아는형', location: '만덕동', content: '아니 이 시간에 마이크 들고 노래하는 사람은 정상인가요?', contentImgUri: 'https://picsum.photos/id/885/200/100', commentCount: 11, authCount: 2, date: '5일전', ), ];
import 'package:carrot_market_ui/screens/components/appbar_preffered_size.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class NeighborhoodLifeScreen extends StatelessWidget { const NeighborhoodLifeScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.grey[100], appBar: AppBar( title: Text("동네생활"), actions: [ IconButton(icon: Icon(CupertinoIcons.search), onPressed: (){}), IconButton(icon: Icon(CupertinoIcons.plus_rectangle_on_rectangle), onPressed: (){}), IconButton(icon: Icon(CupertinoIcons.bell), onPressed: (){}), ], bottom: appBarBottomLine(), ), body: ListView( children: [ ], ), ); } }
notion image
import 'package:carrot_market_ui/models/neighborhood_life.dart'; import 'package:carrot_market_ui/screens/components/image_container.dart'; import 'package:carrot_market_ui/theme.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class LifeHeader extends StatelessWidget { @override Widget build(BuildContext context) { return Card( margin: EdgeInsets.only(bottom: 12.0), elevation: 0.5, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0.0)), child: Padding( padding: EdgeInsets.all(16.0), child: Row( children: [ ImageContainer( borderRadius: 6.0, imageUrl: "http://picsum.photos/id/780/200/100", width: 45.0, height: 45.0), const SizedBox(width: 16.0), Expanded( child: Text( lifeTitle, style: textTheme().bodyLarge, maxLines: 2, overflow: TextOverflow.ellipsis, ), ), ], ), ), ); } }
notion image
import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import '../../../models/neighborhood_life.dart'; import '../../../theme.dart'; import '../components/image_container.dart'; class LifeBody extends StatelessWidget { final NeighborhoodLife neighborhoodLife; const LifeBody({Key? key, required this.neighborhoodLife}) : super(key: key); @override Widget build(BuildContext context) { return Container( decoration: BoxDecoration( color: Colors.white, border: Border( bottom: BorderSide(width: 0.5, color: Color(0xFFD4D5DD)), ), ), child: Column( children: [ _buildTop(), _buildWriter(), _buildWriting(), _buildImage(), Divider( height: 1, thickness: 1, color: Colors.grey[300], ), _buildTail(neighborhoodLife.commentCount), ], ), ); } Padding _buildTop() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.orange[100], height: 30), ); } Padding _buildWriter() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.red[100], height: 30), ); } Padding _buildWriting() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.blue[100], height: 50), ); } _buildImage() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.black, height: 150), ); } Padding _buildTail(int commentCount) { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.lime[100], height: 50), ); } }
notion image
import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import '../../../models/neighborhood_life.dart'; import '../../../theme.dart'; import '../components/image_container.dart'; class LifeBody extends StatelessWidget { final NeighborhoodLife neighborhoodLife; const LifeBody({Key? key, required this.neighborhoodLife}) : super(key: key); @override Widget build(BuildContext context) { return Container( decoration: BoxDecoration( color: Colors.white, border: Border( bottom: BorderSide(width: 0.5, color: Color(0xFFD4D5DD)), ), ), child: Column( children: [ _buildTop(), _buildWriter(), _buildWriting(), _buildImage(), Divider( height: 1, thickness: 1, color: Colors.grey[300], ), _buildTail(neighborhoodLife.commentCount), ], ), ); } Padding _buildTop() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( padding: EdgeInsets.all(4), decoration: BoxDecoration( shape: BoxShape.rectangle, borderRadius: BorderRadius.all(Radius.circular(4)), color: Color.fromRGBO(247, 247, 247, 1), ), child: Text(neighborhoodLife.category, style: textTheme().bodyMedium), ), Text(neighborhoodLife.date, style: textTheme().bodyMedium, ) ], ), ); } Padding _buildWriter() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.red[100], height: 30), ); } Padding _buildWriting() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.blue[100], height: 50), ); } _buildImage() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.black, height: 150), ); } Padding _buildTail(int commentCount) { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.lime[100], height: 50), ); } }
notion image
import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import '../../../models/neighborhood_life.dart'; import '../../../theme.dart'; import '../components/image_container.dart'; class LifeBody extends StatelessWidget { final NeighborhoodLife neighborhoodLife; const LifeBody({Key? key, required this.neighborhoodLife}) : super(key: key); @override Widget build(BuildContext context) { return Container( decoration: BoxDecoration( color: Colors.white, border: Border( bottom: BorderSide(width: 0.5, color: Color(0xFFD4D5DD)), ), ), child: Column( children: [ _buildTop(), _buildWriter(), _buildWriting(), _buildImage(), Divider( height: 1, thickness: 1, color: Colors.grey[300], ), _buildTail(neighborhoodLife.commentCount), ], ), ); } Padding _buildTop() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( padding: EdgeInsets.all(4), decoration: BoxDecoration( shape: BoxShape.rectangle, borderRadius: BorderRadius.all(Radius.circular(4)), color: Color.fromRGBO(247, 247, 247, 1), ), child: Text(neighborhoodLife.category, style: textTheme().bodyMedium), ), Text( neighborhoodLife.date, style: textTheme().bodyMedium, ) ], ), ); } Padding _buildWriter() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Row( children: [ ImageContainer( width: 30, height: 30, borderRadius: 15, imageUrl: neighborhoodLife.profileImgUri, ), SizedBox(width: 8), Text.rich( TextSpan( children: [ TextSpan( text: " ${neighborhoodLife.userName}", style: textTheme().bodyText1, ), TextSpan( text: " ${neighborhoodLife.location}", ), TextSpan( text: " 인증 ${neighborhoodLife.authCount}회", ), ], ), ), ], ), ); } Padding _buildWriting() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.blue[100], height: 50), ); } Padding _buildImage() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.black, height: 150), ); } Padding _buildTail(int commentCount) { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.lime[100], height: 50), ); } }
notion image
import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import '../../../models/neighborhood_life.dart'; import '../../../theme.dart'; import '../components/image_container.dart'; class LifeBody extends StatelessWidget { final NeighborhoodLife neighborhoodLife; const LifeBody({Key? key, required this.neighborhoodLife}) : super(key: key); @override Widget build(BuildContext context) { return Container( decoration: BoxDecoration( color: Colors.white, border: Border( bottom: BorderSide(width: 0.5, color: Color(0xFFD4D5DD)), ), ), child: Column( children: [ _buildTop(), _buildWriter(), _buildWriting(), _buildImage(), Divider( height: 1, thickness: 1, color: Colors.grey[300], ), _buildTail(neighborhoodLife.commentCount), ], ), ); } Padding _buildTop() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( padding: EdgeInsets.all(4), decoration: BoxDecoration( shape: BoxShape.rectangle, borderRadius: BorderRadius.all(Radius.circular(4)), color: Color.fromRGBO(247, 247, 247, 1), ), child: Text(neighborhoodLife.category, style: textTheme().bodyMedium), ), Text( neighborhoodLife.date, style: textTheme().bodyMedium, ) ], ), ); } Padding _buildWriter() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Row( children: [ ImageContainer( width: 30, height: 30, borderRadius: 15, imageUrl: neighborhoodLife.profileImgUri, ), SizedBox(width: 8), Text.rich( TextSpan( children: [ TextSpan( text: " ${neighborhoodLife.userName}", style: textTheme().bodyText1, ), TextSpan( text: " ${neighborhoodLife.location}", ), TextSpan( text: " 인증 ${neighborhoodLife.authCount}회", ), ], ), ), ], ), ); } Padding _buildWriting() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Align( alignment: Alignment.centerLeft, child: Text( neighborhoodLife.content, style: textTheme().bodyLarge, maxLines: 3, overflow: TextOverflow.ellipsis, textAlign: TextAlign.start, ), ) ); } Padding _buildImage() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.black, height: 150), ); } Padding _buildTail(int commentCount) { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.lime[100], height: 50), ); } }
notion image
import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import '../../../models/neighborhood_life.dart'; import '../../../theme.dart'; import '../components/image_container.dart'; class LifeBody extends StatelessWidget { final NeighborhoodLife neighborhoodLife; const LifeBody({Key? key, required this.neighborhoodLife}) : super(key: key); @override Widget build(BuildContext context) { return Container( decoration: BoxDecoration( color: Colors.white, border: Border( bottom: BorderSide(width: 0.5, color: Color(0xFFD4D5DD)), ), ), child: Column( children: [ _buildTop(), _buildWriter(), _buildWriting(), _buildImage(), Divider( height: 1, thickness: 1, color: Colors.grey[300], ), _buildTail(neighborhoodLife.commentCount), ], ), ); } Padding _buildTop() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( padding: EdgeInsets.all(4), decoration: BoxDecoration( shape: BoxShape.rectangle, borderRadius: BorderRadius.all(Radius.circular(4)), color: Color.fromRGBO(247, 247, 247, 1), ), child: Text(neighborhoodLife.category, style: textTheme().bodyMedium), ), Text( neighborhoodLife.date, style: textTheme().bodyMedium, ) ], ), ); } Padding _buildWriter() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Row( children: [ ImageContainer( width: 30, height: 30, borderRadius: 15, imageUrl: neighborhoodLife.profileImgUri, ), SizedBox(width: 8), Text.rich( TextSpan( children: [ TextSpan( text: " ${neighborhoodLife.userName}", style: textTheme().bodyText1, ), TextSpan( text: " ${neighborhoodLife.location}", ), TextSpan( text: " 인증 ${neighborhoodLife.authCount}회", ), ], ), ), ], ), ); } Padding _buildWriting() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Align( alignment: Alignment.centerLeft, child: Text( neighborhoodLife.content, style: textTheme().bodyLarge, maxLines: 3, overflow: TextOverflow.ellipsis, textAlign: TextAlign.start, ), ) ); } Visibility _buildImage() { return Visibility( visible: neighborhoodLife.contentImgUri !="", child:Padding( padding: EdgeInsets.only(left: 16, right: 16, bottom: 16), child: Image.network( neighborhoodLife.contentImgUri, height: 200, width: double.infinity, fit: BoxFit.cover, ), ) ); } Padding _buildTail(int commentCount) { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Container(color: Colors.lime[100], height: 50), ); } }
notion image
import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import '../../../models/neighborhood_life.dart'; import '../../../theme.dart'; import '../components/image_container.dart'; class LifeBody extends StatelessWidget { final NeighborhoodLife neighborhoodLife; const LifeBody({Key? key, required this.neighborhoodLife}) : super(key: key); @override Widget build(BuildContext context) { return Container( decoration: BoxDecoration( color: Colors.white, border: Border( bottom: BorderSide(width: 0.5, color: Color(0xFFD4D5DD)), ), ), child: Column( children: [ _buildTop(), _buildWriter(), _buildWriting(), _buildImage(), Divider( height: 1, thickness: 1, color: Colors.grey[300], ), _buildTail(neighborhoodLife.commentCount), ], ), ); } Padding _buildTop() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( padding: EdgeInsets.all(4), decoration: BoxDecoration( shape: BoxShape.rectangle, borderRadius: BorderRadius.all(Radius.circular(4)), color: Color.fromRGBO(247, 247, 247, 1), ), child: Text(neighborhoodLife.category, style: textTheme().bodyMedium), ), Text( neighborhoodLife.date, style: textTheme().bodyMedium, ) ], ), ); } Padding _buildWriter() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Row( children: [ ImageContainer( width: 30, height: 30, borderRadius: 15, imageUrl: neighborhoodLife.profileImgUri, ), SizedBox(width: 8), Text.rich( TextSpan( children: [ TextSpan( text: " ${neighborhoodLife.userName}", style: textTheme().bodyText1, ), TextSpan( text: " ${neighborhoodLife.location}", ), TextSpan( text: " 인증 ${neighborhoodLife.authCount}회", ), ], ), ), ], ), ); } Padding _buildWriting() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Align( alignment: Alignment.centerLeft, child: Text( neighborhoodLife.content, style: textTheme().bodyLarge, maxLines: 3, overflow: TextOverflow.ellipsis, textAlign: TextAlign.start, ), )); } Visibility _buildImage() { return Visibility( visible: neighborhoodLife.contentImgUri != "", child: Padding( padding: EdgeInsets.only(left: 16, right: 16, bottom: 16), child: Image.network( neighborhoodLife.contentImgUri, height: 200, width: double.infinity, fit: BoxFit.cover, ), )); } Padding _buildTail(int commentCount) { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Row( children: [ Icon( FontAwesomeIcons.smile, color: Colors.grey, size: 22, ), SizedBox(width: 8), Text( "공감하기", style: TextStyle(fontSize: 16, color: Colors.black), ), SizedBox(width: 22), Icon( FontAwesomeIcons.commentAlt, color: Colors.grey, size: 22, ), SizedBox(width: 8), Text( "${"댓글쓰기"} $commentCount", style: TextStyle(fontSize: 16, color: Colors.black), ), ], ), ); } }
notion image
import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import '../../../models/neighborhood_life.dart'; import '../../../theme.dart'; import '../components/image_container.dart'; class LifeBody extends StatelessWidget { final NeighborhoodLife neighborhoodLife; const LifeBody({Key? key, required this.neighborhoodLife}) : super(key: key); @override Widget build(BuildContext context) { return Container( decoration: BoxDecoration( color: Colors.white, border: Border( bottom: BorderSide(width: 0.5, color: Color(0xFFD4D5DD)), ), ), child: Column( children: [ _buildTop(), _buildWriter(), _buildWriting(), _buildImage(), Divider( height: 1, thickness: 1, color: Colors.grey[300], ), _buildTail(neighborhoodLife.commentCount), ], ), ); } Padding _buildTop() { return Padding( padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 16, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( padding: EdgeInsets.all(4), decoration: BoxDecoration( shape: BoxShape.rectangle, borderRadius: BorderRadius.all(Radius.circular(4)), color: Color.fromRGBO(247, 247, 247, 1), ), child: Text(neighborhoodLife.category, style: textTheme().displayMedium), // TODO 06수정 ), Text( neighborhoodLife.date, style: textTheme().displayMedium, // TODO 06수정 ), ], ), ); } Padding _buildWriter() { return Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: Row( children: [ ImageContainer( width: 30, height: 30, borderRadius: 15, imageUrl: neighborhoodLife.profileImgUri, ), Text.rich( TextSpan( children: [ TextSpan(text: ' ${neighborhoodLife.userName}', style: textTheme().bodyLarge), // TODO 06수정 TextSpan(text: ' ${neighborhoodLife.location}', style: textTheme().bodyMedium), // TODO 06수정 TextSpan(text: ' 인증 ${neighborhoodLife.authCount}회', style: textTheme().bodyMedium) // TODO 06수정 ], ), ) ], ), ); } Padding _buildWriting() { return Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16), child: Align( alignment: Alignment.centerLeft, child: Text( neighborhoodLife.content, style: textTheme().bodyLarge, // TODO 06수정 maxLines: 3, overflow: TextOverflow.ellipsis, textAlign: TextAlign.start, ), ), ); } Visibility _buildImage() { return Visibility( visible: neighborhoodLife.contentImgUri != '', child: Padding( padding: EdgeInsets.only(left: 16, right: 16, bottom: 16), child: Image.network( neighborhoodLife.contentImgUri, height: 200, width: double.infinity, fit: BoxFit.cover, ), ), ); } Padding _buildTail(int commentCount) { return Padding( padding: const EdgeInsets.all(16), child: Row( children: [ Icon( FontAwesomeIcons.smile, color: Colors.grey, size: 22, ), SizedBox(width: 8), Text( '공감하기', style: TextStyle(fontSize: 16, color: Colors.black), ), SizedBox(width: 22), Icon( FontAwesomeIcons.commentAlt, color: Colors.grey, size: 22, ), SizedBox(width: 8), Text( "${"댓글쓰기"} $commentCount", style: TextStyle(fontSize: 16, color: Colors.black), ), ], ), ); } }
import 'package:carrot_market_ui/models/neighborhood_life.dart'; import 'package:carrot_market_ui/screens/components/appbar_preffered_size.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'life_body.dart'; import 'life_header.dart'; class NeighborhoodLifeScreen extends StatelessWidget { const NeighborhoodLifeScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.grey[100], appBar: AppBar( title: Text("동네생활"), actions: [ IconButton(icon: Icon(CupertinoIcons.search), onPressed: (){}), IconButton(icon: Icon(CupertinoIcons.plus_rectangle_on_rectangle), onPressed: (){}), IconButton(icon: Icon(CupertinoIcons.bell), onPressed: (){}), ], bottom: appBarBottomLine(), ), body: ListView( children: [ LifeHeader(), Padding(padding: const EdgeInsets.only(bottom: 12.0), child: LifeBody( neighborhoodLife: neighborhoodLifeList[0], ),) ], ), ); } }
notion image
import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import '../../models/neighborhood_life.dart'; import '../components/appbar_preffered_size.dart'; import 'life_body.dart'; import 'life_header.dart'; class NeighborhoodLifeScreen extends StatelessWidget { const NeighborhoodLifeScreen({Key? key}); @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.grey[100], appBar: AppBar( title: Text("동네생활"), actions: [ IconButton(icon: Icon(CupertinoIcons.search), onPressed: (){}), IconButton(icon: Icon(CupertinoIcons.plus_rectangle_on_rectangle), onPressed: (){}), IconButton(icon: Icon(CupertinoIcons.bell), onPressed: (){}), ], bottom: appBarBottomLine(), ), body: ListView.builder( itemCount: neighborhoodLifeList.length, itemBuilder: (context, index) { final lifeItem = neighborhoodLifeList[index]; return Padding( padding: const EdgeInsets.only(bottom: 12.0), child: LifeBody( neighborhoodLife: lifeItem, ), ); }, ), ); } }
notion image
Share article
RSSPowered by inblog