'This is the case for List in my StatefulWidget
Flutter
import 'package:country_house/pages/Country.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
class AllCountries extends StatefulWidget {
const AllCountries({Key? key}) : super(key: key);
@override
State<AllCountries> createState() => _AllCountriesState();
}
class _AllCountriesState extends State<AllCountries> {
Future<List> countries=[];
Future<List> getCountries() async {
var response = await Dio().get('https://restcountries.com/v3.1/all');
return response.data.length;
}
@override
void initState() {
countries = getCountries();
super.initState();
}
@override
Widget build(BuildContext context) {
getCountries();
return Scaffold(
appBar: AppBar(
title: Text('All Countries'),
centerTitle: true,
),
body: Container(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: FutureBuilder<List>(
future: countries,
builder: (BuildContext context, AsyncSnapshot<List> snapshot) {
if (snapshot.hasData) {
return Text('hello');
}
return null;
}),
),
),
);
}
}
I get the following error: A value of type 'List' can't be assigned to a variable of type 'Future<List>'.
- 'List' is from 'dart:core'.
- 'Future' is from 'dart:async'. Future countries=[];
How can I resolve this issue?
Solution 1:[1]
You have to declare countries
in this form: Future<List> countries = Future.value([]);
class _AllCountriesState extends State<AllCountries> {
Future<List> countries = Future.value([]);
Future<List> getCountries() async {
var response = await Dio().get('https://restcountries.com/v2/all');
return response.data;
}
@override
void initState() {
countries = getCountries();
super.initState();
}
Solution 2:[2]
You have to declare countries
as a late Future:
late Future<List> countries;
then, the initState() will work. Note that you are requesting the length of the response and not the data. In order to populate the list you should also parse the jSon data. You can read an example of networking in flutter using Dio at the following link: Networking in Flutter using Dio
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Phil Cleland |
Solution 2 |