错误“尝试用不同的实例替换对实例成员的引用”

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)


red*_*lrg 5

发生上述错误是因为您直接在类内部声明变量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)