Добрый день! Изучаю Flutter, создаю приложение на основе Google Books API. Застрял на одном моменте, не могу найти решение. Почему всегда snapshot.data всегда null, хотя в консоле всегда приходит ответ с сервера. Спасибо всем большое за ответ!!!!
import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:google_books/api/books_api.dart'; import 'package:google_books/models/books_model.dart'; import 'package:google_books/screens/books_search.dart'; import 'package:google_books/screens/list_books_view.dart'; class BooksScreen extends StatefulWidget { const BooksScreen({Key? key}) : super(key: key); @override _BooksScreenState createState() => _BooksScreenState(); } class _BooksScreenState extends State<BooksScreen> { Future<BooksModel>? booksObject; String? _bookName; @override void initState() { super.initState(); _bookName ??= 'Кобзар'; booksObject = BooksApi().fetchBooks(_bookName!); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Colors.brown, title: const Text('Google Books'), centerTitle: true, leading: IconButton( icon: const Icon(Icons.search), onPressed: () async { var tappedName = await Navigator.push(context, MaterialPageRoute(builder: (context) { return const BooksSearch(); })); if (tappedName != null) { setState(() { _bookName = tappedName; booksObject = BooksApi().fetchBooks(_bookName!); }); } }, ), actions: <Widget>[ IconButton( icon: const Icon(Icons.favorite), onPressed: () {}, ), ], ), body: SafeArea( child: FutureBuilder<BooksModel>( future: booksObject, builder: (context, AsyncSnapshot<BooksModel> snapshot) { if (snapshot.hasData) { return Column( children: <Widget>[ const SizedBox( height: 50.0, ), ListBooksView(snapshot: snapshot), ], ); } else { const Center(child: CircularProgressIndicator()); } return Text('Test is: ${snapshot.data?.items?[0].volumeInfo.title}'); }, ), ), ); } } Файл API import 'dart:convert'; import 'dart:developer'; import 'package:google_books/util/constants.dart'; import 'package:http/http.dart' as http; import '../models/books_model.dart'; class BooksApi { Future<BooksModel> fetchBooks(String booknameApi) async { var params = {'q' : booknameApi}; var uri = Uri.https(Constants.BOOKS_BASE_URL_DOMAIN, Constants.BOOKS_SEARCH_PATH, params); log('request: ${uri.toString()}'); var response = await http.get(uri); log('response: ${response.body}'); if (response.statusCode == 200) { return BooksModel.fromJson(json.decode(response.body)); } else { return Future.error('Error response'); } } }
Добрый день! Изучаю Flutter, создаю приложение на основе Google Books API. Застрял на одном моменте, не могу найти решение. Почему всегда snapshot.data всегда null, хотя в консоле всегда приходит ответ с сервера. Спасибо всем большое за ответ!!!!