#flutter #dart #testing #widget
Вопрос:
У меня возникла проблема при попытке выполнить тестирование моего пользовательского виджета. Это может быть простая проблема, но я не понял, что произошло. У меня есть кнопка количества с помощью кнопки увеличения и уменьшения, но я, похоже, не могу обновить текстовый результат. Я даже печатаю результат количества и имитирую 2 раза нажатие на кнопку увеличения. результат, который я напечатал, начинается с 1 и заканчивается на 3, но параметр qty on result в моем пользовательском виджете по-прежнему отображается только 1. вот сообщение о результате:
1
2
3
(Text-[<'res'>]("1", inherit: true, color: Color(0xffffffff), size: 20.0, dependencies: [MediaQuery, DefaultTextStyle]))
мой пользовательский код виджета кнопки кол-во:
class AddQty extends StatelessWidget {
Key? widgetKey;
Key? incrementKey;
Key? decrementKey;
Key? resultKey;
final String buttoncolor;
final int resu<
final VoidCallback? incrementFunction;
final VoidCallback? decrementFunction;
final double spacing;
AddQty(
{
this.widgetKey,
this.result = 0,
this.buttoncolor = "#ffffff",
this.incrementFunction,
this.decrementFunction,
this.spacing = 0,
this.incrementKey,
this.decrementKey,
this.resultKey});
// CounterBloc bloc = CounterBloc();
@override
Widget build(BuildContext context) {
return Row(
key: widgetKey,
children: <Widget>[
GestureDetector(
key: decrementKey,
onTap: decrementFunction,
child: Container(
margin: EdgeInsets.only(right: 10),
padding: EdgeInsets.all(8),
child: Icon(
Icons.remove,
size: 17,
),
decoration: BoxDecoration(
color: HexColor(buttoncolor),
borderRadius: BorderRadius.circular(25),
),
),
),
SizedBox(width: spacing,),
Text(
'${result}',
key: resultKey,
style: TextStyle(fontSize: 20, color: Colors.white),
),
SizedBox(width: spacing,),
GestureDetector(
key: incrementKey,
onTap: incrementFunction,
child: Container(
margin: EdgeInsets.only(left: 10),
padding: EdgeInsets.all(8),
child: Icon(
Icons.add,
size: 17,
),
decoration: BoxDecoration(
color: HexColor(buttoncolor),
borderRadius: BorderRadius.circular(25),
),
),
),
],
);
}
}
мой тестовый код:
group("Button Testing Widget", () {
testWidgets(
"Should return init of 1 and return 2 after incremented and return 1 after decremented",
(WidgetTester tester) async {
int qty = 1;
void increment() => qty ;
void decrement() => qty--;
await tester.pumpWidget(MaterialApp(
home: AddQty(
incrementFunction: () {increment();},
incrementKey: Key('inc'),
result: qty,
resultKey: Key('res'),
decrementKey: Key('dec'),
decrementFunction: () {decrement();},
),),);
final Finder fab = find.byKey(Key('inc'));
print(qty);
await tester.tap(fab);
await tester.pumpAndSettle();
print(qty);
await tester.tap(fab);
await tester.pumpAndSettle();
print(qty);
print(find.byKey(Key('res')).evaluate());
},
);
});