gpt4 book ai didi

internationalization - 如何在 StatefulWidget 中显示本地字符串?

转载 作者:IT王子 更新时间:2023-10-29 07:13:48 27 4
gpt4 key购买 nike

我已经学习了如何通过 StatelessWidget 使用 i18n 进行 flutter 练习,但仍然无法通过 StatefulWidget 工作。

我可以简单地替换下面的代码

title: new Text(S.of(context).title)

使用常量字符串,例如:

title: const Text("A Test Title");

所以我认为其他一切都应该没问题。唯一的问题是 i18n 不起作用。

有人可以帮助我,“如何通过 StatefulWidget 在 flutter 上使用 i18n?”

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'generated/i18n.dart';

void main() {
runApp(new MyApp());
}

class MyApp extends StatefulWidget {
MyApp({Key key, this.title}) : super(key: key);

final String title;

@override
_MyAppState createState() => new _MyAppState();
}

class _MyAppState extends State<MyApp> {
BuildContext c;

@override
void initState() {
super.initState();
}

@override
void dispose() {
super.dispose();
}

@override
Widget build(BuildContext context) {
var tiles = new List<Widget>();

return new MaterialApp(
home: new Scaffold(
appBar: new AppBar(
title: new Text(S.of(context).title), // Here is the problem
),
body: new Stack(
children: <Widget>[
new Container(),
new ListView(
children: tiles,
)
],
),
),
localizationsDelegates: [S.delegate],
supportedLocales: S.delegate.supportedLocales,
localeResolutionCallback: S.delegate.resolution(
fallback: new Locale("en", "")
),
);
}
}

最佳答案

您正在使用的 context 没有 MaterialApp 作为父级。相反,它有一个 MaterialApp 作为 child 。

问题是,您尝试使用 S.of(context) 获取的 S 实例存储在 MaterialApp 中。因此错误。

您可以改为使用不同的 context,其中 context 在其父级中具有 MaterialApp

实现此目的的最简单方法是将应用的一部分包装到 Builder 中。

类似的东西:

return MaterialApp(
home: Builder(
builder: (context) {
const title = S.of(context).title; // works now because the context used has a MaterialApp inside its parents
return Scaffold(...);
}
)
)

关于internationalization - 如何在 StatefulWidget 中显示本地字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51134053/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com