목록보기에서 마지막 항목을 삭제하고 싶습니다.

재미있는 줄무늬

마지막 항목을 제거하고 데이터베이스 테이블에서 삭제하고 싶습니다. 그러나 마지막 항목을 제거 할 때 오류가 발생했습니다. 메시지 아래에있는 오류 코드입니다.

'' 'RangeError (인덱스) : 잘못된 값 : 0..6 범위에 포함되지 않음 : 7' ''

다음은 Dart의 코드입니다.

import 'package:flutter/material.dart';
import 'package:technewsapp/saved_newsdata.dart';
import 'package:technewsapp/dbhealper.dart';
import 'webview_screen.dart';
import 'package:flutter_slidable/flutter_slidable.dart';

final dbHelper = DatabaseHelper.instance;

class Favorite extends StatefulWidget {
  @override
  _Favorite createState() => _Favorite();
}
class _Favorite extends State<Favorite> {

  SlidableController slidableController;
  List<SavedNews> savedNews = [];

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    _queryAll();
  }

  Animation<double> _rotationAnimation;
  Color _fabColor = Colors.blue;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Favorite"),
      ),
      body: Center(
        child: OrientationBuilder(
          builder: (context, orientation) => _listViewWidget(
              context,
              orientation == Orientation.portrait
                  ? Axis.vertical
                  : Axis.horizontal),
        ),
      ),
    );
  }

  void _queryAll() async {
    final allRows = await dbHelper.queryAllRows();
    allRows.forEach((row) => savedNews.add(SavedNews.fromMap(row)));
    print('Query done.');
    setState(() {});
  }

  Widget _listViewWidget(BuildContext context, Axis direction) {
    return ListView.builder(
      scrollDirection: direction,
      itemCount: savedNews.length,
      itemBuilder: (context, index) {
        final Axis slideDirection = direction == Axis.horizontal ? Axis.vertical : Axis.horizontal;
        return _getSlideWithLists(context, index, slideDirection);
      },
    );
  }

  Widget _getSlideWithLists(BuildContext context, int index, Axis direction){
    return Slidable.builder(
      key: Key(savedNews[index].id),
      controller: slidableController,
      direction: direction,

      dismissal: SlidableDismissal(
        child: SlidableDrawerDismissal(),
        onDismissed: (actionType) {
          setState(() {
            print("index is $index");
            print("length is ${savedNews.length}");
            savedNews.removeAt(index);
            if(index + 1 == savedNews.length){
              _delete(savedNews[savedNews.length].id);
            } else {
              _delete(savedNews[index].id);
            }
          });
        },
      ),
      child: CardListItems(savedNews: savedNews, index: index),
      secondaryActionDelegate: SlideActionBuilderDelegate(
          actionCount: 1,
          builder: (context, index, animation, renderingMode) {
            return IconSlideAction(
              caption: 'Delete',
              color: renderingMode == SlidableRenderingMode.slide
                  ? Colors.red.withOpacity(animation.value)
                  : Colors.red,
              icon: Icons.delete,
              onTap: ((){
                _delete(savedNews[index].id);
                savedNews.removeAt(index);
              }),
            );
          }
      ), actionPane: SlidableScrollActionPane(),
    );
  }
  void _delete(id) async {
    // Assuming that the number of rows is the id for the last row.
    final rowsDeleted = await dbHelper.delete(id);
  }
}

class CardListItems extends StatelessWidget {

  final int index;
  final List<SavedNews> savedNews;

  const CardListItems({
    Key key,
    @required this.savedNews,
    @required this.index,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Card(
      child: ListTile(
        title: Text(
          '${savedNews[index].title}',
          style: TextStyle(
              fontSize: 18.0,
              color: Colors.black,
              fontWeight: FontWeight.bold),
        ),
        leading: Padding(
          padding: const EdgeInsets.all(8.0),
          child: SizedBox(
            child: savedNews[index].urlToImage == null
                ? Image(
              image: AssetImage('assets/image/noImage.png'),
            )
                : Image.network('${savedNews[index].urlToImage}'),
            height: 100.0,
            width: 100.0,
          ),
        ),
        onTap: () {
          print(savedNews[index].url);
          Navigator.push(
            context,
            MaterialPageRoute(
                builder: (context) =>
                    WebViewScreen(url: savedNews[index].url)),
          );
        },
      ),

    );
  }
}

다음은 DB 컨트롤러입니다.

import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import 'package:technewsapp/saved_newsdata.dart';

class DatabaseHelper {

