我收到了“處理后使用了 ValueNotifier”的錯誤。
重現錯誤的步驟:
- 我導航到
menu.dartfromhomePage.dart。 - 然后,我從
menu.dart回到homePage.dart。 - 我再次導航到
menu.dart。錯誤發生了。
錯誤資訊
FlutterError (A `ValueNotifier<bool>` was used after being disposed.
Once you have called `dispose()` on a ValueNotifier<bool>, it can no longer be used.)
clearNotifier.dart
import 'package:flutter/material.dart';
ValueNotifier<bool> cancelListen =ValueNotifier(false);
首頁.dart
import 'package:project/pages/MenuFrame.dart';
...
IconButton(
icon: Image.asset('assets/image.png'),
iconSize: 50,
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => ChangeNotifierProvider<ValueNotifier>(
create: (_) => cancelListen,
child: MenuFrame(
userId: widget.userId
)
),
// MaterialPageRoute(
// builder: (BuildContext context) => MenuFrame(
// userId: widget.userId,
// ),
),
)
.then(
);
},
)
選單.dart
import 'package:project/class/clearNotifier.dart';
class MenuFrame extends StatefulWidget {
const MenuFrame({Key key, this.userId}) : super(key: key);
final String userId;
@override
_MenuFrame createState() => _MenuFrameState();
}
@override
void dispose() {
cancelListen?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return ValueListenableBuilder(
valueListenable: cancelListen,
builder: (BuildContext context, bool toClearListen,Widget child){
....
});
}
ValueNotifier 被處理后如何重建?
uj5u.com熱心網友回復:
當您從menu.dartback 導航到 時homePage.dart,它會呼叫dispose函式menu.dart并且您的變數cancelListen已被釋放。因此,當您再次導航到 時menu.dart,它會如您所見拋出錯誤。
建議:
不要那樣傳遞變數cancelListen。您應該創建另一個ValueNotifier變數,我暫時將其稱為 _cancelNotifier。您將當前值傳遞給homePage.dart:
MenuFrame(
userId: widget.userId,
value: cancelListen.value,
)
.....................
late ValueNotifier<bool> _cancelNotifier;
initState() {
_cancelNotifier = ValueNotifier<bool>(widget.value);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/535040.html
標籤:扑镖
