Skip to content

Commit 91bb0bc

Browse files
authored
feat: add null safety support (chulwoo-park#33)
* Add null safety support * Fix process timeline showcase * Remove misused non null codes
1 parent c7d4c43 commit 91bb0bc

19 files changed

+458
-500
lines changed

example/lib/component_page.dart

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class ComponentPage extends StatelessWidget {
4848
gradient: LinearGradient(
4949
begin: Alignment.topCenter,
5050
end: Alignment.bottomCenter,
51-
colors: [Colors.blue, Colors.lightBlueAccent[100]],
51+
colors: [Colors.blue, Colors.lightBlueAccent.shade100],
5252
),
5353
),
5454
),
@@ -348,8 +348,8 @@ class ComponentPage extends StatelessWidget {
348348

349349
class _ComponentRow extends TableRow {
350350
_ComponentRow({
351-
String name,
352-
Widget item,
351+
required String name,
352+
required Widget item,
353353
}) : super(
354354
children: [
355355
_ComponentName(name),
@@ -360,10 +360,9 @@ class _ComponentRow extends TableRow {
360360

361361
class _ComponentItem extends StatelessWidget {
362362
const _ComponentItem({
363-
Key key,
364-
@required this.child,
365-
}) : assert(child != null),
366-
super(key: key);
363+
Key? key,
364+
required this.child,
365+
}) : super(key: key);
367366

368367
final Widget child;
369368

@@ -383,8 +382,8 @@ class _ComponentItem extends StatelessWidget {
383382
class _ComponentName extends StatelessWidget {
384383
const _ComponentName(
385384
this.name, {
386-
Key key,
387-
}) : assert(name != null && name.length > 0),
385+
Key? key,
386+
}) : assert(name.length > 0),
388387
super(key: key);
389388

390389
final String name;

example/lib/main.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class MyApp extends StatelessWidget {
2323
theme: ThemeData.light(),
2424
darkTheme: ThemeData.dark(),
2525
onGenerateRoute: (settings) {
26-
String path = Uri.tryParse(settings.name)?.path;
26+
String? path = Uri.tryParse(settings.name!)?.path;
2727
Widget child;
2828
switch (path) {
2929
case '/theme':
@@ -51,8 +51,8 @@ class MyApp extends StatelessWidget {
5151

5252
class HomePage extends StatefulWidget {
5353
HomePage({
54-
Key key,
55-
@required this.child,
54+
Key? key,
55+
required this.child,
5656
}) : super(key: key);
5757

5858
final Widget child;
@@ -77,7 +77,7 @@ class _HomePageState extends State<HomePage> {
7777
return WillPopScope(
7878
onWillPop: () async {
7979
if (_navigatorKey.currentState?.canPop() ?? false) {
80-
_navigatorKey.currentState.maybePop();
80+
_navigatorKey.currentState?.maybePop();
8181
return false;
8282
} else {
8383
return true;
@@ -152,13 +152,13 @@ class ExamplePage extends StatelessWidget {
152152

153153
class _NavigationCard extends StatelessWidget {
154154
const _NavigationCard({
155-
Key key,
156-
@required this.name,
155+
Key? key,
156+
required this.name,
157157
this.navigationBuilder,
158158
}) : super(key: key);
159159

160160
final String name;
161-
final NavigateWidgetBuilder navigationBuilder;
161+
final NavigateWidgetBuilder? navigationBuilder;
162162

163163
@override
164164
Widget build(BuildContext context) {

example/lib/showcase/package_delivery_tracking.dart

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,9 @@ class PackageDeliveryTrackingPage extends StatelessWidget {
4747

4848
class _OrderTitle extends StatelessWidget {
4949
const _OrderTitle({
50-
Key key,
51-
@required this.orderInfo,
52-
}) : assert(orderInfo != null),
53-
super(key: key);
50+
Key? key,
51+
required this.orderInfo,
52+
}) : super(key: key);
5453

5554
final _OrderInfo orderInfo;
5655

@@ -78,7 +77,7 @@ class _OrderTitle extends StatelessWidget {
7877

7978
class _InnerTimeline extends StatelessWidget {
8079
const _InnerTimeline({
81-
@required this.messages,
80+
required this.messages,
8281
});
8382

8483
final List<_DeliveryMessage> messages;
@@ -128,9 +127,8 @@ class _InnerTimeline extends StatelessWidget {
128127
}
129128

130129
class _DeliveryProcesses extends StatelessWidget {
131-
const _DeliveryProcesses({Key key, @required this.processes})
132-
: assert(processes != null),
133-
super(key: key);
130+
const _DeliveryProcesses({Key? key, required this.processes})
131+
: super(key: key);
134132

135133
final List<_DeliveryProcess> processes;
136134
@override
@@ -204,31 +202,27 @@ class _DeliveryProcesses extends StatelessWidget {
204202
}
205203

206204
class _OnTimeBar extends StatelessWidget {
207-
const _OnTimeBar({Key key, @required this.driver})
208-
: assert(driver != null),
209-
super(key: key);
205+
const _OnTimeBar({Key? key, required this.driver}) : super(key: key);
210206

211207
final _DriverInfo driver;
212208

213209
@override
214210
Widget build(BuildContext context) {
215211
return Row(
216212
children: [
217-
Builder(
218-
builder: (context) => MaterialButton(
219-
onPressed: () {
220-
Scaffold.of(context).showSnackBar(
221-
SnackBar(
222-
content: Text('On-time!'),
223-
),
224-
);
225-
},
226-
elevation: 0,
227-
shape: StadiumBorder(),
228-
color: Color(0xff66c97f),
229-
textColor: Colors.white,
230-
child: Text('On-time'),
231-
),
213+
MaterialButton(
214+
onPressed: () {
215+
ScaffoldMessenger.of(context).showSnackBar(
216+
SnackBar(
217+
content: Text('On-time!'),
218+
),
219+
);
220+
},
221+
elevation: 0,
222+
shape: StadiumBorder(),
223+
color: Color(0xff66c97f),
224+
textColor: Colors.white,
225+
child: Text('On-time'),
232226
),
233227
Spacer(),
234228
Text(
@@ -283,10 +277,10 @@ _OrderInfo _data(int id) => _OrderInfo(
283277

284278
class _OrderInfo {
285279
const _OrderInfo({
286-
@required this.id,
287-
@required this.date,
288-
@required this.driverInfo,
289-
@required this.deliveryProcesses,
280+
required this.id,
281+
required this.date,
282+
required this.driverInfo,
283+
required this.deliveryProcesses,
290284
});
291285

292286
final int id;
@@ -297,8 +291,8 @@ class _OrderInfo {
297291

298292
class _DriverInfo {
299293
const _DriverInfo({
300-
@required this.name,
301-
this.thumbnailUrl,
294+
required this.name,
295+
required this.thumbnailUrl,
302296
});
303297

304298
final String name;

example/lib/showcase/process_timeline.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,13 @@ class _ProcessTimelinePageState extends State<ProcessTimelinePage> {
134134
if (index == _processIndex) {
135135
final prevColor = getColor(index - 1);
136136
final color = getColor(index);
137-
var gradientColors;
137+
List<Color> gradientColors;
138138
if (type == ConnectorType.start) {
139-
gradientColors = [Color.lerp(prevColor, color, 0.5), color];
139+
gradientColors = [Color.lerp(prevColor, color, 0.5)!, color];
140140
} else {
141141
gradientColors = [
142142
prevColor,
143-
Color.lerp(prevColor, color, 0.5)
143+
Color.lerp(prevColor, color, 0.5)!
144144
];
145145
}
146146
return DecoratedLineConnector(
@@ -179,7 +179,7 @@ class _ProcessTimelinePageState extends State<ProcessTimelinePage> {
179179
/// TODO: Bezier curve into package component
180180
class _BezierPainter extends CustomPainter {
181181
const _BezierPainter({
182-
@required this.color,
182+
required this.color,
183183
this.drawStart = true,
184184
this.drawEnd = true,
185185
});

example/lib/showcase_page.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@ class ShowcasePage extends StatelessWidget {
6868

6969
class _ShowcaseCard extends StatelessWidget {
7070
const _ShowcaseCard({
71-
Key key,
72-
@required this.navigationBuilder,
73-
@required this.image,
74-
@required this.title,
75-
@required this.designer,
76-
@required this.url,
71+
Key? key,
72+
required this.navigationBuilder,
73+
required this.image,
74+
required this.title,
75+
required this.designer,
76+
required this.url,
7777
}) : super(key: key);
7878

7979
final String image;

example/lib/theme_page.dart

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class _ThemePageState extends State<ThemePage> {
1919
'ORANGE': Colors.orange,
2020
};
2121

22-
TimelineThemeData _theme;
22+
late TimelineThemeData _theme;
2323

2424
@override
2525
void initState() {
@@ -83,7 +83,7 @@ class _ThemePageState extends State<ThemePage> {
8383
'Horizontal': Axis.horizontal,
8484
},
8585
value: _theme.direction,
86-
onChanged: (axis) {
86+
onChanged: (Axis? axis) {
8787
if (_theme.direction != axis) {
8888
setState(() {
8989
_updateTheme(_theme.copyWith(direction: axis));
@@ -95,7 +95,7 @@ class _ThemePageState extends State<ThemePage> {
9595
title: 'Color',
9696
items: _themeColors,
9797
value: _theme.color,
98-
onChanged: (color) {
98+
onChanged: (Color? color) {
9999
_updateTheme(_theme.copyWith(color: color));
100100
},
101101
),
@@ -142,7 +142,7 @@ class _ThemePageState extends State<ThemePage> {
142142
'IndicatorTheme',
143143
style: Theme.of(context).textTheme.headline6,
144144
),
145-
_ThemeDropdown(
145+
_ThemeDropdown<Color?>(
146146
title: 'Color',
147147
items: _themeColors,
148148
value: _theme.indicatorTheme.color,
@@ -158,7 +158,7 @@ class _ThemePageState extends State<ThemePage> {
158158
SizedBox(height: 10.0),
159159
_ThemeSlider(
160160
title: 'Position',
161-
value: _theme.indicatorTheme.position,
161+
value: _theme.indicatorTheme.position ?? 0,
162162
onChanged: (position) {
163163
_updateTheme(
164164
_theme.copyWith(
@@ -170,7 +170,7 @@ class _ThemePageState extends State<ThemePage> {
170170
),
171171
_ThemeSlider(
172172
title: 'Size',
173-
value: _theme.indicatorTheme.size,
173+
value: _theme.indicatorTheme.size ?? 0,
174174
max: 100.0,
175175
onChanged: (size) {
176176
_updateTheme(
@@ -194,7 +194,7 @@ class _ThemePageState extends State<ThemePage> {
194194
'ConnectorTheme',
195195
style: Theme.of(context).textTheme.headline6,
196196
),
197-
_ThemeDropdown(
197+
_ThemeDropdown<Color?>(
198198
title: 'Color',
199199
items: _themeColors,
200200
value: _theme.connectorTheme.color,
@@ -210,7 +210,7 @@ class _ThemePageState extends State<ThemePage> {
210210
SizedBox(height: 10.0),
211211
_ThemeSlider(
212212
title: 'Space',
213-
value: _theme.connectorTheme.space,
213+
value: _theme.connectorTheme.space ?? 0,
214214
max: 100,
215215
onChanged: (space) {
216216
_updateTheme(
@@ -223,7 +223,7 @@ class _ThemePageState extends State<ThemePage> {
223223
),
224224
_ThemeSlider(
225225
title: 'Indent',
226-
value: _theme.connectorTheme.indent,
226+
value: _theme.connectorTheme.indent ?? 0,
227227
max: 22,
228228
onChanged: (indent) {
229229
_updateTheme(
@@ -236,7 +236,7 @@ class _ThemePageState extends State<ThemePage> {
236236
),
237237
_ThemeSlider(
238238
title: 'Thickness',
239-
value: _theme.connectorTheme.thickness,
239+
value: _theme.connectorTheme.thickness ?? 0,
240240
max: 100,
241241
onChanged: (thickness) {
242242
_updateTheme(
@@ -287,17 +287,17 @@ class _ThemePageState extends State<ThemePage> {
287287

288288
class _ThemeDropdown<T> extends StatelessWidget {
289289
const _ThemeDropdown({
290-
Key key,
291-
@required this.title,
292-
@required this.items,
293-
@required this.value,
294-
@required this.onChanged,
290+
Key? key,
291+
required this.title,
292+
required this.items,
293+
required this.value,
294+
required this.onChanged,
295295
}) : super(key: key);
296296

297297
final String title;
298298
final Map<String, T> items;
299299
final T value;
300-
final ValueChanged<T> onChanged;
300+
final ValueChanged<T?> onChanged;
301301

302302
@override
303303
Widget build(BuildContext context) {
@@ -322,15 +322,15 @@ class _ThemeDropdown<T> extends StatelessWidget {
322322

323323
class _ThemeSlider extends StatelessWidget {
324324
const _ThemeSlider({
325-
Key key,
326-
@required this.title,
327-
@required this.value,
328-
@required this.onChanged,
325+
Key? key,
326+
required this.title,
327+
required this.value,
328+
required this.onChanged,
329329
this.max = 1.0,
330330
}) : super(key: key);
331331

332332
final String title;
333-
final double value;
333+
final double? value;
334334
final ValueChanged<double> onChanged;
335335
final double max;
336336

@@ -339,8 +339,8 @@ class _ThemeSlider extends StatelessWidget {
339339
var label;
340340
if (value == null) {
341341
label = '';
342-
} else if (value > 1) {
343-
label = value.toInt().toString();
342+
} else if (value! > 1) {
343+
label = value!.toInt().toString();
344344
} else {
345345
label = value.toString();
346346
}

0 commit comments

Comments
 (0)