Ram*_*wda 7 dart firebase flutter
错误:
无法在初始化程序中访问实例成员“userId”。尝试用不同的表达式替换对实例成员的引用dartimplicit_this_reference_in_initializer
我面临的问题: 我想将用户 uid(即 userId.uid)初始化为 nav.dart 中的 profileId,以便我可以在个人资料页面中使用 widget.profileId 在个人资料页面中显示当前用户详细信息。但是我得到了以上错误。
请帮帮我:)
谢谢
这是 nav.dart
.
.
import 'package:justpoll/screens/home_page/home.dart';
import 'package:justpoll/screens/trending.dart';
import 'package:justpoll/screens/profile/profile_page.dart';
class Nav extends StatefulWidget {
@override
_NavState createState() => _NavState();
}
class _NavState extends State<Nav> {
UserModel userId;
int _selectedIndex = 0;
List<Widget> _widgetOptions = <Widget>[
Home(),
Trending(),
CreatePoll(),
// ChatHomeScreen(),
ProfilePage(profileId: userId.uid),
];
.
.
.
Run Code Online (Sandbox Code Playgroud)
这是 ProfilePage.dart
.
.
import 'package:justpoll/screens/profile/edit_profile.dart';
import 'package:justpoll/Constants.dart';
class ProfilePage extends StatefulWidget {
final String profileId;
ProfilePage({this.profileId});
@override
_ProfilePageState createState() => _ProfilePageState();
}
class _ProfilePageState extends State<ProfilePage> {
FirebaseAuth auth = FirebaseAuth.instance;
.
.
Run Code Online (Sandbox Code Playgroud)
Kab*_*uda 10
它只是意味着您不能将一个字段直接分配给另一个字段。
为了解决这个问题,有几种解决方案:
将变量转换为static变量
static UserModel userId; //here
static int _selectedIndex = 0;
List<Widget> _widgetOptions = <Widget>[
Home(),
Trending(),
CreatePoll(),
// ChatHomeScreen(),
ProfilePage(profileId: userId.uid),
];
Run Code Online (Sandbox Code Playgroud)
或者
initState在函数中分配它们的值 (StateFulWidget的最佳解决方案)
UserModel userId; //here
int _selectedIndex = 0;
List<Widget> _widgetOptions;
@override
void initState() {
List<Widget> _widgetOptions = <Widget>[
Home(),
Trending(),
CreatePoll(),
// ChatHomeScreen(),
ProfilePage(profileId: userId.uid),
];
super.initState();
}
Run Code Online (Sandbox Code Playgroud)
发生上述错误是因为您直接在类内部声明变量userId并且尝试将非静态变量初始化为profileId. 因为您正在使用StatefulWidget,所以尝试在 initState() 方法中初始化它。
UserModel userId;
int _selectedIndex = 0;
List<Widget> _widgetOptions;
void initState() {
super.initState();
_widgetOptions = <Widget>[
Home(),
Trending(),
CreatePoll(),
// ChatHomeScreen(),
ProfilePage(profileId: userId.uid),
];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14687 次 |
| 最近记录: |