繁体   English   中英

如何将List _data从main()传递给有状态小部件(LIstView)?

[英]How to pass List _data from main() to Stateful widget (LIstView)?

我想从main() async访问_dataStateful Widget Main()调用REST Api Call是一种好习惯吗?

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

Future main() async {

  List _data = await makeRequest();
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}
Future<List> makeRequest() async {
  String url = "https://jsonplaceholder.typicode.com/posts";
  http.Response response = await http.get(url);
  print(json.decode(response.body));
  return json.decode(response.body);
}
class HomePage extends StatefulWidget {


  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("JSON List"),
      ),

      body: ListView.builder(
          itemBuilder: (BuildContext context, int index) {
             ListTile(
            );
      }
      ),
    );
  }


}

这是它应该如何工作,我修复了你的代码:

  class HomePage extends StatefulWidget {
    @override
    _HomePageState createState() => _HomePageState();
  }

  class _HomePageState extends State<HomePage> {
    List _data = new List();

    void makeRequest() async {
      String url = "https://jsonplaceholder.typicode.com/posts";
      http.Response response = await http.get(url);
      print(json.decode(response.body));
      setState(() {
        _data = json.decode(response.body) as List;
      });
    }

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

    @override
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(
          title: Text("JSON List"),
        ),
        body: _data.isEmpty
            ? Center(child: CircularProgressIndicator())
            : ListView.builder(
                itemCount: _data.length,
                itemBuilder: (BuildContext context, int index) {
                  return ListTile(
                    title: Text(_data[index]['title']),
                  );
                }),
      );
    }
  }

你的主要电话应该是

void main() => runApp(MyApp());


  class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
      return MaterialApp(
        home: HomePage(),
      );
    }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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