Неудачное утверждение: строка 13 поз. 16: 'map['saleVal'] != неверно

Я пытаюсь показать свои данные в простой гистограмме из данных, хранящихся в firestore.

Полная ошибка:

The following assertion was thrown building StreamBuilder<QuerySnapshot<Object?>>(dirty, state _StreamBuilderBaseState<QuerySnapshot<Object?>, AsyncSnapshot<QuerySnapshot<Object?>>>#50e12): 'package:login_signup/Model/sales.dart': Failed assertion: line 13 pos 16: 'map['saleVal'] != is not true.

 import 'package:cloud_firestore/cloud_firestore.dart';

class Sales{

      final int saleVal ; 
      final String saleYear ; 
      final String colorVal ; 

    Sales(this.saleVal,this.colorVal,this.saleYear);

  Sales.fromMap(Map<String, dynamic> map)
      : assert(map['saleVal'] != null),
        assert(map['saleYear'] != null),
        assert(map['colorVal'] != null),
        saleVal = map['saleVal'],
        colorVal = map['colorVal'],
        saleYear=map['saleYear'];

  @override
  String toString() => "Record<$saleVal:$saleYear:$colorVal>";
}

И это страница для диаграммы, где я должен показать продажи через панель диаграммы.

import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'Model/sales.dart';
import 'package:charts_flutter/flutter.dart' as charts;
import 'rounded_button.dart';

class ChartScreen extends StatefulWidget {
  @override
  _ChartScreenState createState() => _ChartScreenState();
}

class _ChartScreenState extends State<ChartScreen> {
     late List<charts.Series<Sales,String>> _seriesBarData; 
      late List<Sales>  myData ; 
      
      _generateData(myData){ 
        _seriesBarData = <charts.Series<Sales,String>>[]; 
        _seriesBarData.add(
          charts.Series(
            domainFn : (Sales sales,_) => sales.saleYear.toString() , 
            measureFn : (Sales sales,_) => sales.saleVal,
            colorFn :  (Sales sales,_) => charts.ColorUtil.fromDartColor(Color(int.parse(sales.colorVal))),
            id:"Sales",
            data: myData , 
            labelAccessorFn: (Sales row,_) => "${row.saleYear}"
            )
          );
        
        
      }
      @override
Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.white,
        body: _buildBody(context),

        
        
        );
  }
  Widget _buildBody(BuildContext context){
    return StreamBuilder<QuerySnapshot>(
       stream: FirebaseFirestore.instance.collection('sales').snapshots(),
      builder: (context,snapshot){
        children: <Widget>[
                RoundedButton(
                  colour: Colors.lightBlueAccent,
                  title: 'Dashboard',
                  onPressed: () {
                    Navigator.pushNamed(context, 'charts_screen');
                  },
                ),
              ];  
        
        if (!snapshot.hasData){
          return LinearProgressIndicator();
        }
          else{

           List<Sales> sales = snapshot.data!.docs
          .map((snapshot) => Sales.fromMap(snapshot.data() as Map<String,dynamic>))
          .toList();
          return _buildChart(context, sales);
          }
      },
      
      );
  }
  Widget  _buildChart(BuildContext context , List<Sales> saledata){
    List<Sales>  myData ; 
      myData = saledata;
      _generateData(myData){};
      return Padding(
      padding: EdgeInsets.all(8.0),
      child: Container(
        child: Center(
          child:Column(
            children: <Widget>[
              Text ('Sales by Year',
              style:TextStyle(fontSize:24.0 , fontWeight: FontWeight.bold),
              ),
              SizedBox(height : 10.0, ),
              /*Expanded(
                child: charts.BarChart(_seriesBarData,
              animate : true, 
              animationDuration: Duration(seconds:5),
              behaviors : [
                new charts.DatumLegend(
                  entryTextStyle : charts.TextStyleSpec(color: charts.MaterialPalette.purple.shadeDefault,
                  fontFamily: 'Google',
                  fontSize:18),
                )
              ],
              ),
              ),*/
            ],
          ),
          ),
      ),
    );
  }
}
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
0
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша ошибка возникает на Sales.fromMap в строке assert(map['saleVal'] != null). Итак, ваш map['saleVal'] оказался null. Возможно, вам следует отказаться от строк assert и просто использовать проверку нуля со значениями по умолчанию в случае значения null. Нравиться:

Sales.fromMap(Map<String, dynamic> map)
      : saleVal = map['saleVal'] ?? 0, // default value in case of null
        colorVal = map['colorVal'] ?? '',
        saleYear = map['saleYear'] ?? '';

Или, может быть, сделать ваши свойства обнуляемыми, например:

final int? saleVal;
final String? saleYear;
final String? colorVal;

Я попробовал первое решение, и оно работает. Второй показывает ошибки. Спасибо

Girls Video 18.03.2022 09:34

Отлично. Второй, вероятно, показывает ошибки, потому что вам нужно обнулить его в некоторых местах, где этого не должно быть null, но все в порядке.

Ante Bule 18.03.2022 09:52

Другие вопросы по теме