【问题标题】:Declaring a variable without initializing it flutter声明一个变量而不初始化它颤动
【发布时间】:2021-10-28 13:15:02
【问题描述】:

我想声明一个静态变量并在下面的函数中初始化它,但是得到错误:“不可为空的变量'screenWidth'必须被初始化。”

代码:

import 'package:flutter/material.dart';

class SizeConfig {
  static MediaQueryData _mediaQueryData;
  static double screenWidth;
  static double screenHeight;
  static double defaultSize;
  static Orientation orientation;

  void init(BuildContext context) {
    _mediaQueryData = MediaQuery.of(context);
    screenWidth = _mediaQueryData.size.width;
    screenHeight = _mediaQueryData.size.height;
    orientation = _mediaQueryData.orientation;
  }
}

【问题讨论】:

    标签: flutter variables static declaration non-nullable


    【解决方案1】:

    您可以使用late 关键字,因为您处于空安全状态,并且您想在后面初始化字段。

    通过声明一个不可为空的后期变量,我们保证它在运行时不为空,Dart 帮助我们提供了一些编译时保证。

    但我建议仅谨慎使用late,并始终在声明后期变量时对其进行初始化。

    
    import 'package:flutter/material.dart';
    
    class SizeConfig {
      static late MediaQueryData _mediaQueryData;
      static late double screenWidth;
      static late double screenHeight;
      static late double defaultSize;
      static late Orientation orientation;
    
      void init(BuildContext context) {
        _mediaQueryData = MediaQuery.of(context);
        screenWidth = _mediaQueryData.size.width;
        screenHeight = _mediaQueryData.size.height;
        orientation = _mediaQueryData.orientation;
      }
    }
    
    

    另外一件事是,如果你想将你的字段设为nullable,那么你可以在下面的类型之后使用? 来制作主题nullable

    
    import 'package:flutter/material.dart';
    
    class SizeConfig {
      static MediaQueryData? _mediaQueryData;
      static double? screenWidth;
      static double? screenHeight;
      static double? defaultSize;
      static Orientation? orientation;
    
      void init(BuildContext context) {
        _mediaQueryData = MediaQuery.of(context);
        screenWidth = _mediaQueryData?.size.width;
        screenHeight = _mediaQueryData?.size.height;
        orientation = _mediaQueryData?.orientation;
      }
    }
    
    

    【讨论】:

      【解决方案2】:

      在声明变量的数据类型后使用late关键字或?,以便flutter知道您稍后将在某个时间点初始化该变量,否则该变量将为空。

      例子:

      late int variable; //the variable will be initialised later

      int? variable; // the variable can either have a value or can be null.

      【讨论】:

        【解决方案3】:

        您必须在变量中添加“late”关键字

        【讨论】:

          猜你喜欢
          • 2015-04-27
          • 1970-01-01
          • 2020-05-09
          • 1970-01-01
          • 1970-01-01
          • 2015-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多