I have a screen that contains a Slider_up_widget
On the main body I can pass a variable using widget.type.varaible and returns a string
_pageDetails.detailsMainImage(widget.barPage.barBusinessNameMainImage),
On my slide_up_panel I'm trying to do the same but I'm getting an error
_pageDetails.businessOperating(widget.barPage.barBusinessAddr),
"The getter 'barPage' isn't defined for the type 'PanelWidgetBusiness'."
This is my panel class
class PanelWidgetBusiness extends StatefulWidget {
final ScrollController controller;
final PanelController panelController;
const PanelWidgetBusiness({
Key? key,
required this.controller,
required this.panelController,
}) : super(key: key);
@override
State<PanelWidgetBusiness> createState() => _PanelWidgetBusinessState();
}
class _PanelWidgetBusinessState extends State<PanelWidgetBusiness> {
final _pageDetails = const BarRestPageWidgets();
@override
Widget build(BuildContext context) =>
ListView(
padding: EdgeInsets.zero,
controller: widget.controller,
children: [
// _pageDetails.businessOperating(),
_pageDetails.businessOperating(widget.barPage.barBusinessAddr),
],
);
}
I have tried using
final BarDetails barPage;
which removes the error but then my panelBuilder requires
The named parameter 'barPage' is required, but there's no corresponding argument.
What have I got to put in there to satisfy it.
panelBuilder: (controller) => PanelWidgetBusiness(
controller: controller,
panelController: panelController,
barPage: null, // ←← What should I put here
),
Is it possible to make the barpage not required in the Panel Controller.
I've tried
final BarDetails? barPage;
But then I get the error The property 'barBusinessAddr' can't be unconditionally accessed because the receiver can be 'null'.
And adding a ! null type can be added.
Any help appreciated.
CodePudding user response:
You are unable to access widget.barPage.barBusinessAddr
in your Stateful Widget because you are not parsing any barPage in the constructor.
If you add final BarDetails barPage;
to your PanelWidgetBusiness
class then you are not setting the value, you are just defining variable. Because it is non-null type it must be a required argument in your constructor or get a different fixed value during initialization. Setting nothing is not an option in this case.
If BarPage is optional, then you can make it nullable by adding an ?
, but you need to be careful. Depending on the logic, your code could look something like this, provided your barPage
can be null.
if (widget.barPage != null){
_pageDetails.businessOperating(widget.barPage!.barBusinessAddr);
}
CodePudding user response:
I'm posting this as the answer as I will surely come back to it again.
On the panelcontroller you are passing parameters to the PanelWidgetBusiness() class.
panelBuilder: (controller) => PanelWidgetBusiness(
controller: controller,
panelController: panelController,
barPage: null, // ←← What should I put here
),
for the barPage you pass the widget.barPage
panelBuilder: (controller) => PanelWidgetBusiness(
controller: controller,
panelController: panelController,
barPage: widget.barPage // Answer
),
Now you can access all of the elements in the barpage model.
Ans can be assessed using
_pageDetails.businessOperating(**widget.barPage.barBusinessAddr**)
widget.barPage.barBusinessAddr is the main part, the rest is a Widget wrapped around it.