将变量从另一个 class 的状态传递给另一个 class

Passing a variable to another class from the state of another class

我正在尝试将从另一个 class 收到的参数用户名传递到我的主页 class。 我想将该参数从 HomePageState 传递到另一个名为 Profile.class 的 class。

我尝试使用“widget.username”方法从 _HomePageState 访问用户名参数。但它给出了一个错误,说 “实例成员 'widget' 无法在初始化程序中访问”

下面是首页的代码class供大家参考:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:codeforces_data_flutter/screens/profile.dart';

class HomePage extends StatefulWidget {
  String username;
  HomePage({this.username});

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  static const widgetStyle =
      TextStyle(fontWeight: FontWeight.bold, fontSize: 30.0);

  int selectedIndex = 0;
  List<Widget> widgetsToDisplay = [
    Profile(
      username: widget.username,             /*Error is on this line*/
    ),
    Center(
      child: Text(
        'Index 1 : Previous Contests',
        style: widgetStyle,
      ),
    ),
    Center(
      child: Text(
        'Index 2 : Upcoming Contests',
        style: widgetStyle,
      ),
    ),
    Center(
      child: Text(
        'Index 3 : About Me',
        style: widgetStyle,
      ),
    ),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      bottomNavigationBar: BottomNavigationBar(
        items: <BottomNavigationBarItem>[
          BottomNavigationBarItem(
            icon: Icon(
              CupertinoIcons.profile_circled,
            ),
            label: 'User Profile',
            backgroundColor: Colors.teal,
          ),
          BottomNavigationBarItem(
            icon: Icon(
              CupertinoIcons.arrow_counterclockwise,
            ),
            label: 'Previous Contests',
            backgroundColor: Colors.blue,
          ),
          BottomNavigationBarItem(
            icon: Icon(
              CupertinoIcons.arrow_clockwise,
            ),
            label: 'Upcoming Contests',
            backgroundColor: Colors.green,
          ),
          BottomNavigationBarItem(
            icon: Icon(
              CupertinoIcons.suit_heart,
            ),
            label: 'About Me',
            backgroundColor: Colors.pink,
          ),
        ],
        currentIndex: selectedIndex,
        selectedItemColor: Colors.yellow,
        onTap: (index) {
          setState(() {
            selectedIndex = index;
          });
        },
      ),
      body: widgetsToDisplay[selectedIndex],
    );
  }
}

当通过为用户名 属性 传递 widget.username 调用配置文件 class 时,问题出在 widgetsToDisplay 列表中。

我已经使用注释标记了给出错误的行。

感谢任何帮助。谢谢。

你的编译器是正确的,你不能在初始化器中访问那个变量,所以不要在不必要的时候将它设为初始化器。

将您的小部件构建代码(在本例中为列表)移动到构建函数中,或移动到一个单独的函数中,然后在构建函数中调用该函数。

我刚才遇到了同样的问题。试试这个:

class HomePage extends StatefulWidget {
final username;
HomePage({this.username});

  @override
  _ HomePage State createState() => _ HomePage State(this.username);
}

class _HomePageState extends State<HomePage> {
  _HomePageState(String username) {
    this._username = username;
  }
  String _username;

现在您可以在构建方法中使用 _username。