我有一個 ListView,我想讓串列項可點擊。我的想法是,當用戶點擊一個專案時,它將被定向到另一個頁面。每個底部應該通向不同的螢屏。我在實作它時遇到了麻煩,我不知道要使用什么 ontap。我應該怎么辦?我應該使用 ListTile 而不是 ListView 嗎?
import 'package:flutter/material.dart';
import 'package:untitled1/PerformancePulses.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: ListViewHome()
);
}
}
class ListViewHome extends StatelessWidget {
final titles = ["Performance Pulses",
"Admin Indicator",];
final icons = [Icons.arrow_forward_ios_outlined, Icons.arrow_forward_ios_outlined];
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: titles.length,
itemBuilder: (context, index) {
return Card(
child: ListTile(
title: Text(titles[index]),
leading: const CircleAvatar(
backgroundImage: NetworkImage(
"https://wcs.smartdraw.com/chart/img/basic-bar-graph.png?bn=15100111840")),
trailing: Icon(icons[index])));
});
}
}
uj5u.com熱心網友回復:
請試試這個。這是模型類
class Item{
String title;
String longText;
String imageUrl;
Item({this.title,this.longText,this.imageUrl});
}
這是第一個螢屏
class FirstScreen extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<FirstScreen> {
List<Item> _itemList = [
Item(title: "title1", longText: "longtext1", imageUrl: "https://picsum.photos/200/300"),
Item(title: "tite2", longText: "longtext2", imageUrl: "https://picsum.photos/200/300")
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Sharing data between screens'),
),
body: Center(
child: ListView.builder(
itemCount: _itemList.length,
itemBuilder: (context, index) {
return return InkWell(
onTap: (){
//this is where you navigate to new screen
// SecondScreen() should be name of the second screen you created
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SecondScreen(
)),
);
},
child: Card(
child: ListTile(
title: Text(titles[index]),
leading: const CircleAvatar(
backgroundImage: NetworkImage(
"https://wcs.smartdraw.com/chart/img/basic-bar-graph.png?bn=15100111840")),
trailing: Icon(icons[index]))),
);
});
}
}
這是詳細資訊螢屏
import 'package:flutter/material.dart';
import 'model/item.dart';
class DetailScreen extends StatelessWidget {
final Item item;
const DetailScreen({Key key,this.item}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Detail Screen"),
),
body: Center(
child: Column(
children:[
Text(item.longText),
Image.network(item.imageUrl,fit: BoxFit.fill,),
]
),
),
);
}
}
uj5u.com熱心網友回復:
將小部件包裝Card進去GestureDetector,你就有了onTap
return GestureDetector(
onTap: () {
Navigator.push(context, MaterialPageRoute(builder: (context) => YourRoute()));
},
child: Card(
child: ListTile(
title: Text(titles[index]),
leading: const CircleAvatar(
backgroundImage: NetworkImage(
"https://wcs.smartdraw.com/chart/img/basic-bar-graph.png?bn=15100111840")),
trailing: Icon(icons[index])
)
),
)
uj5u.com熱心網友回復:
首先為您的串列項創建模型類,如下所示:
class ItemModel {
final String title;
final Widget route;
ItemModel({@required this.title,@required this.route });
}
然后像這樣定義你的串列:
final _list = [ ItemModel(
title: "Performance Pulses", route: SomeWidget()),
ItemModel(
title: "Admin Indicator", route: SomeWidget2()),];
并且您的串列希望是這樣的:
ListView.builder(
itemCount: _list.length,
itemBuilder: (context, index) {
return InkWell(
onTap: (){
Navigator.of(context).push(MaterialPageRoute(builder: (context) => _list[index].route));
},
child: Card(
child: ListTile(
title: Text(_list[index].title),
leading: const CircleAvatar(
backgroundImage: NetworkImage(
"https://wcs.smartdraw.com/chart/img/basic-bar-graph.png?bn=15100111840")),
trailing: Icon(icons[index]))),
);
})
uj5u.com熱心網友回復:
您需要在卡片上添加點擊監聽器并導航到您想要的螢屏
樣本
import 'package:flutter/material.dart';
import 'package:untitled1/PerformancePulses.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: ListViewHome()
);
}
}
class ListViewHome extends StatelessWidget {
final titles = ["Performance Pulses",
"Admin Indicator",];
final icons = [Icons.arrow_forward_ios_outlined,
Icons.arrow_forward_ios_outlined];
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: titles.length,
itemBuilder: (context, index) {
return InkWell(
onTap: (){
//this is where you navigate to new screen
// SecondScreen() should be name of the second screen you created
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SecondScreen(
)),
);
},
child: Card(
child: ListTile(
title: Text(titles[index]),
leading: const CircleAvatar(
backgroundImage: NetworkImage(
"https://wcs.smartdraw.com/chart/img/basic-bar-graph.png?bn=15100111840")),
trailing: Icon(icons[index]))),
);
});
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/506377.html
