У меня есть эта функция, которая возвращает новый объект класса, но один и тот же код в двух приложениях возвращает два разных результата,
Случай 1: где он работает нормально и возвращает ожидаемый результат:
_buildIt() {
return new ShowProduct('name', 12, "AFs", "ImagePath");
}
@override
Widget build(BuildContext context) {
return new Stack(
fit: StackFit.expand,
children: [
new Column(
children: <Widget>[
new AnswerButton(true, () => handleAnswer(true)),
new QuestionText(questionText, questionNumber),
new AnswerButton(false, () => handleAnswer(false))
],
),
overlayShouldBeVisibile == true ? _buildIt() : new Container()
],
);
}
Случай 2: где он работает, но без результата (в пользовательском интерфейсе ничего не происходит):
_buildIt() {
return new ShowProduct('name', 12, "AFs", "ImagePath");
}
_buildGridItem(BuildContext context, document) {
return new Card(
elevation: 4.0,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15.0)),
child: InkWell(
child: new GridTile(
footer: Padding(
padding: const EdgeInsets.all(8.0),
child: new Column(children: <Widget>[
new Text(
document['name'],
),
new Text(
document['price'].toString(),
),
]),
),
child: new Icon(Icons.ac_unit,
size: 100.0), //just for testing, will fill with image later
),
onTap: () {
_buildIt();
},
),
);
}
класс - это новый маршрут (страница), где пользователь увидит некоторый контент,Вот код для класса:
import 'package:flutter/material.dart';
class ShowProduct extends StatefulWidget {
String _productName = "";
int _productPrice = 0;
String _productUnit = "";
String _productImagePath = "";
ShowProduct(this._productName, this._productPrice, this._productUnit,
this._productImagePath);
@override
State createState() => new ShowProductState(
_productName, _productPrice, _productUnit, _productImagePath);
}
class ShowProductState extends State<ShowProduct> {
int _productQuantity = 0;
int _productTotal = 0;
int _productPrice = 0;
String _productName = "";
String _productUnit = "";
String _productImagePath = "";
ShowProductState(this._productName, this._productPrice, this._productUnit,
this._productImagePath);
@override
Widget build(BuildContext context) {
return Material(
color: Colors.white54,
child: Padding(
padding: const EdgeInsets.only(
top: 100.0, left: 50.0, right: 50.0, bottom: 100.0),
child: Stack(
alignment: Alignment.topCenter,
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 150 / 2.0),
child: Container(
decoration: new BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(16.0),
),
boxShadow: [
new BoxShadow(
color: Colors.black54,
blurRadius: 8.0,
)
],
),
height: 450.0,
width: 400.0,
child: new Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.only(top: 85.0),
child: new Text(
'$_productName',
style: TextStyle(
color: Colors.black,
fontSize: 40.0,
fontWeight: FontWeight.w300,
),
),
),
new Text(
'$_productPrice' + ' $_productUnit',
style: TextStyle(color: Colors.redAccent, fontSize: 24.0),
),
Padding(
padding: const EdgeInsets.only(top: 20.0),
child: new Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
new OutlineButton(
highlightedBorderColor: Colors.red,
shape: new RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(30.0)),
child: new Text(
"-",
style: TextStyle(
fontSize: 40.0, fontWeight: FontWeight.w300),
),
onPressed: () => setState(() {
if (_productQuantity > 0) _productQuantity--;
}),
),
new Text(
'$_productQuantity',
style:
TextStyle(color: Colors.black, fontSize: 50.0),
),
new OutlineButton(
highlightedBorderColor: Colors.green,
shape: new RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(30.0)),
child: new Text(
"+",
style: TextStyle(
fontSize: 40.0, fontWeight: FontWeight.w300),
),
onPressed: () => setState(() {
if (_productQuantity < 1000)
_productQuantity++;
_productTotal =
_productQuantity * _productPrice;
}),
),
],
),
),
Padding(
padding: const EdgeInsets.only(top: 20.0),
child: new Text(
"Total: " + '$_productTotal' + ' $_productUnit',
style: TextStyle(color: Colors.black87, fontSize: 24.0),
),
),
Padding(
padding: const EdgeInsets.only(top: 25.0),
child: RaisedButton.icon(
shape: new RoundedRectangleBorder(
borderRadius:
new BorderRadius.all(Radius.circular(30.0))),
color: Colors.green,
onPressed: () {},
icon: Padding(
padding: const EdgeInsets.only(
top: 8.0, left: 24.0, bottom: 8.0),
child: Icon(
Icons.add_shopping_cart,
color: Colors.white,
size: 34.0,
),
),
label: Padding(
padding: const EdgeInsets.only(
top: 8.0, right: 24.0, bottom: 8.0),
child: new Text(
"ADD TO CART",
style:
TextStyle(color: Colors.white, fontSize: 20.0),
),
),
),
)
],
),
),
),
Container(
decoration: new BoxDecoration(boxShadow: [
new BoxShadow(
color: Colors.black54,
blurRadius: 8.0,
),
], borderRadius: BorderRadius.all(Radius.circular(110.0))),
width: 150.0,
height: 150.0,
child: DecoratedBox(
decoration: ShapeDecoration(
shape: CircleBorder(),
image: DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(
'https://image.freepik.com/free-vector/fresh-tomato_1053-566.jpg',
))),
),
)
],
),
),
);
}
}
Я проверил оба случая с (print ()), и кажется, что все в порядке, но нет изменений и перехода к следующему экрану в2-й случай.