class HistoryPage extends View {
@override
State<StatefulWidget> createState() => HistoryState();
}
class HistoryState extends ViewState<HistoryPage, HistoryController> {
HistoryState() : super(HistoryController(DataReceiptRepository()));
...
class HomePage extends View {
@override
State<StatefulWidget> createState() => _HomePageState();
}
class _HomePageState extends ViewState<HomePage, HomeController> {
_HomePageState() : super(HomeController(DataReceiptRepository()));
...
/class InputForm extends StatelessWidget {
final bool homeWidget;
const InputForm({Key? key, required this.homeWidget}) : super(key: key);
Widget storeNameTextField(BuildContext context, HomeController controller) =>
PaddingWidget(
widget: SimpleTextfieldWidget(
controller: controller.storeNameController,
hintText: "Store Name",
labelText: "Store Name",
helperText: "The receipt store name",
validator: controller.validateStoreName,
suggestionList: controller.getStoreNames(),
readOnly: false,
icon: Icon(Icons.store_mall_directory_outlined)));
Widget tagTextField(BuildContext context, HomeController controller) =>
PaddingWidget(
widget: SimpleTextfieldWidget(
controller: controller.receiptTagController,
hintText: "Receipt Tag",
labelText: "Receipt Tag",
helperText: "The receipt tag",
validator: (value) => null,
suggestionList: controller.getTagNames(),
icon: Icon(Icons.tag),
readOnly: false,
));
Widget totalTextField(BuildContext context, HomeController controller) =>
PaddingWidget(
widget: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: SimpleTextfieldWidget(
controller: controller.receiptTotalController,
hintText: "Receipt Total",
labelText: "Receipt Total",
helperText: "The receipt total",
icon: Icon(Icons.monetization_on_outlined),
validator: controller.validateTotal,
inputFormatters: [MoneyInputFormatter()],
keyboardType: TextInputType.number,
readOnly: false,
)),
PaddingWidget(
widget: NeumorphicButton(
onPressed: () => controller.currencyPicker(context),
style: NeumorphicStyle(
color: Colors.grey[200],
shape: NeumorphicShape.flat,
boxShape: NeumorphicBoxShape.stadium(),
border: NeumorphicBorder(width: 2, color: Colors.green)),
child: Padding(
padding: const EdgeInsets.all(4.0),
child: Text(
controller.currency?.code ?? "EUR",
style: TextStyle(fontWeight: FontWeight.bold),
)),
),
)
],
));
Widget dateTextField(BuildContext context, HomeController controller) =>
PaddingWidget(
widget: GestureDetector(
onTap: () => controller.setDate,
child: SimpleTextfieldWidget(
controller: controller.receiptDateController,
hintText: "Receipt Date",
labelText: "Receipt Date",
helperText: "The receipt date",
onTap: () => controller.setDate(context),
icon: Icon(Icons.date_range),
validator: controller.validateDate,
readOnly: true,
)));
Widget submitButton(BuildContext context, HomeController controller) =>
PaddingWidget(
widget: Align(
alignment: Alignment.centerLeft,
child: NeumorphicButton(
onPressed: () => controller.submit(),
style: NeumorphicStyle(
shape: NeumorphicShape.flat,
boxShape: NeumorphicBoxShape.stadium(),
),
child:
Text("Submit", style: TextStyle(fontWeight: FontWeight.bold))),
));
Widget categoryTextFormat(BuildContext context, HomeController controller) =>
PaddingWidget(
widget: SimpleTextfieldWidget(
controller: controller.receiptCategoryController,
hintText: "Receipt Category",
labelText: "Receipt Category",
helperText: "The receipt category",
icon: Icon(Icons.category),
validator: controller.validateCategory,
suggestionList: controller.getCategoryNames(),
readOnly: false,
));
spacer() => SizedBox(
height: 50,
);
@override
Widget build(BuildContext context) {
HomeController controller =
FlutterCleanArchitecture.getController<HomeController>(context);
return SingleChildScrollView(
child: Form(
key: controller.formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
storeNameTextField(context, controller),
totalTextField(context, controller),
dateTextField(context, controller),
tagTextField(context, controller),
categoryTextFormat(context, controller),
submitButton(context, controller),
spacer()
],
),
));
}
}
void editMethod(ReceiptHolder receipt, BuildContext context) async {
await showDialog<String>(
context: context,
builder: (BuildContext dialogContext) {
return AlertDialog(
titleTextStyle: TextStyle(
color: Colors.black,
fontWeight: FontWeight.w400,
fontSize: 22),
backgroundColor: Colors.white,
title: Text("Edit receipt"),
content: Container(
height: 300,
width: 250,
color: Colors.white,
// The Form widget earlier
child: InputForm(
homeWidget: false,
)));
});
await repository.updateReceipt(receipt);
}
Error: Could not find the correct Provider<HomeController> above this InputForm Widget
This happens because you used a `BuildContext` that does not include the provider
of your choice.
How could I fix this issue. I understand the issue but I'm not able to resolve this issue. Thanks in advance!