我想让我的应用程序与导航抽屉. 当打开抽屉时,我得到了以下异常,该异常是由FIFTH_LOCALATION引起的.

微件库=======================================================捕获到异常 在生成NavigationDrawer时引发以下_CastError(脏,依赖项:[_LocalizationsScope-[GlobalKey#9fbb0]]): 在空值上使用的空判断运算符

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_localizations/flutter_localizations.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MaterialApp(
    localizationsDelegates: [
      AppLocalizations.delegate,
      GlobalMaterialLocalizations.delegate,
      GlobalWidgetsLocalizations.delegate,
      GlobalCupertinoLocalizations.delegate,
    ],
    supportedLocales: [
      Locale('en'),
      Locale('ja'),
    ],
    home: MyPage(),
  ));
}

/// A simple app that loads an adaptive banner ad.
class MyPage extends StatefulWidget {
  const MyPage({super.key});

  @override
  MyPageState createState() => MyPageState();
}

class NavigationDrawer extends StatelessWidget {
  const NavigationDrawer({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) => Drawer(
    child: SingleChildScrollView(
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: [
          buildMenuItems(context),
        ],
      ),
    ),
  );

  Widget buildMenuItems(BuildContext context) => Container(
    padding: const EdgeInsets.all(24),
    child: Wrap(
      runSpacing: 16,
      children: [
        ListTile(
          leading: const Icon(Icons.person),
          title: Text(AppLocalizations.of(context).person),
          onTap: (){},
        ),
      ],
    ),
  );
}

class MyPageState extends State<MyPage> {
  final _key = GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: AppLocalizations.of(context).appname,
      theme: ThemeData.light(),
      darkTheme: ThemeData.dark(),
      themeMode: ThemeMode.system,
      home: Scaffold(
        key: _key,
        appBar: AppBar(
          title: Text(AppLocalizations.of(context).appname),
        ),
        drawer: SafeArea(
          bottom: false,
          child: const NavigationDrawer(),
        ),
        body: Stack(
        ),),
    );
  }
}

AppLocalizations.of(上下文).appname运行良好. 但是AppLocalizations.of(Context).Person不起作用. 所以我猜NavigationDrawer中的上下文没有区域设置信息.

推荐答案

之所以会发生这种情况,是因为.appname获取Main方法中定义的MaterialApp的上下文,而NavigationDrawer正试图在MyPageState中定义的MaterialApp中查找本地化字符串.

问:这是怎么回事?

A.MaterialApp有Build方法,它是基于WidgetsApp的,WidgetsApp也有Build方法.在WidgetsApp的Build方法中,使用了Localations小部件.AppLocalizations.of(CONTEXT)试图在最近的本地化小部件中查找AppLocalizations.of类对象,在本例中为默认小部件.因此,它是在抛出错误.

您可以在内部的MaterialApp中再次传递本地化委托,也可以创建扩展方法来查找根目录下的AppLocalizes.

Flutter相关问答推荐

如何使一个悬浮的appbar在flutter?

如何在WidgetRef引用外部的函数中使用Riverpod刷新数据

框中的Flutter 适配图像

Flutter 日期时间格式

Flutter:无法构建iOS应用程序-找不到PigeonParser.h文件

在Dart中使用Riverpod代码生成时出现问题(addListener)

如何在 Flutter 中以背景 colored颜色 制作圆圈的一部分

在 Dart 中按土耳其语字母顺序对字符串进行排序

断言失败:std::move(hal_2_1_verifier).Run(). 初始化,LE音频客户端至少需要Bluetooth音频HAL V2.1

Riverpod 注册多少个 providers

Flutter列顶部和底部出现不必要的边距问题

Flutter 判断 Uint8List 是否有效 Image

如果不刷新页面,我看不到从 Firestore 中提取的数据

setState 方法有时有效,有时无效

如何从底部导航栏打开 bottomModal 表?

flutter 中 // 和 /// 有什么区别

如何显示从 MariaDB 获取的数据到列表视图

如何在 cupertino switch flutter 中添加文本

如何从 Firebase `get()` 获取 `DocumentReference`

如何从 Flutter 中的列表中提取 JSON?