![](/img/trans.png)
[英]Error: Null check operator used on a null value - for boolean value - in Flutter
[英]Flutter Error - Null check operator used on null value (PDF viewer)
你好,我是 Flutter 的新人。當我計算這個操作時,我的代碼中出現了這個錯誤。 我已將所有依賴項導入到我的 pubspec.yaml 文件中。 請幫我。
錯誤
Null 檢查用於 null 值的運算符
文件視圖.dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:offlinefileviewer/pdfapi.dart';
import 'package:offlinefileviewer/pdfviewerpage.dart';
class FileView extends StatelessWidget {
const FileView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("File viewer"),
),
body: ElevatedButton(
onPressed: () async {
final path = 'assets/pdf1.pdf';
final file = await PdfApi.loadAsset(path);
openPDF(context, file);
},
child: Text("Asset File"),
),
);
}
void openPDF(BuildContext context, File file) =>
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => PDFViewerPage(key: key!, file: file)),
);
}
pdfviewerpage.dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_pdfview/flutter_pdfview.dart';
import 'package:path/path.dart';
class PDFViewerPage extends StatefulWidget {
final File? file;
const PDFViewerPage({
Key? key,
this.file,
}) : super(key: key);
@override
_PDFViewerPageState createState() => _PDFViewerPageState();
}
class _PDFViewerPageState extends State<PDFViewerPage> {
PDFViewController? controller;
int? pages;
int? indexPage;
@override
Widget build(BuildContext context) {
final name = basename(widget.file!.path);
final text = '${indexPage! + 1} of $pages';
return Scaffold(
appBar: AppBar(
title: Text(name),
actions: pages! >= 2
? [
Center(child: Text(text)),
IconButton(
icon: Icon(Icons.chevron_left, size: 32),
onPressed: () {
final page = indexPage == 0 ? pages : indexPage! - 1;
controller!.setPage(page!);
},
),
IconButton(
icon: Icon(Icons.chevron_right, size: 32),
onPressed: () {
final page = indexPage == pages! - 1 ? 0 : indexPage! + 1;
controller!.setPage(page);
},
),
]
: null,
),
body: PDFView(
filePath: widget.file!.path,
onRender: (pages) => setState(() => this.pages = pages!),
onViewCreated: (controller) =>
setState(() => this.controller = controller),
onPageChanged: (indexPage, _) =>
setState(() => this.indexPage = indexPage!),
),
);
}
}
錯誤
════════異常被widgets庫捕獲═════════════════════════════════ _CastError was throwed building Builder(dirty): Null check operator used on a null value
The relevant error-causing widget was
MaterialApp
lib\main.dart:12
When the exception was thrown, this was the stack
#0 FileView.openPDF.<anonymous closure>
package:offlinefileviewer/fileview.dart:28
#1 MaterialPageRoute.buildContent
package:flutter/…/material/page.dart:53
#2 MaterialRouteTransitionMixin.buildPage
package:flutter/…/material/page.dart:106
#3 _ModalScopeState.build.<anonymous closure>.<anonymous closure>
package:flutter/…/widgets/routes.dart:843
#4 Builder.build
package:flutter/…/widgets/basic.dart:7798
...
════════════════════════════════════════════════════════════════════════════════
盡可能避免使用可空變量。 這樣分析器本身就安全且可預測。
!
操作員盡可能。 看到這個。 但是,您應該能夠使用if
條件包裝對可空變量的每次訪問,以避免在它為 null 時繼續。當使用!
強烈建議使用某種檢查(最好使用if
條件來查看值是否為 null,否則執行一些預期在值為 null 時執行的操作)
class PDFViewerPage extends StatefulWidget {
final File file;
const PDFViewerPage({
Key? key,
required this.file,
}) : super(key: key);
@override
_PDFViewerPageState createState() => _PDFViewerPageState();
}
class _PDFViewerPageState extends State<PDFViewerPage> {
PDFViewController? controller;
int? pages;
int? indexPage;
late final String name;
String get text => '${indexPage ?? 0 + 1} of ${pages ?? 0}';
@override
void initState() {
name = basename(widget.file.path);
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(name),
actions: (pages ?? 0) >= 2 // edited
? [
Center(child: Text(text)),
IconButton(
icon: Icon(Icons.chevron_left, size: 32),
onPressed: () {
if (controller == null || pages == null) {
return;
}
final page =
(indexPage ?? 0) == 0 ? pages! : indexPage! - 1;
controller!.setPage(page);
},
),
IconButton(
icon: Icon(Icons.chevron_right, size: 32),
onPressed: () {
if (controller == null || pages == null) {
return;
}
final page = (indexPage ?? 0) == pages! - 1
? 0
: (indexPage ?? 0) + 1;
controller?.setPage(page);
},
),
]
: null,
),
body: PDFView(
filePath: widget.file.path,
onRender: (pages) => setState(() => this.pages = pages!),
onViewCreated: (controller) =>
setState(() => this.controller = controller),
onPageChanged: (indexPage, _) =>
setState(() => this.indexPage = indexPage!),
),
);
}
}
fileview.dart
方法openPdf
中, key
可以是 null。在運行時,它恰好是一個 null 值,並且!
使用了運算符導致它拋出該異常。 只需刪除!
運算符,可以解決問題,因為PDFViewerPage
也接受可為空的key
參數。
這可以幫助:
void openPDF(BuildContext context, File file) =>
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => PDFViewerPage(key: key, file: file)),
);
ElevatedButton( onPressed: () => openPDF(context, file), child: Text("Asset File"), ) void openPDF(BuildContext context, File file) { final path = 'assets/pdf1.pdf'; final file = await PdfApi.loadAsset(path); Navigator.of(context).push(MaterialPageRoute(builder: (_) => PDFViewerPage(key: key,: file; file))); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.