#laravel #flutter
Вопрос:
я новичок , и у меня странная ошибка, у меня проблема с видимостью, я работаю с api laravel, если у меня нет продуктов в базе данных, этот.виджет.клиент всегда ложен, если у меня есть продукт в базе данных, приложение работает отлично !! код флаттера :
bool client=false ;
_getAuthenticatedUser() async {
SharedPreferences _prefs = await SharedPreferences.getInstance();
var log = new Logger();
var x = _prefs.getString('photoUser');
this.widget.photo=json.decode(x);
this.widget.name= json.decode(_prefs.getString('Username'));
if(_prefs.getString('token')!=null){
if(json.decode(_prefs.getString('role'))=='superAdmin'){
this.widget.superAdmin=true;}else{this.widget.superAdmin=false;}
if(json.decode(_prefs.getString('role'))=='admin'){
this.widget.admin=true;
}else{this.widget.admin=false;}
if(json.decode(_prefs.getString('role'))=='user'){
_prefs.setString('client', 'client');
this.widget.client=true;
}else{this.widget.client=false; log.d('here not client');}
}
else{
this.widget.superAdmin=false;
this.widget.admin=false;
this.widget.client=false;
}
}
_getAllProducts() async {
var _productService = ProductService();
var products = await _productService.getProducts();
var result = json.decode(products.body);
var log = new Logger();
_productList.clear();
result.forEach((data) {
var product = Product();
product.id = data['id'] ?? 0 ;
product.name = data['name'] ?? "";
product.photo = data['photo'] ?? "";
product.price = data['price'] ?? 0;
product.discount = data['discount'] ?? 0;
product.detail = data['detail'] ?? 'No detail';
product.quantity = data['quantity'] ?? 0;
setState(() {
_productList.add(product);
});
});
}
@override
void initState(){
super.initState();
_getAuthenticatedUser();
_getAllProducts();}
and in the build
Visibility(
visible: this.widget.client,
child: ListTile(
leading: Icon(Icons.category,color: Colors.white,),
title: Text('Produits refusé',style: TextStyle(color: Colors.white)),
onTap: () {
Navigator.push(context, MaterialPageRoute(
builder: (context) =>RefusedProducts(_refusedProductList,this.widget.client,this.widget.photo,this.widget.name)));
}
),),
Комментарии:
1. Вам нужно проверить, как
setState
и как использовать его для обновления значения.2. Проблема в том, что я передаю _productList пустым на другой экран
Ответ №1:
Вы можете обернуть свою setState()
функцию следующим образом:
WidgetsBinding.instance?.addPostFrameCallback((_) {
setState(() {
_productList.add(product);
});
});
Комментарии:
1. Спасибо за ответ , та же проблема,проблема в том, что я передаю _productList пустым на другой экран
2. Вы звоните
SetState()
по каждому товару. Это означает, что вы много раз перестраиваете виджет впустую. В любом случае, вам действительно нужно пройти несколько уроков.