Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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
Listview 颤振状态代码问题。在setstate中放什么?_Listview_Mobile_Dart_Flutter - Fatal编程技术网

Listview 颤振状态代码问题。在setstate中放什么?

Listview 颤振状态代码问题。在setstate中放什么?,listview,mobile,dart,flutter,Listview,Mobile,Dart,Flutter,我从现在开始学习颤振。我非常理解代码,但是我仍然有一些问题需要理解状态以及在创建状态中放置什么。在一个教程之后,我制作了这个应用程序,它加载带有地震信息的json,并显示在一个侧面带有滚动条的列表视图中。现在我想让它成为一个有状态的小部件,并使用onrefresh更新json中的值。这是我的代码(无状态) ` 导入“包装:颤振/材料.省道”; 导入“dart:async”; 导入“dart:convert”; 将“package:http/http.dart”导入为http; 导入“包:intl

我从现在开始学习颤振。我非常理解代码,但是我仍然有一些问题需要理解状态以及在创建状态中放置什么。在一个教程之后,我制作了这个应用程序,它加载带有地震信息的json,并显示在一个侧面带有滚动条的列表视图中。现在我想让它成为一个有状态的小部件,并使用onrefresh更新json中的值。这是我的代码(无状态) `

导入“包装:颤振/材料.省道”;
导入“dart:async”;
导入“dart:convert”;
将“package:http/http.dart”导入为http;
导入“包:intl/intl.dart”;
地图-地震;
列出_特性;//oggesto列表delle功能
void main()异步{
_地震=等待获取地震();
_特征=_地震[“特征”];
runApp(新材料)PP(
主题:新主题数据(
accentColor:Colors.red,
),
debugShowCheckedModeBanner:false,
颜色:颜色,红色,
标题:“Terremoti”,
首页:新地震(),
));
}
类震动扩展了无状态控件{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“Tutti i Terremoti ultime 24小时”),
标题:对,
背景颜色:Colors.red,
),
正文:新中心(
孩子:新的滚动条(
子:刷新指示器(
onRefresh:getQuakes,
子项:ListView.builder(
itemCount:_features.length,
填充:常数边集全部(15.0),
itemBuilder:(构建上下文,位置){
如果(位置.isOdd)
返回新的SizedBox(
身高:10.0,
孩子:新中心(
子容器:新容器(
页边距:仅限新边InsetsDirective(
开始:1.0,结束:1.0),
身高:2.5,
颜色:颜色,红色,
),
),
);
最终指数=位置~/2;
var格式=新的日期格式(“dd-MMM,yyyy,\n”+“HH:mm:ss”);
//var dateString=format.format(格式);
var date=format.format(
新DateTime.From毫秒新纪元(
_功能[索引][“属性”][“时间”],
isUtc:true);
//莱里希酒店
返回新的ListTile(
标题:新文本(
“Magnitudo:${U features[index][“properties”][“mag”]}\n$date”,
样式:新文本样式(
字体大小:21.0,
颜色:颜色。绿色,
fontWeight:fontWeight.w700),
),
字幕:新文本(
“Luogo:${{u features[index][“properties”][“place”]}”,
样式:新文本样式(
字体大小:18.0,
),
),
);
}),
),
)),
);
}
}
未来的getQuakes()异步{
字符串apiUrl=
"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson";
http.Response-Response=wait-http.get(apirl);
返回json.decode(response.body);
}

