【发布时间】:2020-02-10 02:47:56
【问题描述】:
当我尝试在带有 showAlertDialog 的 Dismissible 小部件上使用 confirmDismiss 时,它会弹出警报,但也会引发异常并停止应用程序。如果我尝试在异常后继续,它可以正常工作。
Maybe similar to this question 我试过用 showAlertDialog 来分离函数和不同类型的调用导航,但没有一个能解决它。
Dismissible(
confirmDismiss: (direction) {
return showDialog(
context: context,
builder: (context) {
return CupertinoAlertDialog(
title: Text('Delete'),
content: Text('Delete'),
actions: <Widget>[
FlatButton(
onPressed: () {
// Navigator.pop(context, false);
Navigator.of(
context,
// rootNavigator: true,
).pop(false);
},
child: Text('No'),
),
FlatButton(
onPressed: () {
// Navigator.pop(context, true);
Navigator.of(
context,
// rootNavigator: true,
).pop(true);
},
child: Text('Yes'),
),
],
);
},
);
},
key: Key(UniqueKey().toString()),
direction: DismissDirection.endToStart,
onDismissed: (direction) {
//TODO DELETE
Scaffold.of(context).showSnackBar(
SnackBar(
backgroundColor: Theme.of(context).accentColor,
content: Text(
'test',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20.0,
color: Colors.white,
),
),
),
);
},
background: Container(
padding: const EdgeInsets.only(right: 20.0),
// alignment: AlignmentDirectional.centerEnd,
alignment: Alignment.centerRight,
color: Theme.of(context).accentColor,
child: Icon(
Icons.delete,
size: 32.0,
color: Theme.of(context).primaryColor,
),
),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
child: CartCard(),
),
),
这是个例外
[VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: 'package:flutter/src/animation/animation_controller.dart': Failed assertion: line 484 pos 7: '_ticker != null': AnimationController.reverse() called after AnimationController.dispose()
AnimationController methods should not be used after calling dispose.
#0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:40:39)
#1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:36:5)
#2 AnimationController.reverse
package:flutter/…/animation/animation_controller.dart:484
#3 _DismissibleState._handleDismissStatusChanged
package:flutter/…/widgets/dismissible.dart:449
<asynchronous suspension>
#4 AnimationLocalStatusListenersMixin.notifyStatusListeners
package:flutter/…/animation/listener_helpers.dart:193
#5 AnimationController._checkStatusChanged
package:flutter/…/animation/animation_controller.dart:753
#6 AnimationController._tick (package:flutter/src/animation/animation_contr<…>
【问题讨论】:
-
我还没有用相同的代码确认,但这与
CupertinoTabView有关,使用key: ValueKey(yourItem),可以解决这个问题。我来自here
标签: flutter flutter-layout flutter-dependencies flutter-animation