import 'package:cached_network_image/cached_network_image.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:provider/provider.dart';
import 'package:flutter/rendering.dart';
import '../main.dart';
import 'detail.dart';
class JellyMain extends StatefulWidget {
const JellyMain({Key? key}) : super(key: key);
State<JellyMain> createState() => _JellyMainState();
}
class _JellyMainState extends State<JellyMain> {
var isAdded = false;
var scroll = ScrollController();
getMore() async {
Provider.of<Store3>(context, listen: false).addLimitNum();
Provider.of<Store3>(context, listen: false).getAdditionalData();
scroll.position.jumpTo(MediaQuery.of(context).size.height);
}
void initState() {
// TODO: implement initState
super.initState();
Future.microtask(() {
Provider.of<Store3>(context, listen: false).getRegion();
Provider.of<Store3>(context, listen: false).getFirstData();
Provider.of<Store3>(context, listen: false).changeLimitNum();
});
scroll.addListener(() {
if (scroll.position.pixels == scroll.position.maxScrollExtent) {
getMore();
print(Provider.of<Store3>(context, listen: false).limitNumber);
}
});
}
void dispose() {
// TODO: implement dispose
super.dispose();
scroll.dispose();
}
Widget build(BuildContext context) {
final provider = Provider.of<Store3>(context);
final providerLf = Provider.of<Store3>(context, listen: false);
final deviceSize = MediaQuery.of(context).size;
return FutureBuilder(
future: provider.getFirstData(),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.hasError) {
return Text("오류가 발생했습니다.");
}
if (snapshot.hasData && (snapshot.data.docs.length==0)) {
return Column(
children: [
Text("같은지역에 친구가 없네요"),
if(isAdded) Container() else ElevatedButton(
style: ElevatedButton.styleFrom(primary: Color(0xffc09bf4)),
onPressed: () {
context.read<Store3>().getAdditionalData();
setState(() {
isAdded=true;
});
},
child: Text('다른지역 친구도보기')),
if (isAdded)
Padding(
padding: EdgeInsets.only(top: deviceSize.width * 0.03),
child: Wrap(
spacing: deviceSize.width * 0.03,
runSpacing: deviceSize.width * 0.03,
children: [
for (var i = 0; i < provider.addQuery.docs.length; i++)
SizedBox(
width: deviceSize.width * 0.45,
child: ClipRRect(
borderRadius: BorderRadius.circular(17),
child: Hero(
tag: provider.addQuery.docs[i]['uid'],
child: Material(
child: InkWell(
onTap: (){
Navigator.push(context, MaterialPageRoute(builder: (c)=>Detail(uid: provider.addQuery.docs[i]['uid'],url: provider.addQuery.docs[i]['프로필이미지'][5],)));
},
child: CachedNetworkImage(
fit: BoxFit.cover,
imageUrl: provider.addQuery.docs[i]['프로필이미지'][5],
),
),
),
),
),
)
],
),
)
else
Container()
],
);
}
if ((snapshot.connectionState == ConnectionState.done)&&snapshot.hasData) {
var data = snapshot.data;
// return Text(data.docs.toString());
return Column(
children: [
Expanded(
child: Padding(
padding: EdgeInsets.only(left: deviceSize.width * 0.03),
child: ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: (data.docs.length/2).floor(),
controller: scroll,
itemBuilder: (c,i){
return Padding(
padding: EdgeInsets.only(bottom: deviceSize.width * 0.03,),
child: Wrap(
direction: Axis.horizontal,
spacing: deviceSize.width * 0.03,
runSpacing: deviceSize.width * 0.03,
children: [
Material(
child: InkWell(
onTap:(){
Navigator.push(context, MaterialPageRoute(builder: (c)=>Detail(uid: data.docs[2*i]['uid'],url: data.docs[2*i]['프로필이미지'][5],)));
},
child: Stack(
children: [
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17),
boxShadow: [
BoxShadow(
color: Colors.black26,
blurRadius: 6,
offset: Offset(0,3)
)
]
),
width: deviceSize.width * 0.45,
child: ClipRRect(
borderRadius: BorderRadius.circular(17),
child: Hero(
tag: data.docs[2*i]['uid'],
child: CachedNetworkImage(
fit: BoxFit.cover,
imageUrl: data.docs[2*i]['프로필이미지'][5],
),
),
),
),
SizedBox(
width: deviceSize.width*0.45,
height:deviceSize.width*0.45,
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
padding: EdgeInsets.only(left: 8),
height:66,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(12),
bottomRight: Radius.circular(12),
),
gradient: LinearGradient(
begin: Alignment.topCenter,
end:Alignment.bottomCenter,
colors: [Colors.transparent,Colors.black26]
)
),
child: Column(
children: [
Container(
width:deviceSize.width*0.45,
child: Wrap(
spacing: deviceSize.width*0.003,
children: [
for(var j=0;j<2;j++)
Container(
padding:EdgeInsets.only(left: 5,right: 5,bottom: 2),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(11),
color: Colors.black38
),
child: Text(data.docs[2*i]['취미'][j],style: TextStyle(fontSize: 12,color: Colors.white,fontWeight: FontWeight.w500),)
),
],
)
),
Container(
width:deviceSize.width*0.45,
child: Row(
children: [
Padding(
padding: const EdgeInsets.only(right: 6.0),
child: Text(data.docs[2*i]['닉네임'],style: TextStyle(fontSize: 15,color: Colors.white,fontWeight: FontWeight.w500),),
),
Padding(
padding: const EdgeInsets.only(top: 1.0),
child: Text(data.docs[2*i]['나이'],style: TextStyle(fontSize: 15,color: Colors.white,fontWeight: FontWeight.w300)),
),
],
)
),
Container(
width:deviceSize.width*0.45,
child: Row(
children: [
Padding(
padding: const EdgeInsets.only(right: 6.0),
child: Text('${data.docs[2*i]['지역']} ${data.docs[2*i]['상세']}',style: TextStyle(fontSize: 11.5,color: Colors.white,fontWeight: FontWeight.w300)),
),
Text(data.docs[2*i]['직업'],style: TextStyle(fontSize: 11.5,color: Colors.white,fontWeight: FontWeight.w300)),
],
)
),
],
),
),
],
),
)
],
),
),
),
Material(
child: InkWell(
onTap:(){
Navigator.push(context, MaterialPageRoute(builder: (c)=>Detail(uid: data.docs[2*i+1]['uid'],url: data.docs[2*i+1]['프로필이미지'][5],)));
},
child: Stack(
children: [
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17),
boxShadow: [
BoxShadow(
color: Colors.black26,
blurRadius: 6,
offset: Offset(0,3)
)
]
),
width: deviceSize.width * 0.45,
child: ClipRRect(
borderRadius: BorderRadius.circular(17),
child: Hero(
tag: data.docs[2*i+1]['uid'],
child: CachedNetworkImage(
fit: BoxFit.cover,
imageUrl: data.docs[2*i+1]['프로필이미지'][5],
),
),
),
),
SizedBox(
width: deviceSize.width*0.45,
height:deviceSize.width*0.45,
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
padding: EdgeInsets.only(left: 8),
height:66,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(12),
bottomRight: Radius.circular(12),
),
gradient: LinearGradient(
begin: Alignment.topCenter,
end:Alignment.bottomCenter,
colors: [Colors.transparent,Colors.black26]
)
),
child: Column(
children: [
Container(
width:deviceSize.width*0.45,
child: Wrap(
spacing: deviceSize.width*0.003,
children: [
for(var j=0;(j<2)&&(j<data.docs[2*i+1]['취미'].length);j++)
Container(
padding:EdgeInsets.only(left: 5,right: 5,bottom: 2),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(11),
color: Colors.black38
),
child: Text(data.docs[2*i+1]['취미'][j],style: TextStyle(fontSize: 12,color: Colors.white,fontWeight: FontWeight.w500),)
),
],
)
),
Container(
width:deviceSize.width*0.45,
child: Row(
children: [
Padding(
padding: const EdgeInsets.only(right: 6.0),
child: Text(data.docs[2*i+1]['닉네임'],style: TextStyle(fontSize: 15,color: Colors.white,fontWeight: FontWeight.w500),),
),
Padding(
padding: const EdgeInsets.only(top: 1.0),
child: Text(data.docs[2*i+1]['나이'],style: TextStyle(fontSize: 15,color: Colors.white,fontWeight: FontWeight.w300)),
),
],
)
),
Container(
width:deviceSize.width*0.45,
child: Row(
children: [
Padding(
padding: const EdgeInsets.only(right: 6.0),
child: Text('${data.docs[2*i+1]['지역']} ${data.docs[2*i+1]['상세']}',style: TextStyle(fontSize: 11.5,color: Colors.white,fontWeight: FontWeight.w300)),
),
Text(data.docs[2*i+1]['직업'],style: TextStyle(fontSize: 11.5,color: Colors.white,fontWeight: FontWeight.w300)),
],
)
),
],
),
),
],
),
)
],
),
),
),
],
),
);
},
),
),
),
if(isAdded) Container() else ElevatedButton(
style: ElevatedButton.styleFrom(primary: Color(0xffc09bf4)),
onPressed: () {
context.read<Store3>().getAdditionalData();
setState(() {
isAdded=true;
});
},
child: Text('다른지역 친구도보기')),
if (isAdded)
Padding(
padding: EdgeInsets.only(top: deviceSize.width * 0.03),
child: Wrap(
spacing: deviceSize.width * 0.03,
runSpacing: deviceSize.width * 0.03,
children: [
for (var i = 0; i < provider.addQuery.docs.length; i++)
SizedBox(
width: deviceSize.width * 0.45,
child: ClipRRect(
borderRadius: BorderRadius.circular(17),
child: Hero(
tag: provider.addQuery.docs[i]['uid'],
child: Material(
child: InkWell(
onTap: (){
Navigator.push(context, MaterialPageRoute(builder: (c)=>Detail(uid: provider.addQuery.docs[i]['uid'],url: provider.addQuery.docs[i]['프로필이미지'][5],)));
},
child: CachedNetworkImage(
fit: BoxFit.cover,
imageUrl: provider.addQuery.docs[i]['프로필이미지'][5],
),
),
),
),
),
)
],
),
)
else
Container()
],
);
}
return SpinKitPulse(
color: Color(0xffc09bf4),
size: 50.0,
);
},
);
}
}