我正在为windows开发一个应用程序。我制作了一个屏幕,其中显示了一个由节目生成的无线电小部件列表(大约40个无线电组,每个组中有2个或3个无线电部件)。所有的东西在点击时都正常工作。这个值被更新了,但是无线电按钮并没有改变它的外观(它没有显示它被选中),这是直到我滚动无线电组从视线之外并滚动回可见(可能是因为它是在那个时候重建)。
有什么暗示吗?
-更新
很抱歉一开始没有发布任何代码,我描述的问题似乎并不是需要这样做的问题。
到目前为止,这里有许多关于刷新的问题和解决方案,这就是让它工作的问题和解决方案。
setState(() {
FutureToBeRefreshed = functionToGetData;
}只有一个缺点。在setState之后,整个屏幕会被刷新,并在第一个位置启动,当您更改在开始时屏幕外的一个无线电按钮的值时,这是很烦人的。
我并不是很有经验(比方说我刚从颤振开始),任何涉及scrollControllers和.jumpTo的解决方案,我都无法工作。
现在,我已经想出了一个解决方案,该解决方案涉及分页,以便在可见的Viewport之外没有任何元素。但是,如果除了分页之外,还有其他解决方案,请告诉我。
@override
initState() {
super.initState();
Size size = WidgetsBinding.instance.window.physicalSize;
screenWidth = size.width;
screenHeight = size.height;
pageIndex = 0;
headerHeight = 330;
lineHeight = 70;
if (screenHeight == null || screenHeight < (headerHeight + 2*lineHeight) ) {
screenHeight = (headerHeight + 2*lineHeight);
}
double tmpCalc = (screenHeight - headerHeight ) / lineHeight ;
maxLines = tmpCalc.toInt();
datafields = getDataFields();
}发布于 2022-06-29 20:57:16
关于刷新,您肯定应该使用setState来存储所选的单选按钮。
检查下面的屏幕记录一个原型和在DartPad上的现场演示。这就是你所期待的吗?

以下是原型代码:
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
debugShowCheckedModeBanner: false,
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
State<MyHomePage> createState() => _MyHomePageState();
}
final groups = [
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2],
[1, 2, 3],
[1, 2, 3],
[1, 2],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2],
[1, 2],
[1, 2],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2],
[1, 2],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2],
[1, 2],
[1, 2],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2],
].asMap();
class _MyHomePageState extends State<MyHomePage> {
final selectedRadiosByGroup = <int, int>{};
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Expanded(
child: ListView.separated(
itemCount: groups.length,
separatorBuilder: (context, _) => const Divider(
height: 2,
),
itemBuilder: ((context, groupIndex) {
final group = groups[groupIndex]!;
return Row(
children: [
for (final entry in group)
Row(
children: [
Radio(
value: entry,
groupValue: selectedRadiosByGroup[groupIndex],
onChanged: (value) => setState(
() => selectedRadiosByGroup[groupIndex] = entry),
),
Text('$groupIndex:$entry'),
],
)
],
);
}),
),
),
),
);
}
}https://stackoverflow.com/questions/72770229
复制相似问题