Json 自定义滚动视图内的分页-颤振
我已经实现了一个CustomScrollview,其中有一个SliverGrid,我正在成功地从服务器获取数据,但是我需要在这里提供分页,我需要一些帮助,无论是通过添加一个按钮并增加值,还是通过添加一个无限滚动视图并进行分页来实现。但是如何处理UI也是我的问题,所以任何人都可以在这方面帮助我Json 自定义滚动视图内的分页-颤振,json,flutter,dart,Json,Flutter,Dart,我已经实现了一个CustomScrollview,其中有一个SliverGrid,我正在成功地从服务器获取数据,但是我需要在这里提供分页,我需要一些帮助,无论是通过添加一个按钮并增加值,还是通过添加一个无限滚动视图并进行分页来实现。但是如何处理UI也是我的问题,所以任何人都可以在这方面帮助我 @override Widget build(BuildContext context) { print("Home"); return WillPopScope(
@override
Widget build(BuildContext context) {
print("Home");
return WillPopScope(
onWillPop: exitApp,
child: Scaffold(
appBar: AppBar(
leading: Image.asset('assets/images/ic_logo.png'),
actions: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: FlatButton.icon(
onPressed: () {},
icon: Icon(Icons.location_on),
label: Text('Mysuru, India'),
textColor: Colors.white,
),
),
],
),
body: CustomScrollView(
slivers: [
SliverToBoxAdapter(
child: SizedBox(
child: _search(),
),
),
SliverToBoxAdapter(
child: SizedBox(
child: FutureBuilder(
future: _getCat(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.data == null) {
return Center(
child: CircularProgressIndicator(),
);
} else {
return Column(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('Categories'),
GestureDetector(
onTap: (){
Navigator.push(context, MaterialPageRoute(builder: (context) => CategoriesScreen()));
},
child: Text('VIEW ALL >', style: TextStyle(decoration: TextDecoration.underline, color: Colors.redAccent),),
)
],
),
),
Container(
height: 120,
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: const EdgeInsets.all(2.0),
child: InkWell(
onTap: () {
Navigator.push(context, MaterialPageRoute(builder: (context) => SubCategoriesScreen(snapshot.data[index].id,snapshot.data[index].title)));
},
child: Container(
width: 100,
child: ListTile(
title: Image.network(
snapshot.data[index].image,
height: 60,
width: 100,
),
subtitle: Container(
alignment: Alignment.topCenter,
child: Text(
snapshot.data[index].title,
style: TextStyle(fontSize: 10),
)),
),
),
),
);
// return Text(snapshot.data[index].id);
}),
),
],
);
}
},
),
),
),
SliverGrid(
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 250.0,
mainAxisSpacing: 0.0,
crossAxisSpacing: 0.0,
childAspectRatio: 0.7,
),
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return GestureDetector(
onTap: () {
print(data[index]['adid']);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
ProductDetailsScreen(data[index]['adid'])));
},
child: Container(
margin: EdgeInsets.all(5),
decoration:
BoxDecoration(border: Border.all(color: Colors.grey)),
child: Padding(
padding: const EdgeInsets.all(10),
child: Column(
children: <Widget>[
Expanded(
flex: 5,
child: Align(
alignment: Alignment.center,
child: Image.network(
data[index]['adcoverimg'],
fit: BoxFit.cover,
),
),
),
SizedBox(
height: 10,
),
Expanded(
flex: 2,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'\u20B9' + data[index]['ads_price'],
style: TextStyle(fontWeight: FontWeight.bold),
),
Text(
data[index]['adname'],
style: TextStyle(fontWeight: FontWeight.w500),
maxLines: 1,
),
Text(
data[index]['addesc'],
maxLines: 1,
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Icon(
Icons.location_on,
size: 18,
),
Text(data[index]['ads_location'])
],
)
],
),
)
],
),
),
),
);
},
childCount: data == null ? 0 : data.length,
),
),
],
),
),
);
}
@覆盖
小部件构建(构建上下文){
打印(“主页”);
返回式示波器(
onWillPop:exitApp,
孩子:脚手架(
appBar:appBar(
前导:Image.asset('assets/images/ic_logo.png'),
行动:[
填充物(
填充:常数边集全部(8.0),
子:FlatButton.icon(
按下:(){},
图标:图标(图标位置打开),
标签:文本('Mysuru,India'),
textColor:Colors.white,
),
),
],
),
正文:自定义滚动视图(
条子:[
滑动双轴适配器(
孩子:大小盒子(
子项:_search(),
),
),
滑动双轴适配器(
孩子:大小盒子(
孩子:未来建设者(
未来:_getCat(),
生成器:(BuildContext上下文,异步快照){
如果(snapshot.data==null){
返回中心(
子对象:CircularProgressIndicator(),
);
}否则{
返回列(
儿童:[
填充物(
填充:常数边集全部(8.0),
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
文本(“类别”),
手势检测器(
onTap:(){
push(context,materialpage(builder:(context)=>CategoriesScreen());
},
子项:文本('VIEW ALL>',样式:TextStyle(装饰:TextDecoration.underline,颜色:Colors.redAccent),),
)
],
),
),
容器(
身高:120,
子项:ListView.builder(
滚动方向:轴水平,
itemCount:snapshot.data.length,
itemBuilder:(构建上下文,int索引){
返回填充(
填充:常数边集全部(2.0),
孩子:InkWell(
onTap:(){
Navigator.push(上下文,MaterialPageRoute(builder:(context)=>SubCategoriesScreen(snapshot.data[index].id,snapshot.data[index].title));
},
子:容器(
宽度:100,
孩子:ListTile(
标题:Image.network(
snapshot.data[index].image,
身高:60,
宽度:100,
),
字幕:集装箱(
对齐:alignment.topCenter,
子:文本(
snapshot.data[index].title,
样式:TextStyle(字体大小:10),
)),
),
),
),
);
//返回文本(snapshot.data[index].id);
}),
),
],
);
}
},
),
),
),
银栅(
gridDelegate:SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent:250.0,
主轴间距:0.0,
交叉轴间距:0.0,
childAspectRatio:0.7,
),
代表:SliverChildBuilderDelegate(
(BuildContext上下文,int索引){
返回手势检测器(
onTap:(){
打印(数据[索引]['adid']);
导航器。推(
上下文
材料路线(
生成器:(上下文)=>
ProductDetailsScreen(数据[索引]['adid']);
},
子:容器(
保证金:所有(5),
装饰:
BoxEdition(边框:border.all(颜色:Colors.grey)),
孩子:填充(
填充:常量边集。全部(10),
子:列(
儿童:[
扩大(
弹性:5,
子对象:对齐(
对齐:对齐.center,
Future<String> getProducts() async {
String url = Constant.productsUrl;
Map<String, String> headers = {'Content-Type': 'application/json'};
final response = await http.get(url, headers: headers);
setState(() {
var jsonResponse = json.decode(response.body);
data = jsonResponse['record'];
});
}