[英]Do not use BuildContexts across async gaps - Flutter
我在await
之后使用SnackBar
。
所以,它顯示這樣的錯誤:
Do not use BuildContexts across async gaps
我使用if (!mounted)
這一行來消除錯誤。 它消除了問題,但是SnackBar
沒有顯示。 完成任務時
我的代碼在這里:
Future removeMethod() async {
String res = await DatabaseMethods().idReject(widget.uid);
if (res == "success") {
if (!mounted) return;
showSnackBar(context, "Job done!");
} else {
if (!mounted) return;
showSnackBar(context, "Error!!");
}
}
showSnackBar 是 customWidget。 它的代碼:
void showSnackBar(BuildContext context, String title) {
final snackBar = SnackBar(
content: CustomText(
text: title,
size: 16,
),
backgroundColor: darkblueColor,
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
我該怎么辦? 我想在等待之后展示小吃店。
這個基本示例基於您的代碼段。 在返回未來的結果(例如數據庫調用)之后,這里調用了一個 snackbar。 如果這有幫助?
import 'dart:math';
import 'package:flutter/material.dart';
class SnackBarAfterFutureResult extends StatelessWidget {
const SnackBarAfterFutureResult({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: OutlinedButton(
onPressed: () async {
await removeMethod()
.then((value) => showSnackBar(context, value));
},
child: const Text('Database call')),
),
);
}
}
void showSnackBar(BuildContext context, bool result) {
String text = "Job done!";
if (!result) {
text = "Error!!";
}
final snackBar = SnackBar(content: Text(text), backgroundColor: Colors.blue);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
Future<bool> removeMethod() async {
//e.g. getting result from database call
bool isSuccess = false;
await Future.delayed(const Duration(seconds: 2), () {
isSuccess = Random().nextBool();
});
return isSuccess;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.