LateInitializationError: Field 'videoModel' has not been initialized.请问这个报错怎么解决

来源:5-5 Flutter新版路由和导航系统实战(二)

慕先生4316985

2021-12-22

报错截图
图片描述`import ‘package:bili/page/home_page.dart’;
import ‘package:bili/page/video_detail_page.dart’;
import ‘package:flutter/material.dart’;
import ‘model/video_model.dart’;

void main() {
runApp(BiliApp());
}
class BiliApp extends StatefulWidget {
const BiliApp({Key? key}) : super(key: key);

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

class _BiliAppState extends State {
BiliRouterDelegate _routerDelegate = BiliRouterDelegate();

@override
Widget build(BuildContext context) {
//定义route
var widget = Router(
routerDelegate: _routerDelegate,
);
return MaterialApp(
home: widget
);
}
}

class BiliRouterDelegate extends RouterDelegate
with ChangeNotifier,PopNavigatorRouterDelegateMixin{
final GlobalKey navigatorKey;
//为Navigator设置一个key,必要的时候可以通过navigatorKey.currentState来获取到NavigatorState对象
BiliRouterDelegate() : navigatorKey=GlobalKey();

List pages = [];
late VideoModel videoModel;
late BiliRoutePath path;

@override
Widget build(BuildContext context) {
//构建路由栈
pages=[
pageWrap(HomePage(
onJumpToDetail: (videoModel) {
this.videoModel=videoModel;
notifyListeners();
},)),
if(videoModel !=null) pageWrap(VideoDetailPage(videoModel))
];
return Navigator(
key:navigatorKey,
pages: pages,
onPopPage:(route,result){
//在这里可以控制是否可以返回
if(!route.didPop(result)){
return false;
}
return true;
},
);
}

@override
Future setNewRoutePath(BiliRoutePath path) async {
this.path=path;
}

}

class BiliRoutePath{
final String location;

BiliRoutePath.home() : location = “/”;

BiliRoutePath.detail() : location = “/detail”;
}

//创建路由页面
pageWrap(Widget child){
return MaterialPage(key:ValueKey(child.hashCode),child: child);
}

`

写回答

1回答

CrazyCodeBoy

2021-12-23

在使用videoModel时还没初始化videoModel到自己的,可参考下这块课程源码检查下你的代码实现看是否有出入的地方呢

0
1
慕斯3234644
请问下这个咋改
2021-12-31
共1条回复

Flutter高级进阶实战-仿哔哩哔哩-掌握Flutter高阶技能

一次性掌握Flutter高阶技能+商业级复杂项目架构设计与开发方案

1723 学习 · 870 问题

查看课程