Получатель 'storeNumber' был вызван в null (Receiver: null)

Использование os.sysconf в Linux:

import os
mem_bytes = os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES')  # e.g. 4015976448
mem_gib = mem_bytes/(1024.**3)  # e.g. 3.74

Примечание:

  • SC_PAGE_SIZE часто 4096.
  • SC_PAGESIZE и SC_PAGE_SIZE равны.
  • Для получения дополнительной информации см. man sysconf .
  • Для MacOS, за непроверенный отчет пользователя, это может работать только с MacOS ≥ 10.13 (High Sierra) с Python ≥ 3.6.4.

Использование /proc/meminfo в Linux:

meminfo = dict((i.split()[0].rstrip(':'),int(i.split()[1])) for i in open('/proc/meminfo').readlines())
mem_kib = meminfo['MemTotal']  # e.g. 3921852

0
задан Issmeil B. 13 July 2018 в 16:20
поделиться

1 ответ

Вы можете использовать следующий подход.

Удалите следующие строки из вашего кода:

//get our entity class
StoreData storeDate;

Как изначально не будет экземпляра StoreData, доступного прямо сейчас.

Теперь объявите новые переменные например:

String storeNumber;
String repName;
String repCell;
DateTime transactionDate;

И затем присваивать им значения формы в методе onSaved. Поэтому, когда ваша форма будет отправлена, эти значения будут использоваться для создания новой StoreData, и она будет передана на вторую страницу.

Вот код для вашего файла main.dart:

    import 'package:flutter/material.dart';

import 'FeedBack.dart';
import 'StoreData.dart';

void main() {
  runApp(MaterialApp(
    title: 'Navigation Basics',
    home: FirstScreen(),
  ));
}


// get variables from entity class
String storeNumber;
String repName;
String repCell;
DateTime transactionDate = DateTime.now();

class FirstScreen extends StatefulWidget {
  @override
  _FirstScreenState createState() => _FirstScreenState();
}

class _FirstScreenState extends State<FirstScreen> {
  GlobalKey<FormState> _key = GlobalKey();
  bool _validate = false;

  _sendData() {

    _key.currentState.save();

    Navigator.push(
      context,
      MaterialPageRoute(
          builder: (context) => FeedBack(
              storeData: StoreData(
                  storeNumber, repName, repCell, transactionDate))),
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text('Test App'),
        ),
        body: new SingleChildScrollView(
          child: new Container(
            margin: new EdgeInsets.all(15.0),
            child: new Form(
              key: _key,
              autovalidate: _validate,
              child: formUI(),
            ),
          ),
        ),
      ),
    );
  }

  Widget formUI() {
    return new Column(
      children: <Widget>[
        new TextFormField(
            decoration: new InputDecoration(hintText: 'Store Number'),
            keyboardType: TextInputType.number,
            validator: validateRepCell,
            onSaved: (String val) {
              storeNumber = val;
            }),
        new TextFormField(
            decoration: new InputDecoration(hintText: 'Rep Full Name'),
            validator: validateRepName,
            onSaved: (String val) {
              repName = val;
            }),
        new TextFormField(
            decoration: new InputDecoration(hintText: 'Rep Phone Number'),
            keyboardType: TextInputType.number,
            validator: validateRepCell,
            onSaved: (String val) {
              repCell = val;
            }),
        new SizedBox(height: 15.0),
        new RaisedButton(
          onPressed: _sendData,
          child: new Text('Proceed'),
        )
      ],
    );
  }

// Validate Fields

  String validateRepCell(String value) {
    // String patttern = r'(^[a-zA-Z ]*$)';
    RegExp regExp = new RegExp(r'^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$');
    if (value.length == 0) {
      return "Store Number  is Required";
    } else if (!regExp.hasMatch(value)) {
      return "Store Number must be only have numbers";
    }
    return null;
  }

  String validateRepName(String value) {
    String patttern = r'(^[a-zA-Z ]*$)';
    RegExp regExp = new RegExp(patttern);
    if (value.length == 0) {
      return "Rep Name is Required";
    } else if (!regExp.hasMatch(value)) {
      return "Name must be a-z and A-Z";
    }
    return null;
  }


}
1
ответ дан Dhaval 17 August 2018 в 12:24
поделиться
  • 1
    Могу ли я по-прежнему обращаться к классу объектов StoreData? Или вы имеете в виду просто использовать переменные поля из основного класса – Issmeil B. 13 July 2018 в 16:46
  • 2
    Используйте переменные полей для создания новой StoreData. Затем перейдите на другую страницу. Поскольку в вашем main.dart вы создаете переменные и присваиваете им значения из нулевого объекта StoreData (что вызывает ошибку в вашем случае). Это не обязательно. Просто создайте переменные и используйте их для создания нового объекта StoreData. – Dhaval 13 July 2018 в 16:49
  • 3
    Вы подразумеваете, что я должен избавиться от класса StoreData с частной переменной и просто создать полевые переменные в основном классе и перейти оттуда? – Issmeil B. 13 July 2018 в 16:58
  • 4
    Нет. Вы должны сохранить класс StoreData. Просто удалите & quot; StoreData storeDate; & quot; из файла main.dart. Класс StoreData вам нужен, чтобы создавать новые магазины и передавать их. – Dhaval 13 July 2018 в 17:00
  • 5
    Я обновил ответ. Теперь вам будет понятнее. – Dhaval 13 July 2018 в 17:03
Другие вопросы по тегам:

Похожие вопросы: