首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Riverpod Notifier创建drowdownbutton按钮?

如何使用Riverpod Notifier创建drowdownbutton按钮?
EN

Stack Overflow用户
提问于 2021-02-28 21:52:04
回答 1查看 336关注 0票数 0

我想在Riverpod中用changenotifierProvider创建DropDownButton,但是我不能很好地编写我的代码。请帮帮我。我想,我只是写了“watch”方法,但我不知道如何阅读它。所以,它应该显示所选择的项目,也应该是与provider.Category更新。

我的DropDownButton代码如下:

代码语言:javascript
复制
Widget dropdownButton(BuildContext context,watch) {
    String constantValue = "League Of Legends";
      final postProvider = ChangeNotifierProvider<PostProvider>((ref) => PostProvider());
      
      final provider = watch(postProvider);
      return Consumer(
        builder: (context, watch, _) {
       
          
      return DropdownButton(
            value: provider.postCategory ?? constantValue,
            
            onChanged: (newValue) {
               provider.postCategory = newValue;
              
            },
            items: <String>["League Of Legends", "Steam", "Csgo"]
                .map<DropdownMenuItem<String>>((String value) {
              return DropdownMenuItem<String>(
                onTap: () => value,
                value: value ?? constantValue,
                child: Text(value ?? constantValue),
              );
            }).toList());
        },
              
      );
    
  }

这是我的DropDownButton图像:(当我选择列表中的任何项目时,它都不能正常工作。它总是选择第一个(它选择“英雄联盟”)。

我选择steam但卡片目录显示为英雄联盟

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-02 00:47:01

代码语言:javascript
复制
final postProvider =
    ChangeNotifierProvider<PostProvider>((ref) => PostProvider());

class PostProvider extends ChangeNotifier {
  String _postCategory;

  String get postCategory => _postCategory;

  categoryOnChanged(String value) {
    if (value.isEmpty) {
      return _postCategory;
    }
    _postCategory = value;
    print(_postCategory);
    return notifyListeners();
  }
}

class DropDownPage extends StatefulWidget {
  @override
  _DropDownPageState createState() => _DropDownPageState();
}

class _DropDownPageState extends State<DropDownPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Dropdown Riverpod issue"),
      ),
      body: Container(
        height: MediaQuery.of(context).size.height,
        width: MediaQuery.of(context).size.width,
        child: Center(
          child: _DropDownWidgetConsumer(),
        ),
      ),
    );
  }
}

class _DropDownWidgetConsumer extends ConsumerWidget {
  @override
  Widget build(BuildContext context, ScopedReader watch) {
    final category = watch(postProvider).postCategory;
    return DropdownButton(
      hint: Text("Choose category"),
      value: category,
      items: <String>["League Of Legends", "Steam", "Csgo"]
          .map((e) => DropdownMenuItem<String>(
        
                onTap: () => e,
                value: e ?? category,
                child: Text(e ?? "$category"),
              ))
          .toList(),
      onChanged: (value) {
        context.read(postProvider).categoryOnChanged(value);
      },
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66409794

复制
相关文章

相似问题

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