Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 未来的建设者将制作条子列表_Dart_Flutter - Fatal编程技术网

Dart 未来的建设者将制作条子列表

Dart 未来的建设者将制作条子列表,dart,flutter,Dart,Flutter,我试图从GET请求生成一个动态的碎片列表。但我遇到了问题,似乎响应数据为空。这是我的密码: import 'package:flutter/material.dart'; import 'boardSummary.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; import 'dart:async'; import 'package:flutter/foundation.dart'; class H

我试图从GET请求生成一个动态的碎片列表。但我遇到了问题,似乎响应数据为空。这是我的密码:

import 'package:flutter/material.dart';
import 'boardSummary.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'dart:async';
import 'package:flutter/foundation.dart';


class HomepageBody extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {

    return HomepageBodyState();
  }
}

class HomepageBodyState extends State <HomepageBody> {


  @override
  Widget build(BuildContext context) {
    return new Expanded(
      child: new Container(
        color: new Color(0xFF736AB7),
        child: new FutureBuilder <List<Post>>(
            future: fetchPost(),
            builder: (BuildContext context, AsyncSnapshot snapshot) {
              if (snapshot.hasError) print(snapshot.error);
              else
              return jobscroll(context, snapshot);
                  //: Center(child: CircularProgressIndicator());
            }


        ),
      ),
    );
  }
}

Future<List<Post>>fetchPost() async {
final response = await http.get('https://jsonplaceholder.typicode.com/posts?userId=1');

return compute(parsePosts, response.body);

}


List<Post> parsePosts(String responseBody){
  final parsed = json.decode(responseBody).cast<Map<String, dynamic>>();

  return parsed.map<Post>((json)=>Post.fromJson(json)).toList();

}


class Post {

  final String userId;
  final String hashtag;
  final String price;
  final String description;

  Post({this.userId, this.hashtag, this.price, this.description});

  factory Post.fromJson(Map<String, dynamic> json) {
    return Post(
      userId: json['userId'],
      hashtag: json['id'],
      price: json['title'],
      description: json['body'],
    );
  }

  }


 Widget jobscroll(BuildContext context, AsyncSnapshot snapshot) {

  List data = snapshot.data;

   return CustomScrollView(
     scrollDirection: Axis.vertical,
     shrinkWrap: false,
     slivers: <Widget>[new SliverPadding(
       padding: const EdgeInsets.symmetric(vertical: 24.0),
       sliver: new SliverList(
         delegate: new SliverChildBuilderDelegate(
               (context, index) => new BoardSummary(data[index]),
            childCount: data.length,
         ),
       ),
     ),
     ],
   );
 }
编辑以下是我的松弛跟踪的前几行:

E/flutter (13964): type 'int' is not a subtype of type 'String'
E/flutter (13964): #0      new Post.fromJson (file:///home/daniel/Desktop/testapp/lib/ui/homePageBody.dart:76:19)
E/flutter (13964): #1      parsePosts.<anonymous closure> (file:///home/daniel/Desktop/testapp/lib/ui/homePageBody.dart:60:40)
E/flutter (13964): #2      MappedListIterable.elementAt (dart:_internal/iterable.dart:414:29)
E/flutter (13964): #3      ListIterable.toList (dart:_internal/iterable.dart:219:19)
E/flutter (13964): #4      parsePosts (file:///home/daniel/Desktop/testapp/lib/ui/homePageBody.dart:60:56)
E/flutter (13964): #5      _IsolateConfiguration.apply (package:flutter/src/foundation/isolates.dart:88:16)
E/flutter (13964): #6      _spawn.<anonymous closure> (package:flutter/src/foundation/isolates.dart:96:30)

FutureBuilder
即使值还不可用,也会立即生成,因为
build()
是同步的,不能延迟

FutureBuilder
示例显示了如何检查该值是否已可用(
默认值:…
而不是
快照.hasError
):

new FutureBuilder(
future:_计算,//future或null
生成器:(BuildContext上下文,异步快照){
交换机(快照.连接状态){
case ConnectionState.none:返回新文本(“按下按钮开始”);
case ConnectionState.waiting:返回新文本('waiting result…');
违约:
if(snapshot.hasError)
返回新文本('Error:${snapshot.Error}');
其他的
返回新文本('Result:${snapshot.data}');
}
},
)

我仍然会遇到同样的错误,不知道为什么。我正在从Jsonplaceholder网站获取JSON。当
ConnectionState
none
waiting
时,您不能使用
数据。啊,我知道如果我去掉它,我只会得到一个空白屏幕(带有我的背景颜色),没有出现奇怪的数据。我从slack trace中添加了更多的信息,我认为int被视为字符串是个问题,不确定。正如我所说,数据到达需要一段时间。然后将再次调用生成器,并更改
ConnectionState
。当
ConnectionState
none
waiting
时,您可以显示微调器或类似的内容。谢谢,我也会添加微调器!我还可以通过将对象属性强制转换为字符串来解决这个问题。不确定这是否是一个好的解决方案,但目前它是有效的。
E/flutter (13964): type 'int' is not a subtype of type 'String'
E/flutter (13964): #0      new Post.fromJson (file:///home/daniel/Desktop/testapp/lib/ui/homePageBody.dart:76:19)
E/flutter (13964): #1      parsePosts.<anonymous closure> (file:///home/daniel/Desktop/testapp/lib/ui/homePageBody.dart:60:40)
E/flutter (13964): #2      MappedListIterable.elementAt (dart:_internal/iterable.dart:414:29)
E/flutter (13964): #3      ListIterable.toList (dart:_internal/iterable.dart:219:19)
E/flutter (13964): #4      parsePosts (file:///home/daniel/Desktop/testapp/lib/ui/homePageBody.dart:60:56)
E/flutter (13964): #5      _IsolateConfiguration.apply (package:flutter/src/foundation/isolates.dart:88:16)
E/flutter (13964): #6      _spawn.<anonymous closure> (package:flutter/src/foundation/isolates.dart:96:30)
  return Post(
      userId: json['userId'].toString(),
      hashtag: json['id'].toString(),
      price: json['title'].toString(),
      description: json['body'].toString(),
    );
new FutureBuilder<String>(
  future: _calculation, // a Future<String> or null
  builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
    switch (snapshot.connectionState) {
      case ConnectionState.none: return new Text('Press button to start');
      case ConnectionState.waiting: return new Text('Awaiting result...');
      default:
        if (snapshot.hasError)
          return new Text('Error: ${snapshot.error}');
        else
          return new Text('Result: ${snapshot.data}');
    }
  },
)