Flutter-按名称查找卡片 [英] Flutter - Find cards by names

查看:61
本文介绍了Flutter-按名称查找卡片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新手,我有一个程序可以显示几张纸牌,而且我对如何制作纸牌查找器有疑问,我正在使用以下代码:

  _card(字符串词组,){返回SliverToBoxAdapter(子卡:margin:EdgeInsets.only(right:50,left:50,top:20),子:InkWell(onTap :(){},child:Column(children:< Widget> [SizedBox(高度:15.0),填充(填充:EdgeInsets.only(左:15,右:15),子代:文字(短语,样式:TextStyle(fontFamily:"Circular",fontSize:17.0,颜色:Colors.grey [800]),),),SizedBox(高度:15.0),]),),),);}  

然后我用它来制作各种卡片:

 返回脚手架(身体:堆栈(孩子:[CustomScrollView(物理学:BouncingScrollPhysics(),碎片:< Widget> [_card('Abrir'),_card('Alzar'),_card('Aprender'),_card('Caer'),_card('Cerrar'),_card('Cocinar'),_card('Correr'),_card('Cortar'),_card('Enseñar'),_card('Estar'),_card('Hay'),_card('Levantarse'),_card('Mirar'),_card('Oler'),_card('Saltar'),_card('Sentar'),_card('Ser'),_card('Tocar'),_card('Tomar'),_card('Tropezar'),]),]),);  

非常感谢您的帮助

解决方案

