Проблема (почему контекст не работает для вас) заключается в том, что в вашей customCard метод
нет объекта BuildContext * Есть несколько способов достижения this ..
Один из способов - добавить параметр BuildContext в ваш метод. Подобно этому
Widget customcard(BuildContext context, String testName) {
return Padding(
padding: EdgeInsets.all(10.0),
child: InkWell(
onTap: () {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => GetTestData(),
),
);
},
child: Material(
borderRadius: BorderRadius.circular(50.0),
elevation: 20.0,
child: Container(
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.fromLTRB(5.0, 20.0, 10.0, 20.0),
child: Text(
testName,
style: TextStyle(
fontSize: 24.0,
),
),
),
],
),
),
),
),
);
}
Тогда ваши потомки ListView будут выглядеть как
customCard(context, "Theory Test 1")
Еще один способ сделать это - создать виджет без состояния и вернуть пользовательскую карту в методе сборки.
class CustomCard extends StatelessWidget {
String testName;
CustomCard(this.testName);
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.all(10.0),
child: InkWell(
onTap: () {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => GetTestData(),
),
);
},
child: Material(
borderRadius: BorderRadius.circular(50.0),
elevation: 20.0,
child: Container(
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.fromLTRB(5.0, 20.0, 10.0, 20.0),
child: Text(
testName,
style: TextStyle(
fontSize: 24.0,
),
),
),
],
),
),
),
),
);
}
}
Тогда ваши потомки ListView будут похожи на ...
CustomCard("Theory Test 1")
Я надеюсь, что это поможет вам.