簡體   English   中英

不要跨異步間隙使用 BuildContexts - Flutter

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM