Ошибка при использовании FutureBuilder с запросом к API - PullRequest
0 голосов
/ 25 апреля 2020

Я работал в тестовом проекте, но у меня ошибка при использовании Future непосредственно в коде. Я использую, MOBX, и я получаю один ListData в момент загрузки приложения, но мне нужен другой вызов API, для создания указанного виджета c, и я использую следующие коды:

ListView.builder(
  shrinkWrap: true,
  itemCount: _productStore.productCombinationsTypesList.combinationsTypes.length,
  itemBuilder: (BuildContext context, int index) {
  var type = _productStore.productCombinationsTypesList.combinationsTypes[index];

    return _mountCardType(
      context: context,
      idCombinationType: type.id,
      name: type.name,
      limitOptions: type.limitOptions,
      combinationTypeFormat: type.typeOfField,
      isRequired: type.isRequired,
    );
  },
),

Widget _mountCardType({
    BuildContext context,
    @required int idCombinationType,
    @required String name,
    @required int limitOptions,
    @required int combinationTypeFormat,
    @required bool isRequired,
  }) {
    if (combinationTypeFormat == 1 || combinationTypeFormat == 2) {
      return FutureBuilder(
        future: _getOptionsOfType(idCombinationType),
        builder: (context, snapshot) {
          List<Widget> children;

          if (snapshot.hasData) {
            children = <Widget>[
              Icon(
                Icons.check_circle_outline,
                color: Colors.green,
                size: 32,
              ),
              Padding(
                padding: const EdgeInsets.only(top: 16),
                child: Text('Result: ${snapshot.data}'),
              )
            ];
          } else if (snapshot.hasError) {
            children = <Widget>[
              Icon(
                Icons.error_outline,
                color: Colors.red,
                size: 32,
              ),
              Padding(
                padding: const EdgeInsets.only(top: 16),
                child: Text('Error: ${snapshot.error}'),
              )
            ];
          } else {
            children = <Widget>[
              SizedBox(
                child: CircularProgressIndicator(),
                width: 32,
                height: 32,
              ),
              const Padding(
                padding: EdgeInsets.only(top: 16),
                child: Text('Awaiting result...'),
              )
            ];
          }

          return Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: children,
            ),
          );
       );
    }
}

Future _getOptionsOfType(int id) async {
    DioClient _dioClient;

    var idOption = id.toString();

    final response = await _dioClient
        .get('http://192.168.0.102/delivery/rest/options_product/$idOption');

    return response['data']['attributes'];
}

Но, я только получить этот ответ:

Метод '_getOptionsOfType' был вызван на нуль. Получатель: null Пробный вызов: _getOptionsOfType (1)

...