前言
這篇文章是把前兩篇寫的一個一個的小main.dart
整合在一個demo里面评抚,以及在整合過程中遇到的問題
demo地址
demo中設(shè)計的代碼解釋請看這里
基礎(chǔ)的layout學(xué)習(xí)
導(dǎo)航的學(xué)習(xí)
效果圖
問題
1.導(dǎo)航跳轉(zhuǎn)問題
The context used to push or pop routes from the Navigator must be that of a widget that is a flutter: descendant of a Navigator widget
這是因為直接在MaterialApp中push是不行的。
原來的代碼
class Myapp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,//設(shè)置取消右上角的debug標(biāo)識
title: 'flutter學(xué)習(xí)demo',
theme: ThemeData.light(),
home:Scaffold(
appBar: AppBar(
title: Text('flutter學(xué)習(xí)demo'),
),
body: ListView(
children: <Widget>[
getLines('基礎(chǔ)的layout學(xué)習(xí)', context: context,ontap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MyBasicLayoutScreen(),
));
}),
getLines('導(dǎo)航的學(xué)習(xí)', context: context,ontap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MyNavigationPractice(),
));
}),
],
),
)
);
}
}
后面把跳轉(zhuǎn)的部分單獨拎出來
import 'package:flutter/material.dart';
import 'layout/basicsLayout.dart';
import 'navigation/navigationPractice.dart';
import 'utils/utility.dart';
void main() => runApp(MaterialApp(
debugShowCheckedModeBanner: false,
title: 'flutter學(xué)習(xí)demo',
theme: ThemeData.light(),
home: MyHomeScreen(),
));
class MyHomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('flutter學(xué)習(xí)demo'),
),
body: ListView(
children: <Widget>[
getLines('基礎(chǔ)的layout學(xué)習(xí)', context: context,ontap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MyBasicLayoutScreen(),
));
}),
getLines('導(dǎo)航的學(xué)習(xí)', context: context,ontap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MyNavigationPractice(),
));
}),
],
),
);
}
}