Flutter学习日记-log5

本文最后更新于:2 年前

Flutter中文网


日志随笔

一、复习

  • Scrollbar添加通知NotificationListener监听后,应该return false;如果返回的是true,那么Scrollbar会消失

二、功能型组件

1、导航返回拦截

iOS应该不需要

2、数据共享(InheritedWidget)

InheritedWidget提供了一种数据在widget树中从上到下传递、共享的方式,比如我们在应用的根widget中通过InheritedWidget共享了一个数据,那么我们便可以在任意子widget中来获取该共享的数据

InheritedWidgetReact中的context功能类似,和逐级传递数据相比,它们能实现组件跨级传递数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import 'dart:ffi';
import 'dart:ui';

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'InheritedWidget',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: '主页'),
);
}
}

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

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

class _MyHomePageState extends State<MyHomePage> {
int number = 0;

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ShareData(
params: number.toString(),
child: TextWidget(),
),
RaisedButton(
onPressed: () {
number++;
setState(() {});
},
child: Icon(Icons.add),
),
],
),
),
);
}
}

class ShareData extends InheritedWidget {
ShareData({
Key key,
@required this.params,
Widget child,
}) : super(key: key, child: child);
final String params;

@override
bool updateShouldNotify(ShareData oldWidget) {
debugPrint('updateShouldNotify');
if (oldWidget.params != params) {
return true;
} else {
return false;
}
}

static ShareData getSharedData(BuildContext context) {
return context.dependOnInheritedWidgetOfExactType();
}
}

class TextWidget extends StatefulWidget {
_TextWidgetState createState() => _TextWidgetState();
}

class _TextWidgetState extends State<TextWidget> {
@override
Widget build(BuildContext context) {
return Text(
ShareData.getSharedData(context).params.toString(),
style: TextStyle(
fontSize: 30,
),
);
}

@override
void didChangeDependencies() {
super.didChangeDependencies();
debugPrint('didChangeDependencies');
}
}

未完待续