Reputation: 291
Hello so am trying to pass information into a widget from the constructor it is in..
But it returns the error :
'Only static members can be accessed in initializers'.
The error is returned on this line:
Upload(currentUsers: widget.currentUsers,),
Please I need help
Here is my code..
import 'package:curved_navigation_bar/curved_navigation_bar.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:junk_stores/Curved4/Notifications.dart';
import 'package:junk_stores/Curved4/Payments.dart';
import 'package:junk_stores/Curved4/profilePage.dart';
import 'dart:ui' as ui;
import 'package:junk_stores/Curved4/homeScreen.dart';
import 'package:junk_stores/Curved4/uploadPage.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:junk_stores/models/user.dart';
import 'package:junk_stores/pages/home.dart';
import 'package:junk_stores/pages/search.dart';
import 'package:junk_stores/pages/upload.dart';
class BottomNavbar extends StatefulWidget {
final User currentUsers;
BottomNavbar({@required this.currentUsers}){
print(currentUsers);
}
@override
_BottomNavbarState createState() => _BottomNavbarState();
}
class _BottomNavbarState extends State<BottomNavbar> {
int _currentIndex = 0;
final List<Widget> _children = [
HomeS(),
Search(),
Upload(currentUsers: widget.currentUsers,), // the error is here
Notifications(),//trending and notifications page
Profile(),
];
void onTappedBar (int index) {
setState(() {
_currentIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: _children[_currentIndex],
bottomNavigationBar: CurvedNavigationBar(
color: Colors.white,
onTap : onTappedBar,
buttonBackgroundColor: Colors.white,
backgroundColor: Colors.purple[400],
animationCurve: Curves.ease,
animationDuration: Duration(milliseconds: 700),
index: 0,
height: MediaQuery.of(context).size.height * 0.07407407,//52 pixels
items: <Widget>[
ShaderMask(
blendMode: BlendMode.srcIn,
shaderCallback: (Rect bounds) {
return ui.Gradient.linear(
Offset(4.0, 24.0),
Offset(24.0, 4.0),
[
Colors.red[600],
Colors.purple,
],
);
},
child: Icon(
FontAwesomeIcons.home,
size: 24,
),
),
ShaderMask(
blendMode: BlendMode.srcIn,
shaderCallback: (Rect bounds) {
return ui.Gradient.linear(
Offset(4.0, 24.0),
Offset(24.0, 4.0),
[
Colors.red[600],
Colors.purple,
],
);
},
child: Icon(
FontAwesomeIcons.search,
size: 24,
),
),
ShaderMask(
blendMode: BlendMode.srcIn,
shaderCallback: (Rect bounds) {
return ui.Gradient.linear(
Offset(4.0, 24.0),
Offset(24.0, 4.0),
[
Colors.red[600],
Colors.purple,
],
);
},
child: Icon(
FontAwesomeIcons.plus,
size: 24,
),
),
ShaderMask(
blendMode: BlendMode.srcIn,
shaderCallback: (Rect bounds) {
return ui.Gradient.linear(
Offset(4.0, 24.0),
Offset(24.0, 4.0),
[
Colors.red[600],
Colors.purple,
],
);
},
child: Icon(
Icons.trending_up,
size: 29,
),
),
ShaderMask(
blendMode: BlendMode.srcIn,
shaderCallback: (Rect bounds) {
return ui.Gradient.linear(
Offset(4.0, 24.0),
Offset(24.0, 4.0),
[
Colors.red[600],
Colors.purple,
],
);
},
child: Icon(
FontAwesomeIcons.user,
size: 24,
)
)
],
),
);
}
}
I have tried to read other solutions but I seem not to be understanding. I just want to pass the information in the constructor to the Upload Widget.........................................................................................................
This is the top of my Upload code..
class Upload extends StatefulWidget {
final User currentUsers;
Upload({@required this.currentUsers}){
print(currentUsers);
}
@override
_UploadState createState() => _UploadState();
}
class _UploadState extends State<Upload> {
buildSplashSreen(){
return Scaffold(
appBar: AppBar(
Upvotes: 0
Views: 117
Reputation: 109
You cannot access to "widget"(widget.currentUsers) before initstate.
Something like that:
class _BottomNavbarState extends State<BottomNavbar> {
int _currentIndex = 0;
List<Widget> _children;
@override
initState() {
_children = [
HomeS(),
Search(),
Upload(currentUsers: widget.currentUsers,),
Notifications(),
Profile(),
]
}
...
}
or do it as getter
List<Widget> get _children => [
HomeS(),
Search(),
Upload(currentUsers: widget.currentUsers,),
Notifications(),
Profile(),
];
Upvotes: 1
Reputation: 619
Try like this:
MyWidget(currentUsers: someuser);
class MyWidget extends StatefulWidget {
final User currentUsers;
const MyWidget({Key key, this.currentUsers}) : super(key: key);
@override
_MyWidgetState createState() => _MyWidgetState(this.currentUsers);
}
class _MyWidgetState extends State<MyWidget> {
final User currentUsers;
_MyWidgetState(this.currentUsers);
@override
Widget build(BuildContext context) {
return Container(
);
}
}
Upvotes: 0