Jesus Loves You
Jesus Loves You

Reputation: 291

Only static members can be accessed in initializers error

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

Answers (2)

Axot
Axot

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

M.B
M.B

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

Related Questions