Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

修复几处失效链接 #209

Open
wants to merge 12 commits into
base: main
Choose a base branch
from
2 changes: 1 addition & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

## 赞助项目

<img width='200' src='https://github.com/flutterchina/flutter_in_action_2nd/raw/main/src/imgs/sponse.jpeg'>
<img width='200' src='https://github.com/flutterchina/flutter_in_action_2nd/raw/main/src/imgs/pay.jpeg'>

## 内容简介

Expand Down
2 changes: 1 addition & 1 deletion src/chapter11/http.md
Original file line number Diff line number Diff line change
Expand Up @@ -297,5 +297,5 @@ HttpClient httpClient = HttpClient(context: sc);

## 11.2.6 总结

本节介绍了如果使用 Dart:io 库的 HttpClient来发起Http请求,以及相关的请求配置、代理设置以及证书校验等,可以发现直接通过HttpClient发起网络请求还是比较麻烦的,下一节我们将会介绍一下dio网络库,通过它。值得注意的是,`HttpClient`提供的大所数属性和方法最终会作用在请求的header里,我们完全可以通过手动去设置header来实现,之所以提供这些方法,只是为了方便开发者而已。另外,Http协议是一个非常重要的、使用最多的网络协议,每一个开发者都应该对 http 协议非常熟悉。
本节介绍了如果使用 Dart:io 库的 HttpClient来发起Http请求,以及相关的请求配置、代理设置以及证书校验等,可以发现直接通过HttpClient发起网络请求还是比较麻烦的,下一节我们将会介绍一下dio网络库,通过它。值得注意的是,`HttpClient`提供的大多数属性和方法最终会作用在请求的header里,我们完全可以通过手动去设置header来实现,之所以提供这些方法,只是为了方便开发者而已。另外,Http协议是一个非常重要的、使用最多的网络协议,每一个开发者都应该对 http 协议非常熟悉。

6 changes: 3 additions & 3 deletions src/chapter11/websocket.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ final channel = IOWebSocketChannel.connect('wss://echo.websocket.events');

现在我们建立了连接,我们可以监听来自服务器的消息,在我们发送消息给测试服务器之后,它会返回相同的消息。

