首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >点击后刷新颤振无线电按钮小部件

点击后刷新颤振无线电按钮小部件
EN

Stack Overflow用户
提问于 2022-06-27 10:01:44
回答 1查看 88关注 0票数 0

我正在为windows开发一个应用程序。我制作了一个屏幕,其中显示了一个由节目生成的无线电小部件列表(大约40个无线电组,每个组中有2个或3个无线电部件)。所有的东西在点击时都正常工作。这个值被更新了,但是无线电按钮并没有改变它的外观(它没有显示它被选中),这是直到我滚动无线电组从视线之外并滚动回可见(可能是因为它是在那个时候重建)。

有什么暗示吗?

-更新

很抱歉一开始没有发布任何代码,我描述的问题似乎并不是需要这样做的问题。

到目前为止,这里有许多关于刷新的问题和解决方案,这就是让它工作的问题和解决方案。

代码语言:javascript
复制
setState(() {
    FutureToBeRefreshed = functionToGetData;
}

只有一个缺点。在setState之后,整个屏幕会被刷新,并在第一个位置启动,当您更改在开始时屏幕外的一个无线电按钮的值时,这是很烦人的。

我并不是很有经验(比方说我刚从颤振开始),任何涉及scrollControllers和.jumpTo的解决方案,我都无法工作。

现在,我已经想出了一个解决方案,该解决方案涉及分页,以便在可见的Viewport之外没有任何元素。但是,如果除了分页之外,还有其他解决方案,请告诉我。

代码语言:javascript
复制
  @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();
  }
EN

回答 1

Stack Overflow用户

发布于 2022-06-29 20:57:16

如果使用ListView而不是视口,则不需要分页。

关于刷新,您肯定应该使用setState来存储所选的单选按钮

检查下面的屏幕记录一个原型和在DartPad上的现场演示。这就是你所期待的吗?

以下是原型代码:

代码语言:javascript
复制
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'),
                      ],
                    )
                ],
              );
            }),
          ),
        ),
      ),
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72770229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档