実現したいこと
- null check operator used on a null valueを解決させて、正常な挙動にする。
前提
FlutterのUI構築の仕方を勉強するにあたり、Youtubeの動画を真似して勉強しています。
発生している問題・エラーメッセージ
null check operator used on a null value
該当のソースコード
stories.dart
1import 'package:cached_network_image/cached_network_image.dart'; 2import 'package:flutter/material.dart'; 3 4import '../models/models.dart'; 5 6class Stories extends StatelessWidget { 7 final User currentUser; 8 final List<Story> stories; 9 const Stories({super.key, required this.currentUser, required this.stories}); 10 11 @override 12 Widget build(BuildContext context) { 13 return Container( 14 height: 200.0, 15 color: Colors.purple, 16 child: ListView.builder( 17 padding: EdgeInsets.symmetric( 18 vertical: 10.0, 19 horizontal: 8.0, 20 ), 21 scrollDirection: Axis.horizontal, 22 itemCount: 1 + stories.length, 23 itemBuilder: (BuildContext context, int index) { 24 if (index == 0) { 25 return Padding( 26 padding: EdgeInsets.symmetric( 27 horizontal: 4.0, 28 ), 29 child: _StoryCard( 30 isAddStory: true, 31 currentUser: currentUser, 32 story: null, 33 ), 34 ); 35 } 36 return Padding( 37 padding: EdgeInsets.symmetric(horizontal: 4.0), 38 child: _StoryCard( 39 // story: story, 40 story: null, 41 currentUser: null, 42 ), 43 ); 44 }, 45 ), 46 ); 47 } 48} 49 50class _StoryCard extends StatelessWidget { 51 final bool isAddStory; 52 final User? currentUser; 53 final Story? story; 54 // final isAddStory = currentUser!.imageUrl.toString() ?? false; 55 // final isNotAddStory = story!.imageUrl.toString() ?? false; 56 const _StoryCard({ 57 super.key, 58 this.isAddStory = false, 59 required this.currentUser, 60 required this.story, 61 }); 62 63 @override 64 Widget build(BuildContext context) { 65 return Stack( 66 children: [ 67 CachedNetworkImage( 68 imageUrl: isAddStory 69 ? currentUser!.imageUrl.toString() 70 : story!.imageUrl.toString(), 71 height: double.infinity, 72 width: 110.0, 73 fit: BoxFit.cover, 74 ), 75 ], 76 ); 77 } 78} 79
models.dart
1export 'user_model.dart'; 2export 'story_model.dart'; 3export 'post_model.dart';
user_model.dart
1import 'package:meta/meta.dart'; 2 3class User { 4 final String name; 5 final String? imageUrl; 6 7 const User({ 8 required this.name, 9 required this.imageUrl, 10 }); 11} 12
story_model.dart
1import 'package:meta/meta.dart'; 2import 'models.dart'; 3 4class Story { 5 final User user; 6 final String? imageUrl; 7 final bool isViewed; 8 9 const Story({ 10 required this.user, 11 required this.imageUrl, 12 this.isViewed = false, 13 }); 14} 15
post_model.dart
1import 'package:meta/meta.dart'; 2import 'models.dart'; 3 4class Post { 5 final User user; 6 final String caption; 7 final String timeAgo; 8 final String? imageUrl; 9 final int likes; 10 final int comments; 11 final int shares; 12 13 const Post({ 14 required this.user, 15 required this.caption, 16 required this.timeAgo, 17 required this.imageUrl, 18 required this.likes, 19 required this.comments, 20 required this.shares, 21 }); 22} 23
試したこと
null check operator used on a null valueを和訳したところ、
ヌルチェック演算子という意味だと判明。
null check operator used on a null valueでググったところ、以下のページに行き着く。
https://off.tokyo/blog/null-check-operator-used-on-a-null-value/
上記のページでは、最初に変数を初期化してそれを比較すればnullに対応できるということがわかりました。そこでstories.dart内で変数を初期化して67行目のCachedNetworkImageの引数内で使用したいと考えています。自分なりに変数を定義してそれっぽくnull値に対応したものを定義(54,55行目)してみましたが、現在FlutterのUIの構築のやり方を勉強するという段階なので今回の場合だとどううまく対応させれば良いかがわからない状況です。
補足情報(FW/ツールのバージョンなど)
[✓] Flutter (Channel stable, 3.7.0, on macOS 13.1 22C65
darwin-x64, locale ja-JP)
[✓] Android toolchain - develop for Android devices
(Android SDK version 32.1.0-rc1)
[✓] Xcode - develop for iOS and macOS (Xcode 14.2)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2021.2)
[✓] VS Code (version 1.74.3)
[✓] Connected device (3 available)
[✓] HTTP Host Availability
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/02/05 06:27
2023/02/05 06:42
2023/02/06 21:32