小编Mig*_*alv的帖子

如何在没有上下文的情况下在应用程序中的任何位置显示 Dialog?

大家好,这是我一直在问自己的一个问题。我也看到了一些答案,但它没有解决我的问题,我发现的一些类似问题是:Flutter showDialog with navigator key 而不是传递上下文使用不包含 Navigator 的上下文请求的 Navigator 操作

我想要实现的是在我的应用程序中的任何地方(所以在我的应用程序的任何页面中)显示来自同一段代码的弹出对话框(所以它都是集中的)。问题是,从那段代码中,我无法访问 BuildContext,这是因为我基于不是来自用户操作(如按钮点击)的事件显示此弹出窗口,而它们可能是 Firestore 侦听器,或发生在我的代码深处的错误(因此我可以向用户显示错误消息),因为我对代码如此深入,通常我无权访问 BuildContext。

在类似的问题中,我发现了一些看起来像解决方案的东西。这些解决方案使用 GlobalKey 作为导航器,因此可以从任何地方访问它,关于如何在应用程序的任何地方访问它有一些不同的选项,在我的情况下,我选择了一个单例(我的“存储库”)来存储这个 globalKey。然后当事件被触发时,我使用 globalKey 来获取上下文并显示一个对话框,但它抛出了这个错误:

Navigator operation requested with a context that does not include a Navigator.
The context used to push or pop routes from the Navigator must be that of a widget that is a descendant of a Navigator widget.
Run Code Online (Sandbox Code Playgroud)

@Hemanth Raj 提到您的根 Widget 需要是 MaterialApp,我确实有一个 MaterialApp 作为我的根。

这是我拥有的应用程序结构的近似值:

void main() async {

  // Here I create the navigatorKey …
Run Code Online (Sandbox Code Playgroud)

android dart flutter

11
推荐指数
1
解决办法
3704
查看次数

如何正确模拟 Flutter Fire Firebase 函数?

我正在尝试模拟 Flutter Fire 中的 Firebase Functions 包,但我不断收到错误。

这是我创建模拟的尝试。但是call当我尝试覆盖它时,该函数给了我错误,因为返回类型不正确。

library firebase_cloud_functions_mock;

import 'dart:convert';

import 'package:cloud_functions/cloud_functions.dart';
import 'package:mockito/mockito.dart';

class MockFirebaseFunctions extends Mock implements FirebaseFunctions {
  final Map<String, String> _jsonStore = <String, String>{};

  String _convertMapToJson(Map<String, dynamic> parameters) {
    return json.encode(parameters);
  }

  void mockResult(
      {String functionName, String json, Map<String, dynamic> parameters}) {
    if (parameters?.isNotEmpty != null) {
      // ignore: parameter_assignments
      functionName = functionName + _convertMapToJson(parameters);
    }
    _jsonStore[functionName] = json;
  }

  String getMockResult(String functionName, Map<String, dynamic> parameters) {
    // ignore: parameter_assignments
    functionName = …
Run Code Online (Sandbox Code Playgroud)

testing mocking flutter google-cloud-functions flutter-test

6
推荐指数
1
解决办法
864
查看次数

Flutter Injectable 工厂未注册错误

我在使用 Flutter 的 Injectable 包时遇到问题:https ://pub.dev/packages/injectable

我收到一条错误消息,告诉我我没有注册工厂,但我正在尝试获取它

这是我想要获取的类,但正如你所看到的,它用@injectable注释

auth_bloc.dart

import 'package:freezed_annotation/freezed_annotation.dart';

@injectable
class AuthBloc extends Bloc<AuthEvent, AuthState> {

}
Run Code Online (Sandbox Code Playgroud)

同样在injection.config.dart中,您可以清楚地看到AuthBloc已在工厂定义

Future<GetIt> $initGetIt(
  GetIt get, {
  String environment,
  EnvironmentFilter environmentFilter,
}) async {
  final gh = GetItHelper(get, environment, environmentFilter);

  ...

  gh.factory<AuthBloc>(() => AuthBloc(get<IAuthRepository>()));

  ...

  return get;
}
Run Code Online (Sandbox Code Playgroud)

这是我的 main.dart

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  configureInjection(Environment.dev);
  runApp(MyApp());
}
Run Code Online (Sandbox Code Playgroud)

这是我想要得到它的地方

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
      providers: [
        BlocProvider<AuthBloc>(
          create: (context) …
Run Code Online (Sandbox Code Playgroud)

code-generation package flutter

3
推荐指数
1
解决办法
4231
查看次数