  static final _databaseName = "savednews.db";
  static final _databaseVersion = 1;

  static final table = 'savednews_table';

  static final columnId = 'id';
  static final columnTitle = 'title';
  static final columnUrl = 'url';
  static final columnUrlToImage = 'urlToImage';

  // make this a singleton class
  DatabaseHelper._privateConstructor();
  static final DatabaseHelper instance = DatabaseHelper._privateConstructor();

  // only have a single app-wide reference to the database
  static Database _database;
  Future<Database> get database async {
    if (_database != null) return _database;
    // lazily instantiate the db the first time it is accessed
    _database = await _initDatabase();
    return _database;
  }

  // this opens the database (and creates it if it doesn't exist)
  _initDatabase() async {
    String path = join(await getDatabasesPath(), _databaseName);
    return await openDatabase(path,
        version: _databaseVersion,
        onCreate: _onCreate);
  }

  // SQL code to create the database table
  Future _onCreate(Database db, int version) async {
    await db.execute('''
          CREATE TABLE $table (
            $columnId TEXT NOT NULL PRIMARY KEY,
            $columnTitle TEXT NOT NULL,
            $columnUrl TEXT NOT NULL,
            $columnUrlToImage TEXT NOT NULL
          )
          ''');
  }

  // Helper methods

  // Inserts a row in the database where each key in the Map is a column name
  // and the value is the column value. The return value is the id of the
  // inserted row.
  Future<int> insert(SavedNews savedNews) async {
    Database db = await instance.database;
    return await db.insert(table, {'id': savedNews.id, 'title': savedNews.title, 'url': savedNews.url, 'urlToImage': savedNews.urlToImage});
  }

  // All of the rows are returned as a list of maps, where each map is
  // a key-value list of columns.
  Future<List<Map<String, dynamic>>> queryAllRows() async {
    Database db = await instance.database;
    return await db.query(table);
  }

  Future<int> delete(String id) async {
    Database db = await instance.database;
    return await db.delete(table, where: '$columnId = ?', whereArgs: [id]);
  }


}

환경

Flutter 1.17.0 • 채널 베타 • https://github.com/flutter/flutter.git Framework • 버전 e6b34c2b5c (2 주 전) • 2020-05-02 11:39:18 -0700 엔진 • 버전 540786dd51 도구 • Dart 2.8.1

V / r

jitsm555
savedNews.length - 1 

이것은 당신을 위해 작동합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

마지막 항목 discord.py를 제거하고 싶습니다.

분류에서Dev

목록 끝에서 마지막 종료 기호를 제거하고 싶습니다.

분류에서Dev

DynamoDB에서 마지막 목록 항목을 제거 하시겠습니까?

분류에서Dev

이 버전 형식 1.1.0010.1214.10에서 마지막 점 (.)을 삭제하고 싶습니다.

분류에서Dev

ICollection에서 마지막 항목을 삭제할 수 없습니다.

분류에서Dev

스크롤시 목록보기에 500 개의 이미지를 추가하고 현재 화면에없는 항목을 제거하고 싶습니다.

분류에서Dev

Flutter의 목록보기에서 인덱싱 된 항목을 제거하고 싶습니다.

분류에서Dev

마지막 항목을 제외하고 문자열에서 항목을 바꿉니다.

분류에서Dev

길게 누르면 ListView에서 항목을 삭제하고 싶습니다.

분류에서Dev

NDB의 마지막 하위 항목 삭제는 항상 삭제됩니다.

분류에서Dev

onDelete (perform :)를 사용하지 않고 자식보기에서 SwiftUI의 목록 항목을 삭제하려면 어떻게해야합니까?

분류에서Dev

목록보기에서 목록 항목 숨기기 및 표시가 제대로 작동하지 않습니다.

분류에서Dev

다른 목록에 영향을주지 않고 마지막 색인을 삭제하는 Python

분류에서Dev

마지막 항목을 제외하고 중복 행 삭제-VBA Excel 2013

분류에서Dev

JQuery 목록보기에서 항목을 클릭하면 다운로드되지 않습니다.

분류에서Dev

INDEX를 참조하지 않고 목록에서 항목을 삭제할 수 있습니까?

분류에서Dev

항목이 목록 상자에 나열됩니다. foreach를 사용하여 SQL에서 항목을 삭제하고 싶습니다.

분류에서Dev

항목이 목록 상자에 나열됩니다. foreach를 사용하여 SQL에서 항목을 삭제하고 싶습니다.

분류에서Dev

반복하지 않고 목록보기에서 항목을 삭제하는 방법

분류에서Dev

ListView에서 마지막 항목을 제거하면 앱이 충돌합니다.

분류에서Dev

목록보기에서 선택한 두 번째 항목이 올바른 값을 표시하지 않습니다.

분류에서Dev

SwiftUI의 마지막 목록 항목에서 구분선을 제거하는 방법은 무엇입니까?

분류에서Dev

Recycler보기에서 항목을 삭제할 때 Recycler보기가 새로 고쳐지지 않습니까?

분류에서Dev

.splice ()는 배열의 마지막 항목을 계속 삭제합니다.

분류에서Dev

Python SQLite는 마지막 항목을 삭제하여 과밀을 방지합니다.

분류에서Dev

정규식과 일치하지 않는 항목에서 '\ n'을 제거하고 싶습니다.

분류에서Dev

파이썬에서 목록을 재귀 적으로 정의하면 목록의 모든 항목이 마지막 항목으로 대체됩니다.

분류에서Dev

목록에서 마지막 항목을 찾는 방법은 linq를 사용하여 동일한 항목이 있습니다.

분류에서Dev

Listview는 목록의 모든 항목에서 마지막 항목의 제목과 주소를 표시합니다.

Related 관련 기사

