Неопределенное имя и средство получения не найдены

#flutter #dart

#flutter #dart

Вопрос:

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

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

class _HomePageState extends State<HomePage> {
  List items = [];
  bool isLoading = false;
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    this.fetchItems();
  }

  fetchItems() async {
    setState(() {
      isLoading = true;
    });
    var url =
        'https://api.torn.com/torn/?selections=itemsamp;key=7PnSA9HkVB5B6eAK';
    var response = await http.get(url);
    if (response.statusCode == 200) {
      var things = json.decode(response.body)['items'];
      setState(() {
        items = things;
        isLoading = false;
      });
    } else {
      setState(() {
        items = [];
        isLoading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Hej Tomek!'),
        centerTitle: true,
      ),
      body: getBody(),
    );
  }
}

Widget getBody() {
  return ListView.builder(
      itemCount: items.length, // Here is problem
      itemBuilder: (context, index) {
        return getCard();
      });
}

Widget getCard() {
  return Card(
    child: Padding(
      padding: EdgeInsets.all(10.0),
      child: ListTile(
        leading: CircleAvatar(),
        title: Text(''),
        subtitle: Text(''),
        trailing: Text(''),
      ),
    ),
  );
}
 

элементы, похоже, не определены, и моя Android Studio сообщила мне, что «Получатель не найден: «элементы»».
Я пытался передать элементы из Json в ListView, но могу сказать, почему мои элементы не определены.
Я пытаюсь разобраться в этом в течение последних 2 часов, и я искал ответ, но ни у кого нет подобной проблемы с моей, я думаю, что это действительно простой надзор с моей стороны.

Ответ №1:

Вы определили getBody() вне области вашего HomePage класса. Либо поместите его внутрь HomePage , либо просто измените свой getBody , чтобы соответствовать этому:

 Widget getBody(List items) {
  return ListView.builder(
    itemCount: items.length, // Here is problem
    itemBuilder: (context, index) {
      return getCard();
    },
  );
}
 

build() Тогда ваш должен быть:

 @override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('Hej Tomek!'),
      centerTitle: true,
    ),
    body: getBody(items),
  );
}