微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Riverpod Notifier 创建下拉按钮?

如何解决如何使用 Riverpod Notifier 创建下拉按钮?

我想在 Riverpod 中使用 changenotifierProvider 创建 DropDownButton,但我不能很好地编写我的代码。请帮我。我想,我只是写了 'watch' 方法,但我不知道如何阅读它。因此,它应该显示被选择的项目,并且应该使用 provider.Category 进行更新。

我的 DropDownButton 代码在这里

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 图片:(当我选择列表中的任何项目时,它无法正常工作。它总是选择第一个(它选择“英雄联盟”)。

enter image description here

我选择了 Steam 但卡片类别显示英雄联盟

I select steam but,

解决方法

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);
      },);
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。