Я работал в тестовом проекте, но у меня ошибка при использовании 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)