Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何保存搜索栏中的搜索项,并在Flatter中显示SharedReference中保存的列表_Flutter_Sharedpreferences - Fatal编程技术网

Flutter 如何保存搜索栏中的搜索项,并在Flatter中显示SharedReference中保存的列表

Flutter 如何保存搜索栏中的搜索项,并在Flatter中显示SharedReference中保存的列表,flutter,sharedpreferences,Flutter,Sharedpreferences,我试图将搜索项从searchbar保存到SharedReference,并希望在其他页面中显示搜索列表列表,但无法实现。下面是我如何从SharedReference保存和检索它的代码 我已经更新了代码,请检查一下 更新 我有一个查询,我正在将其传递到url并直接获取列表 class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String ti

我试图将搜索项从searchbar保存到SharedReference,并希望在其他页面中显示搜索列表列表,但无法实现。下面是我如何从SharedReference保存和检索它的代码


我已经更新了代码,请检查一下

更新 我有一个查询,我正在将其传递到url并直接获取列表

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<Ayurwikilist> ayurwikilist = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        title: Text('Ayurwiki'),
        actions: <Widget>[
          new IconButton(
            icon: new Icon(Icons.search),
            onPressed: () {
              showSearch(
                  context: context,
                  delegate: CustomSearchDelegate(ayurwikilist));
            },
          ),
        ],
      ),
      body: _body(),
    );
  }

class CustomSearchDelegate extends SearchDelegate {
  List<Ayurwikilist> ayurwikilist = [];
  CustomSearchDelegate(this.ayurwikilist);

  Future<Ayurwikilist> fetchPost() async {
    final response = await http.get(
        'https://www.example.org/api.php?action=query&list=search&srsearch=$query&utf8=&format=json');
    print(
        'https://www.example.org/api.php?action=query&list=search&srsearch=$query&utf8=&format=json');
    return Ayurwikilist.fromJson(json.decode(response.body));
  }

  @override
  ThemeData appBarTheme(BuildContext context) {
    assert(context != null);
    final ThemeData theme = Theme.of(context);
    assert(theme != null);
    return theme;
  }

 @override
 List<Widget> buildActions(BuildContext context) {
   return [
     IconButton(
       icon: Icon(Icons.clear),
       onPressed: () async{
         query = '';
         SharedPreferences prefs = await SharedPreferences.getInstance();
         prefs.setString('name', "$query");
         print(query);
       },
     ),
   ];
 }

  @override
  Widget buildLeading(BuildContext context) {
    return IconButton(
      icon: Icon(Icons.arrow_back),
      onPressed: () {
        close(context, null);
      },
    );
  }

  @override
  Widget buildResults(BuildContext context) {
    return Container();
  }

  @override
  Widget buildSuggestions(BuildContext context) {
    return FutureBuilder<Ayurwikilist>(
      future: fetchPost(),
      builder: (BuildContext context, AsyncSnapshot snapshot) {
        if (snapshot.hasData) {
          print(snapshot.data.toString());
          return ListView.builder(
              itemCount: snapshot.data.query.search.length,
              itemBuilder: (BuildContext context, int index) {
                var title = snapshot.data.query.search[index].title;
                return GestureDetector(
                  onTap: () {
                    Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) => Detailpage(
                            snapshot.data.query.search[index].title,
                            // 'images/ayurwiki.png'
                          ),
                        ));
                  },
                  child: ListTile(
                    title: Text(title),
                  ),
                );
              });
        } else {
          return Center(
            child: Text(
              'Search in ayurwiki',
              style: TextStyle(color: Colors.grey, fontSize: 18),
            ),
          );
        }
      },
    );
  }
}

您应该在initState中调用getCredential()函数

class _HistoryState extends State<History> {

 var myName;

 initState(){
    super.initState();
    getCredential();
 }

 getCredential() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    var query = prefs.getString('query');
    setState(() {
      myName = query;
    });
    print('item : $query');
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title:Text('Rcently viewed item'),
      ),
      body: Container(
          decoration: new BoxDecoration(color: Colors.white),
          child: myName == null ? Text('No items') : Text('$myName'),
      ),
    );
  }
}
class\u历史状态扩展状态{
var myName;
initState(){
super.initState();
getCredential();
}
getCredential()异步{
SharedReferences prefs=等待SharedReferences.getInstance();
var query=prefs.getString('query');
设置状态(){
myName=查询;
});
打印('item:$query');
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:文本(“已浏览项目”),
),
主体:容器(
装饰:新盒子装饰(颜色:彩色。白色),
child:myName==null?Text('No items'):Text('$myName'),
),
);
}
}
更新:

Future<Ayurwikilist> fetchPost() async {
    query = 'something you need';
    final response = await http.get(
        'https://www.example.org/api.php?action=query&list=search&srsearch=$query&utf8=&format=json');
    print(
        'https://www.example.org/api.php?action=query&list=search&srsearch=$query&utf8=&format=json');
    prefs.setString('name', query);
    return Ayurwikilist.fromJson(json.decode(response.body));
  }
Future fetchPost()异步{
query='您需要的东西';
最终响应=等待http.get(
'https://www.example.org/api.php?action=query&list=search&srsearch=$query&utf8=&format=json');
印刷品(
'https://www.example.org/api.php?action=query&list=search&srsearch=$query&utf8=&format=json');
prefs.setString('name',query);
返回Ayurwikilist.fromJson(json.decode(response.body));
}

返回null因为您的查询在BuildAction函数中是null锁,在onPressed中,您可以设置query='',然后使用null查询设置SharedReference。为了获得SharedReference的搜索上下文,我应该在哪里声明。您的搜索小部件在哪里?我已经更新了我的代码。请检查一下。请参阅
getCredential() async {
   SharedPreferences prefs = await SharedPreferences.getInstance();
   var name = prefs.getStringList('name');
   setState(() {
     myName = name;
   });
   print('item : $name');
 }
class _HistoryState extends State<History> {

 var myName;

 initState(){
    super.initState();
    getCredential();
 }

 getCredential() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    var query = prefs.getString('query');
    setState(() {
      myName = query;
    });
    print('item : $query');
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title:Text('Rcently viewed item'),
      ),
      body: Container(
          decoration: new BoxDecoration(color: Colors.white),
          child: myName == null ? Text('No items') : Text('$myName'),
      ),
    );
  }
}
Future<Ayurwikilist> fetchPost() async {
    query = 'something you need';
    final response = await http.get(
        'https://www.example.org/api.php?action=query&list=search&srsearch=$query&utf8=&format=json');
    print(
        'https://www.example.org/api.php?action=query&list=search&srsearch=$query&utf8=&format=json');
    prefs.setString('name', query);
    return Ayurwikilist.fromJson(json.decode(response.body));
  }