【问题标题】:I am getting a flutter type error 'Response' is not a subtype of 'FutureOr<String>'我收到颤振类型错误“响应”不是“FutureOr<String>”的子类型
【发布时间】:2021-05-19 08:49:12
【问题描述】:

我想在颤振中解析一个 json 对象,但我无法让它显示在屏幕上。我收到一条错误消息,提示“响应”类型不是“FutureOr”的子类型。 这是源代码


    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();
                },
              ),
            ));
      }
    }

【问题讨论】:

    标签: json flutter serialization


    【解决方案1】:
    1. 你的未来是loadList() 而不是_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. 你的未来被定义为Future (Future&lt;dynamic&gt;) 而不是Future&lt;String&gt;
    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}';
    }
    

    完整源代码

    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();
              },
            ),
          ),
        );
      }
    }
    

    【讨论】:

    • 我已经尝试过这个解决方案,但我得到了这个错误 --> type 'Future' is not a subtype of type 'Future'
    • Mmmmmh... 你能用你的最新代码更新问题吗?
    猜你喜欢
    • 2022-08-23
    • 1970-01-01
    • 2021-07-10
    • 2020-08-11
    • 1970-01-01
    • 2019-08-14
    • 2021-11-20
    • 2021-05-06
    • 2021-02-25
    相关资源
    最近更新 更多