我们如何收取消息并显示它们?在这个例子中,我们将使用一个[`StreamBuilder`](https://docs.flutter.io/flutter/widgets/StreamBuilder-class.html) 来监听新消息, 并用一个Text来显示它们。
我们如何收取消息并显示它们?在这个例子中,我们将使用一个[`StreamBuilder`](https://api.flutter.dev/flutter/widgets/StreamBuilder-class.html) 来监听新消息, 并用一个Text来显示它们。

```dart
StreamBuilder(
Expand All @@ -47,7 +47,7 @@ StreamBuilder(
);
```

`WebSocketChannel`提供了一个来自服务器的消息`Stream` 。该`Stream`类是`dart:async`包中的一个基础类。它提供了一种方法来监听来自数据源的异步事件。与`Future`返回单个异步响应不同,`Stream`类可以随着时间推移传递很多事件。该[`StreamBuilder`](https://docs.flutter.io/flutter/widgets/StreamBuilder-class.html) 组件将连接到一个`Stream`, 并在每次收到消息时通知Flutter重新构建界面。
`WebSocketChannel`提供了一个来自服务器的消息`Stream` 。该`Stream`类是`dart:async`包中的一个基础类。它提供了一种方法来监听来自数据源的异步事件。与`Future`返回单个异步响应不同,`Stream`类可以随着时间推移传递很多事件。该[`StreamBuilder`](https://api.flutter.dev/flutter/widgets/StreamBuilder-class.html) 组件将连接到一个`Stream`, 并在每次收到消息时通知Flutter重新构建界面。

### 3. 将数据发送到服务器

Expand All @@ -57,7 +57,7 @@ StreamBuilder(
channel.sink.add('Hello!');
```

`WebSocketChannel`提供了一个[`StreamSink`](https://docs.flutter.io/flutter/dart-async/StreamSink-class.html),它将消息发给服务器。
`WebSocketChannel`提供了一个[`StreamSink`](https://api.flutter.dev/flutter/dart-async/StreamSink-class.html),它将消息发给服务器。

`StreamSink`类提供了给数据源同步或异步添加事件的一般方法。

Expand Down
10 changes: 5 additions & 5 deletions src/chapter13/multi_languages_support.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ MaterialApp(

## 13.1.3 获取当前区域Locale

[`Locale`](https://docs.flutter.io/flutter/dart-ui/Locale-class.html)类是用来标识用户的语言环境的,它包括语言和国家两个标志如:
[`Locale`](https://api.flutter.dev/flutter/dart-ui/Locale-class.html)类是用来标识用户的语言环境的,它包括语言和国家两个标志如:

```dart
const Locale('zh', 'CN') // 中文简体
Expand All @@ -62,7 +62,7 @@ const Locale('zh', 'CN') // 中文简体
Locale myLocale = Localizations.localeOf(context);
```

[`Localizations`](https://docs.flutter.io/flutter/widgets/Localizations-class.html) 组件一般位于widget树中其他业务组件的顶部,它的作用是定义区域Locale以及设置子树依赖的本地化资源。 如果系统的语言环境发生变化,则会使用对应语言的本地化资源。
[`Localizations`](https://api.flutter.dev/flutter/widgets/Localizations-class.html) 组件一般位于widget树中其他业务组件的顶部,它的作用是定义区域Locale以及设置子树依赖的本地化资源。 如果系统的语言环境发生变化,则会使用对应语言的本地化资源。

## 13.1.4 监听系统语言切换

Expand Down Expand Up @@ -104,11 +104,11 @@ Locale Function(List<Locale> locales, Iterable<Locale> supportedLocales)

## 13.1.5 Localization 组件

Localizations组件用于加载和查找应用当前语言下的本地化值或资源。应用程序通过[`Localizations.of(context,type)`](https://docs.flutter.io/flutter/widgets/Localizations/of.html)来引用这些对象。 如果设备的Locale区域设置发生更改,则Localizations 组件会自动加载新区域的Locale值,然后重新build使用(依赖)了它们的组件,之所以会这样,是因为`Localizations`内部使用了[InheritedWidget](https://book.flutterchina.club/chapter7/inherited_widget.html) ,我们在介绍该组件时讲过:当子组件的`build`函数引用了`InheritedWidget`时,会创建对`InheritedWidget`的隐式依赖关系。因此,当`InheritedWidget`发生更改时,即`Localizations`的Locale设置发生更改时,将重建所有依赖它的子组件。
Localizations组件用于加载和查找应用当前语言下的本地化值或资源。应用程序通过[`Localizations.of(context,type)`](https://api.flutter.dev/flutter/widgets/Localizations/of.html)来引用这些对象。 如果设备的Locale区域设置发生更改,则Localizations 组件会自动加载新区域的Locale值,然后重新build使用(依赖)了它们的组件,之所以会这样,是因为`Localizations`内部使用了[InheritedWidget](https://book.flutterchina.club/chapter7/inherited_widget.html) ,我们在介绍该组件时讲过:当子组件的`build`函数引用了`InheritedWidget`时,会创建对`InheritedWidget`的隐式依赖关系。因此,当`InheritedWidget`发生更改时,即`Localizations`的Locale设置发生更改时,将重建所有依赖它的子组件。

本地化值由`Localizations`的 [LocalizationsDelegates](https://docs.flutter.io/flutter/widgets/LocalizationsDelegate-class.html) 列表加载 。 **每个委托必须定义一个异步load() 方法**,以生成封装了一系列本地化值的对象。通常这些对象为每个本地化值定义一个方法。
本地化值由`Localizations`的 [LocalizationsDelegates](https://api.flutter.dev/flutter/widgets/LocalizationsDelegate-class.html) 列表加载 。 **每个委托必须定义一个异步load() 方法**,以生成封装了一系列本地化值的对象。通常这些对象为每个本地化值定义一个方法。

在大型应用程序中,不同模块或Package可能会与自己的本地化值捆绑在一起。 这就是为什么要用`Localizations` 管理对象表的原因。 要使用由`LocalizationsDelegate `的`load`方法之一产生的对象,可以指定一个`BuildContext`和对象的类型来找到它。例如,Material 组件库的本地化字符串由[MaterialLocalizations](https://docs.flutter.io/flutter/material/MaterialLocalizations-class.html)类定义,此类的实例由[MaterialApp](https://docs.flutter.io/flutter/material/MaterialApp-class.html)类提供的`LocalizationDelegate`创建, 它们可以如下方式获取到:
在大型应用程序中,不同模块或Package可能会与自己的本地化值捆绑在一起。 这就是为什么要用`Localizations` 管理对象表的原因。 要使用由`LocalizationsDelegate `的`load`方法之一产生的对象,可以指定一个`BuildContext`和对象的类型来找到它。例如,Material 组件库的本地化字符串由[MaterialLocalizations](https://api.flutter.dev/flutter/material/MaterialLocalizations-class.html)类定义,此类的实例由[MaterialApp](https://api.flutter.dev/flutter/material/MaterialApp-class.html)类提供的`LocalizationDelegate`创建, 它们可以如下方式获取到:

```dart
Localizations.of<MaterialLocalizations>(context, MaterialLocalizations);
Expand Down
Loading