Flutter: Tek liste değerini görüntülerken hata

Sep 09 2020

Flutter'da diskten bir dosya okuyorum ve liste öğelerini liste olarak görüntülüyorum. ListView.builder'ı kullanmak iyi çalışıyor ancak tek bir değer görüntüleyen bir metin widget'ı ile bu hatayı alıyorum. Biri yardım edebilir mi?

Aldığım hata MyHomePage oluştururken aşağıdaki RangeError atıldı (kirli, durum: _MyHomePageState # e9932): RangeError (dizin): Geçersiz değer: Geçerli değer aralığı boş: 9


 import 'package:flutter/material.dart';
 import 'dart:convert';
 import 'package:flutter/services.dart';
 import 'dart:async';
 
 void main() {
   runApp(MyApp());
 }
 
 class MyApp extends StatelessWidget {
   //This widget is the root of your application.
   @override
   Widget build(BuildContext context) {
     return MaterialApp(
       title: 'Flutter Demo',
       theme: ThemeData(
         primarySwatch: Colors.blue,
         visualDensity: VisualDensity.adaptivePlatformDensity,
       ),
       home: MyHomePage(),
     );
   }
 }
 
 ______________________________
 
         WITH List.View.builder
 
 class MyHomePage extends StatefulWidget {
   @override
   _MyHomePageState createState() => _MyHomePageState();
 }
 
 class _MyHomePageState extends State<MyHomePage> {
   List<String> _names = [];
 
   Future<List<String>> loadNames() async {
     List<String> names = [];
     await rootBundle.loadString('assets/Stulkur_A.txt').then((q) => {
           for (String i in LineSplitter().convert(q)) {names.add(i)}
         });
     return names;
   }
 
   _setup() async {
     List<String> names = await loadNames();
     setState(() {
       _names = names;
     });
   }
 
   @override
   void initState() {
     _setup();
     super.initState();
   }
 
   @override
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
         title: Text('Names'),
       ),
       body: Center(
         child: Container(
             padding: EdgeInsets.all(15),
             child: ListView.builder(
                 itemCount: _names.length,
                 itemBuilder: (context, index) {
                   return Text(_names[index]);
                 })),
       ),
     );
   }
 }
 
 _____________________
 
 WITH Text widget
 
 class MyHomePage extends StatefulWidget {
   @override
   _MyHomePageState createState() => _MyHomePageState();
 }
 
 class _MyHomePageState extends State<MyHomePage> {
   List<String> _names = [];
 
   Future<List<String>> loadNames() async {
     List<String> names = [];
     await rootBundle.loadString('assets/Stulkur_A.txt').then((q) => {
           for (String i in LineSplitter().convert(q)) {names.add(i)}
         });
     return names;
   }
 
   _setup() async {
     List<String> names = await loadNames();
     setState(() {
       _names = names;
     });
   }
 
   @override
   void initState() {
     _setup();
     super.initState();
   }
 
   @override
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
         title: Text('Names'),
       ),
       body: Center(
         child: Container(
           padding: EdgeInsets.all(15),
           child: Text(_names[9]),
         ),
       ),
     );
   }
 }

Yanıtlar

1 jitsm555 Sep 09 2020 at 17:31

Deneyin

body: Center(
        child: Container(
          padding: EdgeInsets.all(15),
          child: _names.isEmpty
              ? CircularProgressIndicator()
              : ListView.builder(
                  itemCount: _names.length,
                  itemBuilder: (context, index) {
                    return Text(_names[index]);
                  },
                ),
        ),
      ),
Mr.ZeroOne Sep 09 2020 at 17:16

_Names.length == 0 bir yükleyiciyi mi yoksa istediğiniz her şeyi mi yoksa ListView widget'ını mı gösterdiğini kontrol etmelisiniz.