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