以下是使用以下解决方案:

  • 完整的源代码,易于复制粘贴

      import'package:flutter/material.dart';导入'package:flutter_hooks/flutter_hooks.dart';导入'package:fuzzy/fuzzy.dart';导入'package:hooks_riverpod/hooks_riverpod.dart';void main(){runApp(ProviderScope(子:MaterialApp(debugShowCheckedModeBanner:否,标题:"Flutter演示",主页:HomePage(),),),);}类HomePage扩展了HookWidget {@override窗口小部件build(BuildContext context){最终短语= useProvider(filteredPhrasesProvider);返回脚手架(正文:ListView(物理:BouncingScrollPhysics(),孩子们: [文本域(自动对焦:是的,textAlignVertical:TextAlignVertical.center,装饰:InputDecoration(prefixIcon:图标(Icons.search),hintText:'搜索',),onChanged :(值)=>context.read(searchTermsProvider).state =值,),... phrases.map((phrase)=> _Card(phrase:短语)).toList(),],),);}}_Card类扩展了StatelessWidget {最终的字符串短语;const _Card({关键这个短语}):super(key:key);@override窗口小部件build(BuildContext context){退货卡(边距:EdgeInsets.all(10.0),子:InkWell(onTap :(){},孩子:填充(填充:EdgeInsets.all(15.0),子代:文字(短语,样式:TextStyle(fontFamily:"Circular",fontSize:17.0,颜色:Colors.grey [800],),),),),);}}final searchTermsProvider = StateProvider< String>(((ref)=>'');最终短语Provider = Provider< List< String>>((参考)=>['Abrir','Alzar','Aprender','Caer','Cerrar','Cocinar','Correr','Cortar','Enseñar',"Estar",'干草',"Levantarse",'Mirar','Oler','Saltar','Sentar','Ser','Tocar','Tomar','特罗佩萨尔',],);最后的filteredPhrasesProvider =提供者< List< String>>(((ref){最终短语= ref.watch(phrasesProvider);最终searchTerms = ref.watch(searchTermsProvider).state;返回searchTerms.isEmpty?词组:Fuzzy< String>(短语,选项:FuzzyOptions(阈值:.4)).search(searchTerms).map((结果)=> result.item).toList();}); 

    I am new to flutter and I have a program that shows several cards and I have a question about how to make a card finder, I am using this code:

      _card(
        String phrase,
      ) {
        return SliverToBoxAdapter(
          child: Card(
            margin: EdgeInsets.only(right: 50, left: 50, top: 20),
            child: InkWell(
              onTap: () {},
              child: Column(children: <Widget>[
                SizedBox(height: 15.0),
                Padding(
                  padding: EdgeInsets.only(left: 15, right: 15),
                  child: Text(
                    phrase,
                    style: TextStyle(
                        fontFamily: 'Circular',
                        fontSize: 17.0,
                        color: Colors.grey[800]),
                  ),
                ),
                SizedBox(height: 15.0),
              ]),
            ),
          ),
        );
      }

    and I use this to make the various cards:

    return Scaffold(
          body: Stack(children: [
            CustomScrollView(physics: BouncingScrollPhysics(), slivers: <Widget>[
              _card('Abrir'),
              _card('Alzar'),
              _card('Aprender'),
              _card('Caer'),
              _card('Cerrar'),
              _card('Cocinar'),
              _card('Correr'),
              _card('Cortar'),
              _card('Enseñar'),
              _card('Estar'),
              _card('Hay'),
              _card('Levantarse'),
              _card('Mirar'),
              _card('Oler'),
              _card('Saltar'),
              _card('Sentar'),
              _card('Ser'),
              _card('Tocar'),
              _card('Tomar'),
              _card('Tropezar'),
            
            ]),
          
          ]),
        );

    I really appreciate any help, thanks

    解决方案

    Here is a solution using:

    Full source code for easy copy-paste

    import 'package:flutter/material.dart';
    import 'package:flutter_hooks/flutter_hooks.dart';
    import 'package:fuzzy/fuzzy.dart';
    import 'package:hooks_riverpod/hooks_riverpod.dart';
    
    void main() {
      runApp(
        ProviderScope(
          child: MaterialApp(
            debugShowCheckedModeBanner: false,
            title: 'Flutter Demo',
            home: HomePage(),
          ),
        ),
      );
    }
    
    class HomePage extends HookWidget {
      @override
      Widget build(BuildContext context) {
        final phrases = useProvider(filteredPhrasesProvider);
        return Scaffold(
          body: ListView(
            physics: BouncingScrollPhysics(),
            children: [
              TextField(
                autofocus: true,
                textAlignVertical: TextAlignVertical.center,
                decoration: InputDecoration(
                  prefixIcon: Icon(Icons.search),
                  hintText: 'Search',
                ),
                onChanged: (value) =>
                    context.read(searchTermsProvider).state = value,
              ),
              ...phrases.map((phrase) => _Card(phrase: phrase)).toList(),
            ],
          ),
        );
      }
    }
    
    class _Card extends StatelessWidget {
      final String phrase;
    
      const _Card({
        Key key,
        this.phrase,
      }) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return Card(
          margin: EdgeInsets.all(10.0),
          child: InkWell(
            onTap: () {},
            child: Padding(
              padding: EdgeInsets.all(15.0),
              child: Text(
                phrase,
                style: TextStyle(
                  fontFamily: 'Circular',
                  fontSize: 17.0,
                  color: Colors.grey[800],
                ),
              ),
            ),
          ),
        );
      }
    }
    
    final searchTermsProvider = StateProvider<String>((ref) => '');
    
    final phrasesProvider = Provider<List<String>>(
      (ref) => [
        'Abrir',
        'Alzar',
        'Aprender',
        'Caer',
        'Cerrar',
        'Cocinar',
        'Correr',
        'Cortar',
        'Enseñar',
        'Estar',
        'Hay',
        'Levantarse',
        'Mirar',
        'Oler',
        'Saltar',
        'Sentar',
        'Ser',
        'Tocar',
        'Tomar',
        'Tropezar',
      ],
    );
    
    final filteredPhrasesProvider = Provider<List<String>>((ref) {
      final phrases = ref.watch(phrasesProvider);
      final searchTerms = ref.watch(searchTermsProvider).state;
      return searchTerms.isEmpty
          ? phrases
          : Fuzzy<String>(phrases, options: FuzzyOptions(threshold: .4))
              .search(searchTerms)
              .map((result) => result.item)
              .toList();
    });
    

    这篇关于Flutter-按名称查找卡片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