错误“无法在字段初始化程序中访问它”是什么意思?

时间:2019-07-11 08:39:03

标签: class flutter

我想创建一个用于显示警报框的类,该警报框可以将标题和内容作为输入以显示错误框。 但是调试控制台说,当我使用它访问AlertDialog()中相同类的变量时,“无法在字段初始化程序中访问它”。

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(home: Alert("Say Hy","Hy"),));

class Alert extends StatelessWidget{

  final String titlea;
  final String contexta;

  Alert(this.titlea,this.contexta);

  AlertDialog dialog = AlertDialog(
    title: Text(this.titlea),
    content: Text(this.contexta),
  );



    Widget build(BuildContext context){
        return Scaffold(
          floatingActionButton: FloatingActionButton(
            onPressed: (){
              showDialog(context: context ,builder: (BuildContext context) => dialog);
            },
          ),
        );
      }
  }

错误:无法在字段初始化程序中访问“此”。     标题:文字(this.titlea),                 ^^^^ 错误:无法在字段初始值设定项中访问“ this”。     内容:文本(this.contexta),                   ^^^^

2 个答案:

答案 0 :(得分:1)

是的,您正在尝试访问类的字段,并试图将其用作AlertDialog类的字段初始化程序。您可以尝试将其与其他字段一起初始化,或将AlertDialog设为getter

示例:用其他字段初始化

class Alert extends StatelessWidget {
  final String titlea;
  final String contexta;
  final AlertDialog dialog;

  Alert(this.titlea, this.contexta)
      : dialog = AlertDialog(
          title: Text(titlea),
          content: Text(contexta),
        );

  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          showDialog(
              context: context, builder: (BuildContext context) => dialog);
        },
      ),
    );
  }
}

或者:将其作为吸气剂

class Alert extends StatelessWidget {
  final String titlea;
  final String contexta;

  Alert(this.titlea, this.contexta);

  AlertDialog get dialog => AlertDialog(
        title: Text(titlea),
        content: Text(contexta),
      );

  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          showDialog(
              context: context, builder: (BuildContext context) => dialog);
        },
      ),
    );
  }
}

希望有帮助!

答案 1 :(得分:0)

请删除小部件文本上的this。因为this用于构造函数。

class Alert extends StatelessWidget{

  final String titlea;
  final String contexta;

  Alert(this.titlea,this.contexta);

  AlertDialog dialog = AlertDialog(
    title: Text(titlea),
    content: Text(contexta),
  );



    Widget build(BuildContext context){
        return Scaffold(
          floatingActionButton: FloatingActionButton(
            onPressed: (){
              showDialog(context: context ,builder: (BuildContext context) => dialog);
            },
          ),
        );
      }
  }