在初始化程序错误中只能访问静态成员
Posted
技术标签:
【中文标题】在初始化程序错误中只能访问静态成员【英文标题】:Only static members can be accessed in initializers error 【发布时间】:2020-08-31 13:01:19 【问题描述】:您好,我正在尝试将信息从它所在的构造函数传递给小部件..
但它返回错误:
'在初始化器中只能访问静态成员'。
在这一行返回错误:
Upload(currentUsers: widget.currentUsers,),
我需要帮助
这是我的代码..
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,
)
)
],
),
);
我曾尝试阅读其他解决方案,但我似乎不理解。我只是想将构造函数中的信息传递给 Upload Widget....................... ..................................................... ....................
这是我上传代码的顶部..
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(
【问题讨论】:
你能发布你的“上传”代码吗? 好的... .......... 【参考方案1】:在initstate之前你不能访问“widget”(widget.currentUsers)。
类似的东西:
class _BottomNavbarState extends State<BottomNavbar>
int _currentIndex = 0;
List<Widget> _children;
@override
initState()
_children = [
HomeS(),
Search(),
Upload(currentUsers: widget.currentUsers,),
Notifications(),
Profile(),
]
...
或者作为getter来做
List<Widget> get _children => [
HomeS(),
Search(),
Upload(currentUsers: widget.currentUsers,),
Notifications(),
Profile(),
];
【讨论】:
嘿 axot.. 我尝试了这两种方法,但都没有成功......当我将列表置于初始化状态时,我无法在需要它的其余代码中访问 _children 我在变量声明前用“final”字弄错了。我编辑了它。你离开变量“List试试这样:
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(
);
【讨论】:
嘿MB,我真的不知道如何在我的代码中实现这一点。请你使用我的例子以上是关于在初始化程序错误中只能访问静态成员的主要内容,如果未能解决你的问题,请参考以下文章
为啥会出现此错误:无法在初始化程序中访问实例成员'*'。”?