简体   繁体   中英

I am getting a flutter type error 'Response' is not a subtype of 'FutureOr<String>'

I am tying to parse a json object in flutter but i cant get it to show on the screen. I get an error saying type 'Response' is not a subtype of 'FutureOr'. This is the source code


    Future<String> loadList() async {
      return await Network().getData('data');
    }
    
    class _IndexState extends State<Index> {
      bool _loading = true;
    
      Future loadList() async {
        String jsonString = await loadList();
        final response = json.decode(jsonString);
        Prospects prospects = new Prospects.fromJson(response);
        print(
            '${prospects.success} - ${prospects.data[0].id} - ${prospects.data[0].firstname} - ${prospects.data[0].lastname} - ${prospects.data[0].amountSpeculated}');
        return prospects;
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text(_loading ? 'Loading ' : 'JSON ListView in Flutter'),
            ),
            body: Center(
              child: FutureBuilder<String>(
                future: loadList(),
                builder: (context, snapshot) {
                  if (snapshot.hasData) {
                    return Text(snapshot.data);
                  } else if (snapshot.hasError) {
                    return Text("${snapshot.error}");
                  }
                  return CircularProgressIndicator();
                },
              ),
            ));
      }
    }

  1. Your Future is loadList() instead of _loadList() :
body: Center(
  child: FutureBuilder<String>(
    future: loadList(),
    builder: (context, snapshot) {
      if (snapshot.hasData) {
        return Text(snapshot.data);
      } else if (snapshot.hasError) {
        return Text("${snapshot.error}");
      }
      return CircularProgressIndicator();
    },
  ),
)
  1. Your Future is defined as a Future ( Future<dynamic> ) instead of Future<String> :
Future<String> loadList() async {
  String jsonString = await _loadList();
  final response = json.decode(jsonString);
  Prospects prospects = new Prospects.fromJson(response);
  return '${prospects.success} - ${prospects.data[0].id} - ${prospects.data[0].firstname} - ${prospects.data[0].lastname} - ${prospects.data[0].amountSpeculated}';
}

Full source code

import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';

void main() {
  runApp(
    MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      home: HomePage(),
    ),
  );
}

class HomePage extends HookWidget {
  Future<String> loadList() async {
    await Future.delayed(Duration(seconds: 2));
    return ('My String');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: FutureBuilder<String>(
          future: loadList(),
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return Text(snapshot.data);
            } else if (snapshot.hasError) {
              return Text("${snapshot.error}");
            }

            // By default, show a loading spinner.
            return CircularProgressIndicator();
          },
        ),
      ),
    );
  }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM