【问题标题】:What does the error "Can't access this in a field initializer mean"?错误“无法在字段初始化程序中访问它是什么意思”?
【发布时间】:2019-11-20 22:12:08
【问题描述】:

我想在 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”。 标题:文本(this.titlea), ^^^^ 错误:无法在字段初始化程序中访问“this”。 内容:文本(this.contexta), ^^^^

【问题讨论】:

    标签: class flutter


    【解决方案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);
            },
          ),
        );
      }
    }
    

    希望对您有所帮助!

    【讨论】:

      【解决方案2】:

      请删除小部件文本上的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);
                  },
                ),
              );
            }
        }
      

      【讨论】:

        猜你喜欢
        • 2022-01-01
        • 2018-10-13
        • 2019-09-19
        • 1970-01-01
        • 1970-01-01
        • 2011-12-24
        • 2020-07-17
        • 1970-01-01
        相关资源
        最近更新 更多