Ошибка Flutter Допустимый диапазон значений пуст: 0

#api #flutter #dart #exception

#API #трепетание #дротик #исключение

Вопрос:

Эта ошибка продолжает появляться после того, как я CircularProgressIndicator() закончу работать в течение некоторого времени. Я понятия не имею, почему возникает эта ошибка и как я могу ее исправить. Я прочитал ответы на аналогичный вопрос, заданный ранее, и попробовал их, но ничего не изменилось. Я не уверен, что это вызвано моим ListView.builder() или чем-то другим.

Вот код —

main.dart

 import 'package:flutter/material.dart';
import 'package:soccer_app/api_manager.dart';
import 'package:soccer_app/pagerbody.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: SoccerApp(),
    );
  }
}

class SoccerApp extends StatefulWidget {
  @override
  _SoccerAppState createState() => _SoccerAppState();
}

class _SoccerAppState extends State<SoccerApp> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Color(0xFFFAFAFA),
      appBar: AppBar(
        backgroundColor: Color(0xFFFAFAFA),
        elevation: 0.5,
        title: Text('SoccerBoard', style: TextStyle(color: Colors.black),),
        centerTitle: true,
      ),
      body: FutureBuilder(
        future: SoccerApi().getAllMatches(),
        builder: (context, snapshot) {
          if(snapshot.hasData) {
            return PageBody(snapshot.data);
          }
          else {
            return Center(
              child: CircularProgressIndicator(),
            );
          }
        },
        
      ),
    );
  }
}
 

Pagebody.dart

 import 'package:flutter/material.dart';
import 'package:soccer_app/goal_stat.dart';
import 'package:soccer_app/matchtile.dart';
import 'package:soccer_app/soccermodel.dart';
import 'package:soccer_app/teamstats.dart';

Widget PageBody(List<SoccerMatch> allmatches){
  return Column(
    children: [
      Expanded(
        flex: 2,
        child: Container(
          child: Padding(
            padding: EdgeInsets.symmetric(horizontal: 18.0, vertical: 24.0),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                teamStat("Local Team", allmatches[0].home.logoUrl, allmatches[0].home.name),
                goalStat(allmatches[0].fixture.status.elapsedTime, allmatches[0].goal.home, allmatches[0].goal.away),
                teamStat("Visitor Team", allmatches[0].away.logoUrl, allmatches[0].away.name),
              ],
            ),
          ),
        ),
      ),
      Expanded(
        flex: 5,
        child: Container(
          width: double.infinity,
          decoration: BoxDecoration(
            color: Color(0xff4373d9),
            borderRadius: BorderRadius.only(
              topLeft: Radius.circular(40.0),
              topRight: Radius.circular(40.0),
            ),
          ),
          child: Padding(
            padding: EdgeInsets.all(16.0),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                Text(
                  "MATCHES",
                  style: TextStyle(
                    color: Colors.white,
                    fontSize: 24.0,
                  ),
                ),
                Expanded(
                  child: ListView.builder(
                    itemCount: allmatches.length,
                    itemBuilder: (context, index){
                      return MatchTile(allmatches[index]);
                    },
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    ],
  );
} 
 

И это ошибка —

 The following RangeError was thrown building FutureBuilder<List<SoccerMatch>>(dirty, state: _FutureBuilderState<List<SoccerMatch>>#2a0fc):
RangeError (index): Invalid value: Valid value range is empty: 0

The relevant error-causing widget was: 
  FutureBuilder<List<SoccerMatch>> file:///C:/Users/Hp/AndroidStudioProjects/soccer_app/lib/main.dart:36:13
When the exception was thrown, this was the stack: 
#0      List.[] (dart:core-patch/growable_array.dart:177:60)
#1      PageBody (package:soccer_app/pagerbody.dart:19:50)
#2      _SoccerAppState.build.<anonymous closure> (package:soccer_app/main.dart:40:20)
#3      _FutureBuilderState.build (package:flutter/src/widgets/async.dart:751:55)
#4      StatefulElement.build (package:flutter/src/widgets/framework.dart:4744:28)
...
════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (10805): Api service: {get: fixtures, parameters: [], errors: {required: At least one parameter is required.}, results: 0, paging: {current: 1, total: 1}, response: []}
 

Комментарии:

1. похоже, что дочерние элементы в вашей строке вызывают ошибку. Один из массивов кажется пустым

Ответ №1:

список, поступающий из вашего API, пуст, поэтому List<SoccerMatch> allmatches он пуст, и вы пытаетесь вызвать allmatches[0] (пытаясь получить доступ к первому элементу пустого списка), так что вот ваша ошибка