  1. 1

    마지막 항목 discord.py를 제거하고 싶습니다.

  2. 2

    목록 끝에서 마지막 종료 기호를 제거하고 싶습니다.

  3. 3

    DynamoDB에서 마지막 목록 항목을 제거 하시겠습니까?

  4. 4

    이 버전 형식 1.1.0010.1214.10에서 마지막 점 (.)을 삭제하고 싶습니다.

  5. 5

    ICollection에서 마지막 항목을 삭제할 수 없습니다.

  6. 6

    스크롤시 목록보기에 500 개의 이미지를 추가하고 현재 화면에없는 항목을 제거하고 싶습니다.

  7. 7

    Flutter의 목록보기에서 인덱싱 된 항목을 제거하고 싶습니다.

  8. 8

    마지막 항목을 제외하고 문자열에서 항목을 바꿉니다.

  9. 9

    길게 누르면 ListView에서 항목을 삭제하고 싶습니다.

  10. 10

    NDB의 마지막 하위 항목 삭제는 항상 삭제됩니다.

  11. 11

    onDelete (perform :)를 사용하지 않고 자식보기에서 SwiftUI의 목록 항목을 삭제하려면 어떻게해야합니까?

  12. 12

    목록보기에서 목록 항목 숨기기 및 표시가 제대로 작동하지 않습니다.

  13. 13

    다른 목록에 영향을주지 않고 마지막 색인을 삭제하는 Python

  14. 14

    마지막 항목을 제외하고 중복 행 삭제-VBA Excel 2013

  15. 15

    JQuery 목록보기에서 항목을 클릭하면 다운로드되지 않습니다.

  16. 16

    INDEX를 참조하지 않고 목록에서 항목을 삭제할 수 있습니까?

  17. 17

    항목이 목록 상자에 나열됩니다. foreach를 사용하여 SQL에서 항목을 삭제하고 싶습니다.

  18. 18

    항목이 목록 상자에 나열됩니다. foreach를 사용하여 SQL에서 항목을 삭제하고 싶습니다.

  19. 19

    반복하지 않고 목록보기에서 항목을 삭제하는 방법

  20. 20

    ListView에서 마지막 항목을 제거하면 앱이 충돌합니다.

  21. 21

    목록보기에서 선택한 두 번째 항목이 올바른 값을 표시하지 않습니다.

  22. 22

    SwiftUI의 마지막 목록 항목에서 구분선을 제거하는 방법은 무엇입니까?

  23. 23

    Recycler보기에서 항목을 삭제할 때 Recycler보기가 새로 고쳐지지 않습니까?

  24. 24

    .splice ()는 배열의 마지막 항목을 계속 삭제합니다.

  25. 25

    Python SQLite는 마지막 항목을 삭제하여 과밀을 방지합니다.

  26. 26

    정규식과 일치하지 않는 항목에서 '\ n'을 제거하고 싶습니다.

  27. 27

    파이썬에서 목록을 재귀 적으로 정의하면 목록의 모든 항목이 마지막 항목으로 대체됩니다.

  28. 28

    목록에서 마지막 항목을 찾는 방법은 linq를 사용하여 동일한 항목이 있습니다.

  29. 29

    Listview는 목록의 모든 항목에서 마지막 항목의 제목과 주소를 표시합니다.

뜨겁다태그

보관