Flutter : RangeError (index): Invalid value: Not in inclusive range 0..27: 28

问题描述

大家好,我是颤振初学者,在练习滑动关闭选项时,我已经完成了下面提到的代码,在删除了一些产品后,我收到了以下错误,我试图解决问题但无法解决,请提供给我您的宝贵建议。

下面我附上了代码错误供您参考。

======== 小部件库捕获的异常 ================================== ====================== 以下 RangeError 被抛出: RangeError (index): Invalid value: Not in inclusive range 0..27: 28

当抛出异常时,这是堆栈: #0 List.[] (dart:core-patch/growable_array.dart:254:60) #1 MyHome.build。 (包:Flutterswipedismiss/main.dart:34:27) #2 SliverChildBuilderDelegate.build (package:Flutter/src/widgets/sliver.dart:455:22) #3 SliverMultiBoxAdaptorElement._build (package:Flutter/src/widgets/sliver.dart:1201:28) #4 SliverMultiBoxAdaptorElement.createChild。 (包:Flutter/src/widgets/sliver.dart:1214:55) ...

...

Main.dart

  import 'package:Flutter/material.dart';

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,),home: MyHome(),);
  }
}

class MyHome extends StatelessWidget {
  final List<String> items =
      List<String>.generate(30,(i) => "Product ${i + 1}");
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Delete panna sidela thallu"),body: ListView.builder(
        itemCount: items.length,itemBuilder: (context,int index) {
          return dismissible(
            key: Key(items[index]),ondismissed: (direction) {
              items.removeAt(index);
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(
                  content: Text("Item dismissed."),);
            },background: Container(
              color: Colors.red,child: ListTile(
              title: Text("${items[index]}"),);
        },);
  }
}

解决方法

我无法理解问题的原因,但我能够通过将 MyHome 小部件转换为 StatefulWidget 并在删除项目时调用 setState 来修复它。>

这是新代码:

class MyHome extends StatefulWidget {
  @override
  _MyHomeState createState() => _MyHomeState();
}

class _MyHomeState extends State<MyHome> {
  final List<String> items =
      List<String>.generate(30,(i) => "Product ${i + 1}");
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Delete panna sidela thallu"),),body: ListView.builder(
        itemCount: items.length,itemBuilder: (context,int index) {
          return Dismissible(
            key: Key(items[index]),onDismissed: (direction) {
              setState(() {
                items.removeAt(index);
              });
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(
                  content: Text("Item Dismissed."),);
            },background: Container(
              color: Colors.red,child: ListTile(
              title: Text("${items[index]}"),);
        },);
  }
}