Code Monkey home page Code Monkey logo

flutter_in_action_2nd's People

Contributors

alexcn avatar bg7zag avatar bytealan avatar casyalex avatar cddsgtc avatar deepfunc avatar doseeing avatar fzyzcjy avatar imjianjian avatar jsdayuan avatar lewiszlw avatar liaosunny123 avatar meicy avatar nzzz964 avatar ryosga avatar shiro-nagi avatar szluyu99 avatar wendux avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter_in_action_2nd's Issues

2.5.0版本很多更新后有改变 很多编译不过去

3.5 FocusScopeNode focusScopeNode;必须初始化 然后RaisdButton在2.5.0版本就被废弃了 。
然后需要一个父组件
The following assertion was thrown building TextField(focusNode: FocusNode#5550e, decoration: InputDecoration(labelText: "input2"), dirty, dependencies: [MediaQuery, UnmanagedRestorationScope], state: _TextFieldState#72f17): No Material widget found.
为控制焦点部分
更新2.5.0版本后很多错误了 希望改正

6.10.2 代码出现语法错误

typedef SliverHeaderBuilder = Widget Function(
    BuildContext context, double shrinkOffset, bool overlapsContent);

class SliverHeaderDelegate extends SliverPersistentHeaderDelegate {
  // child 为 header
  SliverHeaderDelegate({
    required this.maxHeight,
    this.minHeight = 0,
    required Widget child,
  })  : builder = ((a, b, c) => child),
        assert(minHeight <= maxHeight && minHeight >= 0);

  //最大和最小高度相同
  SliverHeaderDelegate.fixedHeight({
    required double height,
    required Widget child,
  })  : builder = ((a, b, c) => child),
        maxHeight = height,
        minHeight = height;

  //需要自定义builder时使用
  SliverHeaderDelegate.builder({
    required this.maxHeight,
    this.minHeight = 0,
    required this.builder,
  });

  final double maxHeight;
  final double minHeight;
  final SliverHeaderBuilder builder;

  @override
  Widget build(
    BuildContext context,
    double shrinkOffset,
    bool overlapsContent,
  ) {

    /// >>> update <<<
    var child = builder(context, shrinkOffset, overlapsContent);

    //测试代码:如果子组件设置了key,则打印日志
    if (child.key != null) {
      print('${child.key}: shrink: $shrinkOffset,overlaps:$overlapsContent');
    }
    
    // 让 header 尽可能充满限制的空间;宽度为 Viewport 宽度,
    // 高度随着用户滑动在[minHeight,maxHeight]之间变化。
    return SizedBox.expand(
      /// >>> update <<<
      child: child,
    );
  }

  @override
  double get maxExtent => maxHeight;

  @override
  double get minExtent => minHeight;

  @override
  bool shouldRebuild(SliverHeaderDelegate old) {
    return old.maxExtent != maxExtent || old.minExtent != minExtent;
  }
}

勘误:多了字

在 6.3 章节介绍 ListView 的 prototypeItem 时结尾多了“如果”两个字

Dart 语言简介 函数部分有误

定义函数时,可选的位置参数和命名可选参数,需要再类型前加 ?。或者给参数设置默认值
例子:
void say(name, {int age = 0, double? height = 0.0}) {
print("name is $name, age is $age and height is $height");
}
void sayHello(name, [int? age = 0, double height = 0.0]) {
print("name is $name, age is $age and height is $height");
}

第十五章 启动报错

// 代码
void main() => Global.init().then((e) => runApp(MyApp()));
Error: 
Restarted application in 354ms.
[VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: Null check operator used on a null value
#0      MethodChannel.binaryMessenger
#1      MethodChannel._invokeMethod
#2      MethodChannel.invokeMethod
#3      MethodChannel.invokeMapMethod
#4      MethodChannelSharedPreferencesStore.getAll
#5      SharedPreferences._getSharedPreferencesMap
#6      SharedPreferences.getInstance
#7      Global.init
#8      main
#9      _runMainZoned.<anonymous closure>.<anon<…>

runApp未被调用前,无法获取SharedPreferences

勘误:文字有语病

在“1.1.5 Flutter出世”处有一段文字“国内外有非常基于 Flutter 的成功案例”,这句话有语病

两个文本缺失

第三章目录
3.1:Widget简介
3.2:状态管理
缺少对应章节

1.1移动开发技术简介

生态:Flutter 已经有了丰富的生态系统,无论是开发者数量还是第三方组件都已经非常可观。Flutter -->最后多了一个Flutter
国内外有非常基于 Flutter 的成功案例--> 中间少了个字应该

为什么要将-build-方法放在-state-中-而不是放在statefulwidget中

https://book.flutterchina.club/chapter2/first_flutter_app.html#%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E5%B0%86-build-%E6%96%B9%E6%B3%95%E6%94%BE%E5%9C%A8-state-%E4%B8%AD-%E8%80%8C%E4%B8%8D%E6%98%AF%E6%94%BE%E5%9C%A8statefulwidget%E4%B8%AD

看完作者的解释还是不能明白,为什么不把state和build都放在widget中?更新状态仍然可以使用setState方法。为了维护状态专门新建一个state类有必要吗?

7.7.1 代码出现语法错误

// 弹出对话框
// >>> update <<<
Future<bool?> showDeleteConfirmDialog1(BuildContext context) {
  return showDialog<bool>(
    context: context,
    builder: (context) {
      return AlertDialog(
        title: Text("提示"),
        content: Text("您确定要删除当前文件吗?"),
        actions: <Widget>[
          TextButton(
            child: Text("取消"),
            onPressed: () => Navigator.of(context).pop(), // 关闭对话框
          ),
          TextButton(
            child: Text("删除"),
            onPressed: () {
              //关闭对话框并返回true
              Navigator.of(context).pop(true);
            },
          ),
        ],
      );
    },
  );
}

勘误:一个加粗标记的错误

偏后部分的 而术语 **DOM操作 **就是指 应改为 而术语 **DOM操作**就是指

文档对象模型(Document Object Model,简称DOM),是 W3C 组织推荐的处理可扩展标志语言的标准编程接口,一种独立于平台和语言的方式访问和修改一个文档的内容和结构。换句话说,这是表示和处理一个 HTML 或XML 文档的标准接口。简单来说,DOM 就是文档树,与用户界面控件树对应,在前端开发中通常指 HTML 对应的渲染树,但广义的 DOM 也可以指 Android 中的 XML 布局文件对应的控件树,而术语 **DOM操作 **就是指直接来操作渲染树(或控件树), 因此,可以看到其实 DOM 树和控件树是等价的概念,只不过前者常用于 Web 开发中,而后者常用于原生开发中。

加粗标记没有起作用

"1.4.6 Dart和Java及JavaScript对比"里关于CoffeeScript和Flow的描述有误

  1. CoffeeScript不应该与TypeScript和Flow一同出现, 因为CoffeeScript和类型没有任何关系, 它唯一支持类型的方式是通过注释添加Flow的Type Annotations.
  2. "Flow是否是JavaScript的超集"相关的注释在此无关紧要, 因为"超集"这个说法只是TypeScript的技术营销, 没有实际意义.

对2.2.4 StatelessWidget的代码疑惑

你好,我在学习的过程中,发现在2.2.4 StatelessWidget中,显示Echo这个widget,书中的代码是

 Widget build(BuildContext context) {
  return Echo(text: "hello world");
}

但是这样子不是就没有了"AppBar"这些元素了,是不是缺了哪些上下文?或者是这段代码应该写在哪个位置?

animatedList code bug

var item = buildItem(context, index);
data.removeAt(index);
print('删除 ${data[index]}');

Should be changed to
var item = buildItem(context, index);
print('删除 ${data[index]}');
data.removeAt(index);

勘误or疑惑

捕获

tab有height属性吗?我看了我的sdk里面的tab,跟作者比这里少了个height属性,作者是不是重写了tab添加了height属性(我也想给他重写添加个height属性来着QWQ,好控制tabbar的大小,现在是直接进源码改_kTabHeight调整大小,因为sdk是null-safety,而我用的2.7qwq)

3.2 按钮, 部分组件文字未更新

原文:Material 组件库中提供了多种按钮组件如ElevatedButton、FlatButton、OutlineButton等,它们都是直接或间接对RawMaterialButton组件的包装定制,所以他们大多数属性都和RawMaterialButton一样。

其中的FlatButton 应该改成 TextButton, 然后三个Button是继承ButtonStyleButton.

错误:1.4.1 变量声明

image

image

var t; // 由于没有对 t 进行初始化,此时 t 的类型为:dynamic,所以对后续赋值没有限制
t = "hi wendux"; // 正确(因为 t 是 dynamic 类型的)
t = 1000; // 正确(因为 t 是 dynamic 类型的)
t = true; // 正确(因为 t 是 dynamic 类型的)

场景二:

var t = "hi wendux"; // 由于初始化了 t,此时 t 的类型为 String,不可再用其他类型数据进行赋值
t = "hello wendux"; // 正确(因为 t 是 String 类型的)
t = 1000; // 错误(因为 t 是 String 类型的)
t = true; // 错误(因为 t 是 String 类型的)

版本相关信息:

Flutter 2.5.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision ffb2ecea52 (12 天前) • 2021-09-17 15:26:33 -0400
Engine • revision b3af521a05
Tools • Dart 2.14.2

5.2 错字

原文:
下层组件确定自己的大小,然后告诉商城组件,注意下层组件的大小必须符合父组件的约束。

错字:
商城组件

应为:
上层组件

第二章 2.2 Widget 简介 didChangeDependencies什么时候调用介绍不足

你好,你的文章我觉得写得很好,但是我看到了一些描述,或者文字有出入的地方,还是希望给你指出来:
比如 第二章 2.2 Widget 简介 didChangeDependencies什么时候调,这里只介绍了如下:

didChangeDependencies():当State对象的依赖发生变化时会被调用;例如:在之前build() 中包含了一个InheritedWidget,然后在之后的build() 中Inherited widget发生了变化,那么此时Inherited widget的子 widget 的didChangeDependencies()回调都会被调用

但是对象的didChangeDependencies很常见的是在于对象第一次被创建和挂载的时候(包括重创建)对应的didChangeDependencies也会调用,希望在书里面加上这个最常见的调用形式

我的一偏博客也写到了这个话题 https://www.jianshu.com/p/287e3c6210fb
我的邮箱如下 [email protected] 希望能有交流···

执行同城?

什么是“编译类语言的执行同城”

2. JavaScript 为脚本语言,执行时需要解释执行 (这种执行方式通常称为 JIT,即 Just In Time,指在执行时实时生成机器码),执行效率和编译类语言(编译类语言的执行同城称为 AOT ,即 Ahead Of Time,指在代码执行前已经预先编译为机器码了)仍有差距。

应该是“编译类语言的执行方式通常”吧

勘误:HeroAnimationRoute单独运行错误

坐标:9.4 Hero动画,HeroAnimationRoute作为一个单独页面运行的时候会报错,需要将build下return的根节点改为Scaffold才能运行通过,sdk: flutter2.5

2.2.4 StatelessWidget 代码疑惑

你好,我在学习的过程中,发现在2.2.4 StatelessWidget中,显示Echo这个widget,书中的代码是

 Widget build(BuildContext context) {
  return Echo(text: "hello world");
}

但是这样子不是就没有了"AppBar"这些元素了,是不是缺了哪些上下文?

勘误:解释执型->解释执行

解释执行是不是更好一点?

程序主要有两种运行方式:静态编译与动态解释。静态编译的程序在执行前程序会被提前编译为机器码(或中间字节码),通常将这种类型称为**AOT** (Ahead of time)即 “提前编译”。而解释执型则是在运行时将源码实时翻译为机器码来执行,通常将这种类型称为**JIT**(Just-in-time)即“即时编译”。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.