错误:只能在初始化程序中访问静态成员

时间:2020-03-09 09:35:24

标签: flutter

我正在尝试使用以下代码推送新路线-

void selectCategory(BuildContext ctx) {
    Navigator.of(ctx).push(
      MaterialPageRoute(
        builder: (context) => MyHomePage(
          title: title,
          vidUrl: vidUrl, //contains my video url
        ),
      ),
    );
  } 

然后在MyHomePage路由中,我要访问此转发的视频URL。这是我的下面的代码??

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title, this.vidUrl}) : super(key: key);

  final String title;
  final String vidUrl;

  //MyHomePage({this.title, this.vidUrl});

  @override
  _MyHomePageState createState() => _MyHomePageState(title: title, vidUrl: vidUrl);

}

class _MyHomePageState extends State<MyHomePage> {

  String title; 
  String vidUrl;

  _MyHomePageState({this.title, this.vidUrl});

  //here i'm getting error of only static members can be accessed in vidUrl variable...
  final VideoControllerWrapper videoControllerWrapper = VideoControllerWrapper(
    DataSource.network(vidUrl, 
        displayName: title),
  );

  @override
  void initState() {
    super.initState();
    SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.top]);
  }

  @override
  void dispose() {
    SystemChrome.restoreSystemUIOverlays();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: <Widget>[
        Center(
          child: NeekoPlayerWidget(
            onSkipPrevious: () {
              print("skip");
              videoControllerWrapper.prepareDataSource(
                DataSource.network(
                    vidUrl,
                    displayName: title),
              );
            },
            videoControllerWrapper: videoControllerWrapper,
            actions: <Widget>[
              IconButton(
                icon: Icon(
                  Icons.share,
                  color: Colors.white,
                ),
                onPressed: () {
                  print("share");
                },
              ),
            ],
          ),
        ),
      ],
    );
  }
}

但是,我得到只能访问静态成员的错误,如果将其更改为静态,则会发生另一个错误。视频根本没有加载。我想我以错误的方式使用了变量。请通过任何更好的方法来帮助我。 我要做的就是使用来自其他页面的转发链接在MyHomePage路由中播放视频。

如果有人可以在这方面帮助我,那对我来说意味着世界! 感谢您的时间。??

2 个答案:

答案 0 :(得分:1)

您似乎缺少访问从其State类传递给有状态Widget的构造函数的变量所需的widget.前缀。试试这个:

final VideoControllerWrapper videoControllerWrapper = VideoControllerWrapper(
  DataSource.network(
    widget.vidUrl, 
    displayName: widget.title
  ),
);

答案 1 :(得分:0)

  String title;
  String vidUrl;
  final VideoControllerWrapper videoControllerWrapper;
  _MyHomePageState({@required this.title,@required this.vidUrl}) {
    videoControllerWrapper = VideoControllerWrapper(
      DataSource.network(vidUrl, displayName: title),
    );
  }

尝试在构造函数中对其进行初始化