Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Dismissibleをつかい、スライドしたときにAlertDialogを表示させたいです

解決したいこと

Dismissibleをつかい、スライドしたときにAlertDialogを表示させたいです。

リストをスライドさせると本当に消していいのか確認画面が出てきて、okを押すと削除,cacelを押すとなにもなかったことにしたい

発生している問題・エラー

A dismissed Dismissible widget is still part of the tree
type 'Future<dynamic>' is not a subtype of type 'Widget'

該当するソースコード


import 'package:flutter/material.dart';
import 'package:todolist/screens/subhome/subscreen.dart';

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  State<HomeScreen> createState() => _HomeScreen();
}

class _HomeScreen extends State<HomeScreen> {
  var list = ['Item'];

  @override
  Widget build(BuildContext context) {
    return Container(
        child: Scaffold(
            appBar: AppBar(
                title: Text(
                  'TodoList',
                )),
            body: ListView.separated(
                itemCount: list.length,

                itemBuilder: (BuildContext context, int index) {
                  return Dismissible(key: UniqueKey(),
                    child:_menuItem(list[index]),
                  onDismissed: (direction) {
                  Navigator.of(context).push(
                  MaterialPageRoute(builder: (context) {
                       return callShowDialog(index);}));
                  },
                  background: Container(
                  color: Colors.red,
                  ),);
                },
                separatorBuilder: (BuildContext context, int index) {
                  return separator();
                },
                ),
            floatingActionButton: FloatingActionButton(
                onPressed: () => Navigator.push(context,
                    MaterialPageRoute(builder: (context) => SubPage()))
                    .then((result) => {
                  setState(() {
                    list.add(result);
                    print(list);
                  })
                }))));

  }

  Widget separator() {
    return Container(
      height: 10,
      color: Colors.purple,
    );
  }

  Widget _menuItem(String title) {
    return Container(
        padding: EdgeInsets.all(7),
        decoration: BoxDecoration(
          border: Border(
            bottom: BorderSide(width: 1.0, color: Colors.grey),
          ),
        ),
        child: ListTile(
          leading: Icon(Icons.add),
          title: Text(title),
        ));
  }
  callShowDialog(int index) {
    key: UniqueKey();
    print(index);
    return  AlertDialog(
      title: Text("削除してもよいですか?"),
      actions: <Widget>[
        // ボタン領域
        TextButton(
            child: Text("Cancel"),
            onPressed: (){
    setState(() {
    list.removeAt(index);
    });},


        ),
        TextButton(
          child: Text("OK"),
          onPressed: () =>setState(() {
            list.removeAt(index);
          }))
        ]);}



  }



自分で試したこと

エラーを翻訳したりそのまま検索して3時間ほど試行錯誤しました。
調べた結果はほどんど

key: UniqueKey(),

を使えというものでしたが既に使っています。
asynk awaitを使うのかと思いましたが難しくて理解できません。
どうすれば解決するのでしょうか?
どうかよろしくお願いいたします。

0 likes

No Answers yet.

Your answer might help someone💌