import 'package:drawer/refresh%20_pagination.dart/brandApi.dart';
import 'package:flutter/material.dart';
class BrandProducts extends StatefulWidget {
BrandProducts({ this.id=1, this.brand_name});
final int id;
final String? brand_name;
@override
_BrandProductsState createState() => _BrandProductsState();
}
class _BrandProductsState extends State<BrandProducts> {
ScrollController _scrollController = ScrollController();
ScrollController _xcrollController = ScrollController();
TextEditingController _searchController = TextEditingController();
List<dynamic> _productList = [];
bool _isInitial = true;
int _page = 1;
String _searchKey = "";
int _totalData = 0;
bool _showLoadingContainer = false;
@override
void initState() {
// TODO: implement initState
super.initState();
fetchData();
_xcrollController.addListener(() {
//print("position: " + _xcrollController.position.pixels.toString());
//print("max: " + _xcrollController.position.maxScrollExtent.toString());
if (_xcrollController.position.pixels ==
_xcrollController.position.maxScrollExtent) {
setState(() {
_page++;
});
_showLoadingContainer = true;
fetchData();
}
});
}
@override
void dispose() {
// TODO: implement dispose
_scrollController.dispose();
_xcrollController.dispose();
super.dispose();
}
fetchData() async {
var productResponse = await ProductRepository()
.getBrandProducts(id:widget.id, page: _page, name: _searchKey);
_productList.addAll(productResponse.products);
_isInitial = false;
_totalData = productResponse.meta.total;
_showLoadingContainer = false;
setState(() {});
}
reset() {
_productList.clear();
_isInitial = true;
_totalData = 0;
_page = 1;
_showLoadingContainer = false;
setState(() {});
}
Future<void> _onRefresh() async {
reset();
fetchData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Stack(
children: [
buildProductList(),
Align(
alignment: Alignment.bottomCenter,
child: buildLoadingContainer())
],
));
}
Container buildLoadingContainer() {
return Container(
height: _showLoadingContainer ? 36 : 0,
width: double.infinity,
color: Colors.white,
child: Center(
child: _totalData == _productList.length
? Text('common_no_more_products')
: Text('common_no_more_products')
),
);
}
buildProductList() {
if (_isInitial && _productList.length == 0) {
return SingleChildScrollView(
child:Text('no data'));
} else if (_productList.length > 0) {
return RefreshIndicator(
color:Colors.white,
backgroundColor: Colors.white,
displacement: 0,
onRefresh: _onRefresh,
child: SingleChildScrollView(
controller: _xcrollController,
physics: const BouncingScrollPhysics(
parent: AlwaysScrollableScrollPhysics()),
child: GridView.builder(
// 2
//addAutomaticKeepAlives: true,
itemCount: _productList.length,
controller: _scrollController,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 10,
mainAxisSpacing: 10,
childAspectRatio: 0.618),
padding: EdgeInsets.all(16),
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (context, index) {
// 3
return ProductCard(
id: _productList[index].id,
image: _productList[index].thumbnail_image,
name: _productList[index].name,
main_price: _productList[index].main_price,
stroked_price: _productList[index].stroked_price,
has_discount: _productList[index].has_discount);
},
),
),
);
} else if (_totalData == 0) {
return Center(
child: Text('common_no_data_available'));
} else {
return Container(); // should never be happening
}
}
}
.........................................
api calling page
import 'dart:convert';
import 'package:drawer/refresh%20_pagination.dart/model.dart';
import 'package:http/http.dart' as http;
class ProductRepository {
Future getBrandProducts({int id = 0, name = "", page = 1}) async {
Uri url = Uri.parse("www.bongobaba.com/products/brand/" +
id.toString() +
"?page=${page}&name=${name}");
final response = await http.get(url, headers: {
"App-Language": 'English',
});
print(jsonDecode(response.body));
return jsonDecode(response.body);
}
}
0 মন্তব্যসমূহ