該頁面將美國各州顯示為串列。當您單擊 ListTile 時,狀態旁邊會出現一個復選標記。用戶只能選擇一種狀態。如何跟蹤點擊的狀態并將其轉移到另一個螢屏?發送按鈕單擊“保存”。
List < UsaStatesModel > _statesList = [];
late final _checkedValue =
List < bool > .generate(_statesList.length, (index) => false);
@override
Widget bodyWidget(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: 'States'
actions: GestureDetector(
onTap: () {},
child: Icon(
Icons.save,
size: 26.0,
),
),
),
body: BlocConsumer < BlocA, BlocAState > (
listener: (context, state) {
if (state is StatesLoadedState) {
_statesList = state.states;
}
},
builder: (context, state) {
if (state is StatesLoadedState) {
return Padding(
padding: const EdgeInsets.only(top: 142),
child: ListView.separated(
itemCount: _statesList.length,
itemBuilder: (context, index) {
return ListTile(
trailing: !_checkedValue[index] ?
const SizedBox.shrink(): Image.asset(
Assets.assetsCheckmark,
width: 13,
height: 10,
),
title: Text(
_statesList[index].name,
),
onTap: () => _checkState(index),
);
},
separatorBuilder: (context, index) {
return const Divider();
},
),
),
),
);
}
}
)
}
void _checkState(int index) {
setState(
() {
for (var i = 0; i < _checkedValue.length; i ) {
_checkedValue[i] = false;
}
_checkedValue[index] = true;
},
);
}
}
uj5u.com熱心網友回復:
在頂部創建一個像這樣的變數
int currentIndex = 0;
Whenever a list is selected update this index
void _checkState(int index) {
setState(
() {
for (var i = 0; i < _checkedValue.length; i ) {
_checkedValue[i] = false;
}
_checkedValue[index] = true;
currentIndex = index; //update here
},
);
}
現在
_stateList[currentIndex]
會給你當前選擇的狀態
uj5u.com熱心網友回復:
您不能傳遞 Listtile,它會占用記憶體,所以我認為您必須使用引數僅將資料從一個螢屏傳遞到另一個螢屏,就像這樣。
import 'package:flutter/src/foundation/key.dart';
import 'package:flutter/src/widgets/framework.dart';
class MyWidget extends StatefulWidget {
const MyWidget({Key? key}) : super(key: key);
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: ElevatedButton(onPressed: () {
Navigator.of(context).push(MaterialPageRoute(builder: (context){
return secondscreen(data:"hello");
}));
},
child: Text("hwllo"),),
),
);
}
}
class secondscreen extends StatefulWidget {
String data;
secondscreen({Key? key,required this.data}) : super(key: key);
@override
State<secondscreen> createState() => _secondscreenState();
}
class _secondscreenState extends State<secondscreen> {
@override
Widget build(BuildContext context) {
return Text('${widget.data}');
}
}```
uj5u.com熱心網友回復:
我們可以在頂部的這個螢屏中擁有 selectedIndex 屬性,并在 _checkState 方法中為其賦值。在我們的第二個螢屏(我們必須將選定狀態傳遞到的螢屏)中,我們需要創建一個 UsaStatesModel 變數并在導航時為其賦值。
int? selectedIndex;
void _checkState(int index) {
selectedIndex = index; // Assigning selected index value
setState(
() {
for (var i = 0; i < _checkedValue.length; i ) {
_checkedValue[i] = false;
}
_checkedValue[index] = true;
},
);
}
// Call this method on save to pass selected state to another screen
goToAnotherScreen(BuildContext context) {
if (selectedIndex != null) {
final selectedState = _statesList[selectedIndex!];
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SecondScreen(selectedState: selectedState),
),
);
}
}
第二屏
class SecondScreen extends StatelessWidget {
const SecondScreen({
Key? key,
required this.selectedState,
}) : super(key: key);
UsaStatesModel selectedState;
@override
Widget build(BuildContext context) {
return Container();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/497899.html
上一篇:Firebase.initializeApp(options:DefaultFirebaseOptions.currentPlatform,)拋出例外無法在通道上建立連接。顫振 Firebase
