Flutter 有没有办法将导航路线添加到颤振/省道列表中?
我不熟悉颤振/飞镖,但我尝试了几种方法将导航路线添加到指定给栅格视图的列表中。这可能不是最有效的方法,但却是我想到的第一件事。我想在卡片上加一个墨水池,让导航路线通过。除此之外,我能想到的唯一其他解决方案是创建一个在列表中迭代的OnTap函数。目前,导航列表选项给了我一个错误,即“未来对象不能分配给导航器的参数类型”,我得到这个错误是因为它是一个常量。但我尝试了其他一些方法,得到了类似的结果。我当前的配置有什么问题?是否有更好/更有效的解决方案 这是我的选择列表:Flutter 有没有办法将导航路线添加到颤振/省道列表中?,flutter,dart,Flutter,Dart,我不熟悉颤振/飞镖,但我尝试了几种方法将导航路线添加到指定给栅格视图的列表中。这可能不是最有效的方法,但却是我想到的第一件事。我想在卡片上加一个墨水池,让导航路线通过。除此之外,我能想到的唯一其他解决方案是创建一个在列表中迭代的OnTap函数。目前,导航列表选项给了我一个错误,即“未来对象不能分配给导航器的参数类型”,我得到这个错误是因为它是一个常量。但我尝试了其他一些方法,得到了类似的结果。我当前的配置有什么问题?是否有更好/更有效的解决方案 这是我的选择列表: class Choice {
class Choice {
const Choice({this.title, this.icon, this.nav});
final String title;
final IconData icon;
final Navigator nav;
}
const List<Choice> choices = const <Choice>[
const Choice(title: 'Timer', icon: Icons.timer, nav: Navigator.pushNamed(context, TestConfirmation.id)),
const Choice(title: 'Seating Chart', icon: Icons.event_seat),
const Choice(title: 'Random', icon: Icons.shuffle),
const Choice(title: 'Group Maker', icon: Icons.group_add),
const Choice(title: 'Noise Monitor', icon: Icons.hearing),
const Choice(title: 'Assign Tasks', icon: Icons.assignment_ind),
const Choice(title: 'Survey', icon: Icons.rate_review),
const Choice(title: 'Permission Slips', icon: Icons.assignment),
const Choice(title: 'Lesson Plans', icon: Icons.local_library),
const Choice(title: 'Attendance', icon: Icons.schedule),
const Choice(title: 'Gradebook', icon: Icons.insert_chart)
];
class ChoiceCard extends StatelessWidget {
const ChoiceCard({Key key, this.choice}) : super(key: key);
final Choice choice;
@override
Widget build(BuildContext context) {
final TextStyle textStyle = Theme.of(context).textTheme.subhead;
return Card(
color: Colors.white,
child: InkWell(
//onTap: choice.navigation,
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: Icon(choice.icon,
size: 90.0, color: textStyle.color)),
Text(choice.title, style: textStyle),
]),
),
));
}
}
类选择{
常量选择({this.title,this.icon,this.nav});
最后的字符串标题;
最终的Iconda图标;
最终导航仪导航;
}
常量列表选项=常量[
常量选项(标题:“计时器”,图标:Icons.Timer,导航:Navigator.pushNamed(上下文,TestConfirmation.id)),
常量选择(标题:“座位表”,图标:图标。事件座位),
常量选择(标题:“随机”,图标:图标。随机),
常量选择(标题:“组生成器”,图标:图标。组添加),
常量选择(标题:“噪音监视器”,图标:图标。听力),
常量选项(标题:“分配任务”,图标:Icons.assignment\u ind),
常数选择(标题:“调查”,图标:图标。费率审查),
const选项(标题:“权限单”,图标:Icons.assignment),
const选项(标题:“课程计划”,图标:Icons.local_library),
常数选择(标题:“出席”,图标:图标。时间表),
常量选项(标题:“成绩册”,图标:图标。插入图表)
];
这是我的名片:
class Choice {
const Choice({this.title, this.icon, this.nav});
final String title;
final IconData icon;
final Navigator nav;
}
const List<Choice> choices = const <Choice>[
const Choice(title: 'Timer', icon: Icons.timer, nav: Navigator.pushNamed(context, TestConfirmation.id)),
const Choice(title: 'Seating Chart', icon: Icons.event_seat),
const Choice(title: 'Random', icon: Icons.shuffle),
const Choice(title: 'Group Maker', icon: Icons.group_add),
const Choice(title: 'Noise Monitor', icon: Icons.hearing),
const Choice(title: 'Assign Tasks', icon: Icons.assignment_ind),
const Choice(title: 'Survey', icon: Icons.rate_review),
const Choice(title: 'Permission Slips', icon: Icons.assignment),
const Choice(title: 'Lesson Plans', icon: Icons.local_library),
const Choice(title: 'Attendance', icon: Icons.schedule),
const Choice(title: 'Gradebook', icon: Icons.insert_chart)
];
class ChoiceCard extends StatelessWidget {
const ChoiceCard({Key key, this.choice}) : super(key: key);
final Choice choice;
@override
Widget build(BuildContext context) {
final TextStyle textStyle = Theme.of(context).textTheme.subhead;
return Card(
color: Colors.white,
child: InkWell(
//onTap: choice.navigation,
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: Icon(choice.icon,
size: 90.0, color: textStyle.color)),
Text(choice.title, style: textStyle),
]),
),
));
}
}
class ChoiceCard扩展了无状态小部件{
const ChoiceCard({Key-Key,this.choice}):super(Key:Key);
最终选择;
@凌驾
小部件构建(构建上下文){
final TextStyle TextStyle=Theme.of(context).textTheme.subhead;
回程卡(
颜色:颜色,白色,
孩子:InkWell(
//onTap:choice.navigation,
儿童:中心(
子:列(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
扩大(
子:图标(choice.Icon,
尺寸:90.0,颜色:textStyle.color),
文本(choice.title,style:textStyle),
]),
),
));
}
}
您可以复制粘贴运行下面的完整代码您可以使用
函数
代替导航器
代码片段
class Choice {
String title;
IconData icon;
Function nav;
...
@override
void initState() {
choices = [
Choice(
title: 'Timer',
icon: Icons.timer,
nav: () {
Navigator.pushNamed(context, "/first");
}),
Choice(
title: 'Seating Chart',
icon: Icons.event_seat,
nav: () {
Navigator.pushNamed(context, "/second");
}),
工作演示
完整代码
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
initialRoute: '/',
routes: {
'/': (context) => HomeContent(),
'/first': (context) => FirstScreen(),
'/second': (context) => SecondScreen(),
});
}
}
class Choice {
String title;
IconData icon;
Function nav;
Choice({this.title, this.icon, this.nav});
}
class HomeContent extends StatefulWidget {
// builder
@override
_HomeContentState createState() => _HomeContentState();
}
class _HomeContentState extends State<HomeContent> {
List<Choice> choices = [];
@override
void initState() {
choices = [
Choice(
title: 'Timer',
icon: Icons.timer,
nav: () {
Navigator.pushNamed(context, "/first");
}),
Choice(
title: 'Seating Chart',
icon: Icons.event_seat,
nav: () {
Navigator.pushNamed(context, "/second");
}),
Choice(title: 'Random', icon: Icons.shuffle),
Choice(title: 'Group Maker', icon: Icons.group_add),
Choice(title: 'Noise Monitor', icon: Icons.hearing),
Choice(title: 'Assign Tasks', icon: Icons.assignment_ind),
Choice(title: 'Survey', icon: Icons.rate_review),
Choice(title: 'Permission Slips', icon: Icons.assignment),
Choice(title: 'Lesson Plans', icon: Icons.local_library),
Choice(title: 'Attendance', icon: Icons.schedule),
Choice(title: 'Gradebook', icon: Icons.insert_chart)
];
}
Widget _itemBuilderFunc(BuildContext context, int index) {
return ChoiceCard(
choice: choices[index],
);
}
@override
Widget build(BuildContext context) {
return GridView.builder(
itemCount: choices.length,
itemBuilder: this._itemBuilderFunc,
padding: EdgeInsets.fromLTRB(12, 12, 12, 0),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 10,
mainAxisSpacing: 10,
childAspectRatio: 0.75),
);
}
}
class ChoiceCard extends StatelessWidget {
const ChoiceCard({Key key, this.choice}) : super(key: key);
final Choice choice;
@override
Widget build(BuildContext context) {
final TextStyle textStyle = Theme.of(context).textTheme.subhead;
return Card(
color: Colors.white,
child: InkWell(
onTap: choice.nav,
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: Icon(choice.icon,
size: 90.0, color: textStyle.color)),
Text(choice.title, style: textStyle),
]),
),
));
}
}
class FirstScreen extends StatefulWidget {
@override
_FirstScreenState createState() => _FirstScreenState();
}
class _FirstScreenState extends State<FirstScreen> {
@override
Widget build(BuildContext context) {
return Text("First Screen");
}
}
class SecondScreen extends StatefulWidget {
@override
_SecondScreenState createState() => _SecondScreenState();
}
class _SecondScreenState extends State<SecondScreen> {
@override
Widget build(BuildContext context) {
return Text("Second Screen");
}
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
initialRoute:“/”,
路线:{
“/”:(上下文)=>HomeContent(),
“/first”:(上下文)=>FirstScreen(),
“/second”:(上下文)=>SecondScreen(),
});
}
}
班级选择{
字符串标题;
Iconda图标;
功能导航;
选项({this.title,this.icon,this.nav});
}
类HomeContent扩展StatefulWidget{
//建筑商
@凌驾
_HomeContentState createState()=>\u HomeContentState();
}
类_HomeContentState扩展状态{
列表选项=[];
@凌驾
void initState(){
选择=[
选择(
标题:“计时器”,
图标:Icons.timer,
导航:(){
Navigator.pushNamed(上下文,“/first”);
}),
选择(
标题:“座位表”,
图标:Icons.event_座位,
导航:(){
Navigator.pushNamed(上下文,“/second”);
}),
选择(标题:“随机”,图标:Icons.shuffle),
选择(标题:“组生成器”,图标:图标。组添加),
选择(标题:“噪音监视器”,图标:Icons.hearing),
选项(标题:“分配任务”,图标:Icons.assignment\u ind),
选择(标题:“调查”,图标:图标。评分审查),
选项(标题:“权限单”,图标:Icons.assignment),
选择(标题:“课程计划”,图标:Icons.local_library),
选择(标题:“出席”,图标:图标。时间表),
选项(标题:“成绩册”,图标:图标。插入图表)
];
}
Widget\u itemBuilderFunc(BuildContext上下文,int索引){
返回选择卡(
选项:选项[索引],
);
}
@凌驾
小部件构建(构建上下文){
返回GridView.builder(
itemCount:choices.length,
itemBuilder:这个,
填充:从LTRB(12,12,12,0)开始的边缘设置,
gridDelegate:SliverGridDelegateWithFixedCrossAxisCount(
交叉轴计数:2,
横轴间距:10,
平均间距:10,
儿童比例:0.75),
);
}
}
类ChoiceCard扩展了无状态小部件{
const ChoiceCard({Key-Key,this.choice}):super(Key:Key);
最终选择;
@凌驾
小部件构建(构建上下文){
final TextStyle TextStyle=Theme.of(context).textTheme.subhead;
回程卡(
颜色:颜色,白色,
孩子:InkWell(
onTap:choice.nav,
儿童:中心(
子:列(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
扩大(
子:图标(choice.Icon,
尺寸:90.0,颜色:textStyle.color),
文本(choice.title,style:textStyle),
]),
),
));
}
}
类FirstScreen扩展StatefulWidget{
@凌驾
_FirstScreenState createState()=>\u FirstScreenState();
}
类_FirstScreenState扩展