我用go_router包构建了一个网页。有一个ShellRoute可以使标题图像和标题导航栏对所有页面都是静态的。我不能使页面垂直滚动,但给出了渲染问题,无论我把SingleChildScrollView(同时删除扩展)。
下面是代码:
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
void main() {
runApp(MyApp());
}
final GoRouter _router = GoRouter(
initialLocation: '/',
routes: [
ShellRoute(
builder: (context, state, child) {
return Scaffold(
body: Padding(
padding:EdgeInsets.symmetric(horizontal: 200),
child: Column(
children: [
Image.asset('images/Banner.png'), //header image
Container( //header menu
color: Colors.blue,
height: 100,
),
Expanded(
child: child,
),
]
),
),
);
},
routes: [
GoRoute(
path: "/",
builder: (context, state) {
return HomePage();
},
),
],
),
],
);
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp.router(
routerConfig: _router,
title: 'Test',
theme: ThemeData(
primarySwatch: Colors.blue,
),
);
}
}
class HomePage extends StatelessWidget {
/// Constructs a [HomeScreen]
HomePage({super.key});
@override
Widget build(BuildContext context) {
print('hit');
return Scaffold(
body: Column(
children: [
Container(height: 200, color: Colors.purple),
Container(height: 300, color: Colors.green),
Container(height: 400, color: Colors.red),
]
)
);
}
}
另一个有趣的事情是,类HomePage在每次热重启时被触发3次。如果有像从API加载数据这样的网络活动,它将触发3次,使加载时间延长3倍。
1条答案
按热度按时间utugiqy61#
您只需将
HomePage
中的列 Package 为SingleChildScrollView
,如下所示:不应删除
Expanded
。关于重建。不知道为什么它发生了多次,但它不应该是一个问题。无论如何,你都不应该在构建方法中从API中获取数据。您应该始终以这样一种方式实现
build
方法,即多次调用该方法不会产生副作用。通常情况下,您有一个StatefulWidget
,然后在initState
中执行API调用,而不是在build
中