【问题标题】:flutter: Another exception was thrown: RenderPointerListener object was given an infinite size during layout颤振:抛出另一个异常:RenderPointerListener 对象在布局期间被赋予了无限大小
【发布时间】:2021-05-13 21:53:35
【问题描述】:

我的代码有问题...我不知道如何解决这个问题。我想做一个 reoderableList 但每次我拖放一个任务时,ios 模拟中的空洞任务都会变成一个任务,并且颤振给了我这个错误消息。

flutter:抛出了另一个异常:RenderPointerListener 对象在布局期间被赋予了无限大小。

import 'package:flutter/material.dart';
import 'package:todoapp/models/classes/task.dart';
import 'package:todoapp/models/global.dart';
import 'package:todoapp/models/widgets/intray_todo_widget.dart';

class IntrayPage extends StatefulWidget {
  @override
  _IntrayPageState createState() => _IntrayPageState();
}

class _IntrayPageState extends State<IntrayPage> {
  List<Task> taskList = [];
  @override
  Widget build(BuildContext context) {
    taskList = getList();
    return Container(
      color: darkGreyColor,
      child: _buildReorderableListSimple(context),
      // child: ReorderableListView(
      //   padding: EdgeInsets.only(top: 300),
      //   children: todoItems,
      //   onReorder: _onReorder,
      // ),
    );
  }

  Widget _buildListTile(BuildContext context, Task item) {
    return ListTile(
      key: Key(item.taskId),
      title: IntrayTodo(
        title: item.title,
      ),
    );
  }

  Widget _buildReorderableListSimple(BuildContext context) {
    return Theme(
      data: ThemeData(canvasColor: Colors.transparent),
      child: ReorderableListView(
        // handleSide: ReorderableListSimpleSide.Right,
        // handleIcon: Icon(Icons.access_alarm),
        padding: EdgeInsets.only(top: 300.0),
        children:
            taskList.map((Task item) => _buildListTile(context, item)).toList(),
        onReorder: (oldIndex, newIndex) {
          setState(() {
            Task item = taskList[oldIndex];
            taskList.remove(item);
            taskList.insert(newIndex, item);
          });
        },
      ),
    );
  }

  void _onReorder(int oldIndex, int newIndex) {
    setState(() {
      if (newIndex > oldIndex) {
        newIndex -= 1;
      }
      final Task item = taskList.removeAt(oldIndex);
      taskList.insert(newIndex, item);
    });
  }

  List<Task> getList() {
    for (int i = 0; i < 10; i++) {
      taskList.add(Task("My first todo " + i.toString(), false, i.toString()));
    }
    return taskList;
  }
}

Here is the error log, you can see there is some other error too "multiple widgets are using the same global key but I think thats an other problem for an other thread

【问题讨论】:

    标签: flutter dart layout flutter-layout


    【解决方案1】:

    您正在构建方法中初始化taskList。每次调用setState 时都会调用它。您必须在 initState 方法而不是 build 方法中初始化 taskList 变量。它只会在有状态的小部件生命周期中被调用一次。我通过以下方式解决了这个问题。

      @override
      void initState() {
        taskList = getList();
        super.initState();
      }
    

    For your reference, I have attached the gif image

    【讨论】:

      猜你喜欢
      • 2020-05-20
      • 2019-05-13
      • 2021-09-06
      • 2020-04-15
      • 2020-08-13
      • 2021-08-06
      • 2018-03-31
      • 2019-09-08
      • 1970-01-01
      相关资源
      最近更新 更多