我是新手,請幫助我。我的場景是這樣的,我有一個串列,例如 List test = ["one","two","three"] 和兩個頁面(主頁和詳細資訊頁面)。主頁包含串列視圖。對于特定串列視圖專案有兩個文本視圖,一個是根據索引列出資料,例如“一個”,另一個要保持最初為空字串。當單擊特定專案時,它將導航到詳細資訊頁面。詳細資訊頁面包含一個單擊該按鈕后的 textview 和按鈕,它將回傳主頁并為特定專案重建 ui 并顯示完成的文本而不是空字串。我怎樣才能做到這一點。這是我嘗試過的示例代碼
//homepage
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<String> test = ["one", "two", "three", "four"];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: ListView.builder(
itemCount: test.length,
itemBuilder: (context, index) {
return Item(testdata: test[index]);
},
),
),
);
}
}
//itempage
class Item extends StatefulWidget {
final String testdata;
const Item({super.key, required this.testdata});
@override
State<Item> createState() => _ItemState();
}
class _ItemState extends State<Item> {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(20.0),
child: GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Details(data: widget.testdata),
));
},
child: Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(widget.testdata),
Text(""),
],
),
),
),
);
}
}
//details page
class Details extends StatefulWidget {
final String data;
const Details({super.key, required this.data});
@override
State<Details> createState() => _DetailsState();
}
class _DetailsState extends State<Details> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("This is Details Page"),
),
body: Center(
child: Column(
children: [
Text(widget.data),
SizedBox(
height: 30,
),
ElevatedButton(
onPressed: () {
Navigator.pop(context);
},
child: Text("Done"))
],
),
),
);
}
}
uj5u.com熱心網友回復:
任何與創建視圖不直接相關的資料都不應該在小部件的狀態中......它應該在全域空間中,并且通常由某種狀態管理(如 RiverPod 或 BLoC)管理。
一旦您了解您的應用程式狀態屬于小部件之外,“將資料從一個頁面發送到另一個頁面”的討論就變得毫無意義。
uj5u.com熱心網友回復:
內部Item類更改為:
onTap: () {
bool? result = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Details(data: widget.testdata),
));
if (result != null && result) {
setState(() {
_message = 'done';
});
}
},
并像這樣定義新變數:
class _ItemState extends State<Item> {
String _message = '';
@override
Widget build(BuildContext context) {
return Padding(
...
}
}
然后內部Details頁面pop是這樣的:
onPressed: () {
Navigator.pop(context, true);
},
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520964.html
標籤:扑镖
下一篇:如何在顫動中以一定角度切割線?
