flutter - LateInitializationError : Field 'data' has not been initialized, 有错误

标签 flutter flutter-layout flutter-dependencies flutter-animation flutter-test

此代码没有错误,但运行后出现此错误,
有人可以提供解决以下错误所需的示例代码吗?
“LateInitializationError:字段‘数据’尚未初始化,出现错误”
这是 my_home_page.dart。

import 'package:fi_digital_earn/DashBoards/PromoCode/provider/myHomePageProvider.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: [
          ChangeNotifierProvider<MyHomePageProvider>(
            create: (context) => MyHomePageProvider(),
            child: Consumer<MyHomePageProvider>(
              builder: (context, provider, child) {
                if (provider.data == null) {
                  // print("prov $provider.data");
                  provider.getData(context);
                  return Center(child: CircularProgressIndicator());
                }
                // when we have the json loaded... let's put the data into a data table widget
                return SingleChildScrollView(
                  scrollDirection: Axis.horizontal,
                  // Data table widget in not scrollable so we have to wrap it in a scroll view when we have a large data set..
                  child: SingleChildScrollView(
                    child: DataTable(
                      columns: [
                        // DataColumn(
                        // label: Text('Verified'),
                        // tooltip: 'represents if user is verified.'),
                        DataColumn(
                            label: Text('Pin ID'),
                            tooltip: 'represents first pin id of the user'),
                        DataColumn(
                            label: Text('Pin Name'),
                            tooltip: 'represents pin name of the user'),
                        DataColumn(
                            label: Text('Used/Unused'),
                            tooltip: 'represents Used/Unused of the user'),
                        DataColumn(
                            label: Text('Date'),
                            tooltip: 'represents date of the user'),
                      ],
                      rows: provider.data.results
                          .map((data) =>
                              // we return a DataRow every time
                              DataRow(
                                  // List<DataCell> cells is required in every row
                                  cells: [
                                    // DataCell((data.verified)
                                    //     ? Icon(
                                    //         Icons.verified_user,
                                    //         color: Colors.green,
                                    //       )
                                    //     : Icon(Icons.cancel, color: Colors.red)),
                                    // I want to display a green color icon when user is verified and red when unverified
                                    DataCell(Text(data.pin_id)),
                                    DataCell(Text(data.pin_name)),
                                    DataCell(
                                      RaisedButton(
                                          onPressed: () {},
                                          color: data.used_pin == "1"
                                              ? Colors.green
                                              : Colors.red,
                                          shape: new RoundedRectangleBorder(
                                            borderRadius:
                                                new BorderRadius.circular(30.0),
                                          ),
                                          // shape: Border.all(
                                          //   color: Colors.purple,
                                          //   width: 2.0,
                                          // ),
                                          // splashColor: Colors.cyan,
                                          // highlightColor: Colors.blue,
                                          child: data.used_pin == "1"
                                              ? Text("Useed")
                                              : Text("Unused")),
                                    ),

                                    DataCell(Text(data.pin_date)),
                                  ]))
                          .toList(),
                    ),
                  ),
                );
              },
            ),
          ),
        ],
      ),
    );
  }
}
这是我的 Provider 部分。
import 'dart:convert';
import 'package:fi_digital_earn/DashBoards/PromoCode/model/myData.dart';
import 'package:flutter/widgets.dart';
import 'package:http/http.dart' as http;
class MyHomePageProvider extends ChangeNotifier {
  late MyData data;

  Future getData(context) async {
   
    var url = Uri.parse(
        'https://software.oceonicitsolution.com/hrms/v3/mlm_api/v1/PromoCodeApi.php');
    var response = await http.get(url);
    print("res${response.body}");
    // now we have response as String from local json or and API request...
    var mJson = json.decode(response.body);
    // print("mjson" + mJson);
    this.data = MyData.fromJson(mJson);
    // this.data = http.post(mJson) as MyData;
    this.notifyListeners(); // for callback to view
  }
}
这是我的模型部分
class MyData {
  List<Results> results = [];

  MyData.fromJson(Map<String, dynamic> json) {
    // previous = json['previous'];
    // next = json['next'];
    if (json['results'] != null) {
      results = <Results>[];
      json['results'].forEach((v) {
        results.add(new Results.fromJson(v));
      });
    }
  }
}

class Results {
  String pin_id = "";
  String pin_name = "";
  String used_pin = "";
  String pin_date = "";

  Results.fromJson(Map<String, dynamic> json) {
    pin_id = json['pin_id'];
    pin_name = json['pin_name'];
    used_pin = json['use_unuse'];
    pin_date = json['pin_date'];
  }
}

最佳答案

你不想要一个 late 变量,你想要一个可以为空的变量。如果您需要检查某些东西是否被初始化,您应该使用一个可为空的变量,并且您的代码已经设置为检查 null
只是改变

late MyData data;
MyData? data;

关于flutter - LateInitializationError : Field 'data' has not been initialized, 有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67401385/

相关文章:

android-studio - 如何在 Flutter 项目中使用 Android Studio 3 中的 Android Profiler 和 Logcat

flutter - 如何在 Flutter 上使用 iOS 键盘上按钮更改 TextField 焦点

dart - Flutter - 为什么 slider 不会在 AlertDialog 中更新?

flutter - 在Flutter中,如何使按钮和文本框高度相同?

flutter 包在包中找不到类

android - 当我想要获取包抖动时,它显示 HTTP 错误 403 : Forbidden

user-interface - Flutter 只是用于 UI 开发吗?

image - 如何以 imageprovider 类型传递图像 Assets ?

flutter - 我们如何在 flutter 中实现这样的东西?

flutter - 在 flutter 中将 http 包用于网络 API 是一个好习惯,还是使用 Retrofit、chopper 或 dio 更好?