`

提取代码以重新加载列表,并将其作为
状态
类的实例方法。接下来,允许列表为空(显示进度指示器)。最后,从
initState
调用重载方法

import 'dart:async';
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:intl/intl.dart';

void main() async {
  runApp(MaterialApp(
    theme: ThemeData(
      accentColor: Colors.red,
    ),
    debugShowCheckedModeBanner: false,
    color: Colors.red,
    title: 'Terremoti',
    home: Quakes(),
  ));
}

class Quakes extends StatefulWidget {
  @override
  State createState() => QuakesState();
}

class QuakesState extends State<Quakes> {
  DateFormat format = DateFormat('dd MMM, yyyy, \nHH:mm:ss');
  List _features;

  @override
  void initState() {
    super.initState();
    reload();
  }

  Future<void> reload() async {
    final Map quakes = await getQuakes();
    setState(() {
      _features = quakes['features'];
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Tutti i Terremoti ultime 24h'),
        centerTitle: true,
        backgroundColor: Colors.red,
      ),
      body: Center(
        child: _features == null
            ? const CircularProgressIndicator()
            : Scrollbar(
                child: RefreshIndicator(
                  onRefresh: reload,
                  child: ListView.builder(
                      itemCount: _features.length,
                      padding: const EdgeInsets.all(15.0),
                      itemBuilder: (BuildContext context, position) {
                        if (position.isOdd)
                          return SizedBox(
                            height: 10.0,
                            child: Center(
                              child: Container(
                                margin: const EdgeInsetsDirectional.only(
                                  start: 1.0,
                                  end: 1.0,
                                ),
                                height: 2.5,
                                color: Colors.red,
                              ),
                            ),
                          );
                        final int index = position ~/ 2;

                        final String date = format.format(
                            DateTime.fromMillisecondsSinceEpoch(
                                _features[index]['properties']['time'],
                                isUtc: true));
                        //creando le righe della listview
                        return ListTile(
                          title: Text(
                            "Magnitudo: ${_features[index]["properties"]["mag"]} \n $date",
                            style: const TextStyle(
                                fontSize: 21.0,
                                color: Colors.green,
                                fontWeight: FontWeight.w700),
                          ),
                          subtitle: Text(
                            "Luogo: ${_features[index]["properties"]["place"]}",
                            style: const TextStyle(
                              fontSize: 18.0,
                            ),
                          ),
                        );
                      }),
                ),
              ),
      ),
    );
  }
}

Future<Map> getQuakes() async {
  final http.Response response = await http.get(
      'https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson');
  return json.decode(response.body);
}
导入'dart:async';
导入“dart:convert”;
进口“包装:颤振/材料.省道”;
将“package:http/http.dart”导入为http;
导入“包:intl/intl.dart”;
void main()异步{
runApp(材料应用程序)(
主题:主题数据(
accentColor:Colors.red,
),
debugShowCheckedModeBanner:false,
颜色:颜色,红色,
标题:“Terremoti”,
首页:地震(),
));
}
类地震扩展了StatefulWidget{
@凌驾
State createState()=>QuakesState();
}
类QuakesState扩展了状态{
DateFormat=DateFormat('dd-MMM,yyyy,\nHH:mm:ss');
列出"功能",;
@凌驾
void initState(){
super.initState();
重新加载();
}
Future reload()异步{
最终地图地震=等待获取地震();
设置状态(){
_特征=地震[‘特征’];
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:const Text('Tutti Terremoti ultime 24h'),
标题:对,
背景颜色:Colors.red,
),
正文:中(
子项:_features==null
?常数循环前进指示器()
:滚动条(
子:刷新指示器(
onRefresh:重新加载,
子项:ListView.builder(
itemCount:_features.length,
填充:常数边集全部(15.0),
itemBuilder:(构建上下文,位置){
如果(位置.isOdd)
返回大小框(
身高:10.0,
儿童:中心(
子:容器(
边距:仅限const EdgeInsetsDirective(
起点:1.0,
完:1.0,,
),
身高:2.5,
颜色:颜色,红色,
),
),
);
最终整数指数=位置~/2;
最终字符串日期=format.format(
DateTime.From毫秒新纪元(
_功能[索引]['properties']['time'],
isUtc:true);
import 'dart:async';
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:intl/intl.dart';

void main() async {
  runApp(MaterialApp(
    theme: ThemeData(
      accentColor: Colors.red,
    ),
    debugShowCheckedModeBanner: false,
    color: Colors.red,
    title: 'Terremoti',
    home: Quakes(),
  ));
}

class Quakes extends StatefulWidget {
  @override
  State createState() => QuakesState();
}

class QuakesState extends State<Quakes> {
  DateFormat format = DateFormat('dd MMM, yyyy, \nHH:mm:ss');
  List _features;

  @override
  void initState() {
    super.initState();
    reload();
  }

  Future<void> reload() async {
    final Map quakes = await getQuakes();
    setState(() {
      _features = quakes['features'];
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Tutti i Terremoti ultime 24h'),
        centerTitle: true,
        backgroundColor: Colors.red,
      ),
      body: Center(
        child: _features == null
            ? const CircularProgressIndicator()
            : Scrollbar(
                child: RefreshIndicator(
                  onRefresh: reload,
                  child: ListView.builder(
                      itemCount: _features.length,
                      padding: const EdgeInsets.all(15.0),
                      itemBuilder: (BuildContext context, position) {
                        if (position.isOdd)
                          return SizedBox(
                            height: 10.0,
                            child: Center(
                              child: Container(
                                margin: const EdgeInsetsDirectional.only(
                                  start: 1.0,
                                  end: 1.0,
                                ),
                                height: 2.5,
                                color: Colors.red,
                              ),
                            ),
                          );
                        final int index = position ~/ 2;

                        final String date = format.format(
                            DateTime.fromMillisecondsSinceEpoch(
                                _features[index]['properties']['time'],
                                isUtc: true));
                        //creando le righe della listview
                        return ListTile(
                          title: Text(
                            "Magnitudo: ${_features[index]["properties"]["mag"]} \n $date",
                            style: const TextStyle(
                                fontSize: 21.0,
                                color: Colors.green,
                                fontWeight: FontWeight.w700),
                          ),
                          subtitle: Text(
                            "Luogo: ${_features[index]["properties"]["place"]}",
                            style: const TextStyle(
                              fontSize: 18.0,
                            ),
                          ),
                        );
                      }),
                ),
              ),
      ),
    );
  }
}

Future<Map> getQuakes() async {
  final http.Response response = await http.get(
      'https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson');
  return json.decode(response.body);
}