Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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
对话框关闭后刷新Listview内容_Listview_Flutter_Future - Fatal编程技术网

对话框关闭后刷新Listview内容

对话框关闭后刷新Listview内容,listview,flutter,future,Listview,Flutter,Future,你好,伙计们,我是个新手,在问任何问题之前,我都在努力学习, 我有这种情况我有浮动操作按钮,当我选择一些选项并单击保存更改时,它会显示一个对话框。它应该关闭对话框并刷新列表视图取决于我的选择这里是我的代码 一切工作都可以找到它的调用getData(),但UI中没有任何更改 import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import '

你好,伙计们,我是个新手,在问任何问题之前,我都在努力学习, 我有这种情况我有浮动操作按钮,当我选择一些选项并单击保存更改时,它会显示一个对话框。它应该关闭对话框并刷新列表视图取决于我的选择这里是我的代码 一切工作都可以找到它的调用
getData()
,但UI中没有任何更改

import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:grouped_buttons/grouped_buttons.dart';
import 'package:test/models/Player.dart';
import 'package:test/partials/PlayerCard.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:connectivity/connectivity.dart';
import 'package:rflutter_alert/rflutter_alert.dart';
import 'package:shared_preferences/shared_preferences.dart';

class MyAppScreen extends StatefulWidget {
  @override
  _MyAppScreenState createState() => new _MyAppScreenState();
}

class _MyAppScreenState extends State<MyAppScreen> {
  List<Player> _players = [];
  String _filters ;
  String filters ;
  String sort ;
  String _sort;

  int _page = 1;
  final String _token = "xxxxxxxxxxxxxxxxxxxxxxxx";
  ScrollController _scrollController = new ScrollController();
  Future<Null> getData() async {

    isConnected().then((intenet) async{
      if (intenet != null && intenet) {
        var url = 'https://example.com/api';
        final responseData = await http.post(
            url,
            body: {'token':_token,'page': "$_page",'order': filters,'sort': sort},
            headers: {
          "Accept": "application/json"
        });
        //print("$url/$filters/$sort");
        if(responseData.statusCode == 200){
          final data = jsonDecode(responseData.body);
          setState(() {
            for(Map i in data['data']){
              _players.add(Player.fromJson(i));
            }
          });
        }
        _page++;
      }
      // No-Internet Case
    });
  }
  @override
  void initState() {
    super.initState();
    _getDatafromSF();
    getData();
    _scrollController.addListener(() {
      if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent) {
        getData();
      }
    });
  }
  @override
  void dispose() {
    super.dispose();
    _scrollController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      extendBody: true,
      floatingActionButtonLocation: FloatingActionButtonLocation.endDocked,
      floatingActionButton: FloatingActionButton(onPressed: _showFilter,elevation: 8, child: Icon(FontAwesomeIcons.filter),),
      bottomNavigationBar: BottomAppBar(
        shape: CircularNotchedRectangle(),
        child: Container(
          height: 20.0,
          color: Colors.white,
        ),
      ),
      body: Container(
        child: ListView.builder(
          controller: _scrollController,
          itemBuilder: (context, i){
            if(i == _players.length - 1){
              return loadingView();
            }
            final nDataList = _players[i];
            return PlayerCard(nDataList);
            if (i < _players.length){
              final nDataList = _players[i];
              return PlayerCard(nDataList);
            }else{
              getData();
              return loadingView();
            }
          },
          itemCount: _players.length,
        ),
      ),
    );
  }

  // method defined to check internet connectivity
  Future<bool> isConnected() async {
    var connectivityResult = await (Connectivity().checkConnectivity());
    if (connectivityResult == ConnectivityResult.mobile) {
      return true;
    } else if (connectivityResult == ConnectivityResult.wifi) {
      return true;
    }
    return false;
  }


  Future<bool> _showFilter() async{
    return Alert(
        context: context,
        title: "Filter",
        content: Column(
          children: <Widget>[
            Text("Order By",style: TextStyle(color: Colors.black54,fontSize: 16),),
            Divider(height: 3.0, color: Colors.black),
            RadioButtonGroup(
              orientation: GroupedButtonsOrientation.VERTICAL,
              activeColor: Colors.blue[800],
              onSelected: (String selected) => setState(() {
                _filters = selected;
                switch(_filters){
                  case "Platinum": filters = 'platinum';break;
                  case "Name": filters = 'name';break;
                  case "Total Trophies": filters = 'total';break;
                  default: filters = 'platinum';break;
                }
                print(filters);
              }),
              labels: <String>[
                "Platinum",
                "Name",
                "Total Trophies",
              ],
              labelStyle: TextStyle(fontSize: 14),
              picked: _filters,
            ),
            Divider(height: 5.0, color: Colors.black),
            Text("Sort By",style: TextStyle(color: Colors.black54,fontSize: 16),),
            new Padding(
              padding: new EdgeInsets.all(5.0),
            ),
            RadioButtonGroup(
              orientation: GroupedButtonsOrientation.VERTICAL,
              activeColor: Colors.blue[800],
              onSelected: (String selected) => setState(() {
                _sort = selected;
                _sort == "Ascending" ? sort = 'asc' : sort = 'desc';
                print(sort);
              }),
              labels: <String>[
                "Ascending",
                "Descending",
              ],
              labelStyle: TextStyle(fontSize: 14),
              picked: _sort,
            )
          ],
        ),
        buttons: [
          DialogButton(
            onPressed: _savetoSF,
            child: Text(
              "Save Changes",
              style: TextStyle(color: Colors.white, fontSize: 20),
            ),
          )
        ]).show();
  }


  _savetoSF() async{
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setString('order', filters);
    prefs.setString('sort', sort);
    prefs.setString('orderstring', _filters);
    prefs.setString('sortstring', _sort);
    Navigator.pop(context);
    getData();
  }

  void _getDatafromSF() async{
    SharedPreferences prefs = await SharedPreferences.getInstance();
    //Return String
    String myorder = prefs.getString('order')?? "platinum";
    String mysort = prefs.getString('sort')?? "desc";
    String filterString = prefs.getString('orderstring')?? "Platinum";
    String sortString = prefs.getString('sortstring')?? "Descending";
    filters = myorder;
    _filters = filterString;
    sort = mysort;
    _sort = sortString;
  }
}


Widget loadingView() => Center(
  child: CircularProgressIndicator(
      backgroundColor: Colors.lightBlueAccent,
      strokeWidth: 10.0
  ),
);

导入“包装:颤振/材料.省道”;
导入“package:font_awesome_flatter/font_awesome_flatter.dart”;
导入“package:grouped_buttons/grouped_buttons.dart”;
导入“包:test/models/Player.dart”;
导入“package:test/partials/PlayerCard.dart”;
导入“dart:async”;
将“package:http/http.dart”导入为http;
导入“dart:convert”;
导入“package:connectivity/connectivity.dart”;
导入“package:rflutter_alert/rflutter_alert.dart”;
导入“package:shared_preferences/shared_preferences.dart”;
类MyAppScreen扩展了StatefulWidget{
@凌驾
_MyAppScreenState createState()=>new_MyAppScreenState();
}
类_MyAppScreenState扩展状态{
列出_玩家=[];
字符串过滤器;
字符串过滤器;
字符串排序;
字符串排序;
int_page=1;
最终字符串_token=“xxxxxxxxxxxxxxxxxxxxxxxx”;
ScrollController_ScrollController=新的ScrollController();
Future getData()异步{
isConnected()。然后((intenet)异步{
if(intenet!=null&&intenet){
var url='1〕https://example.com/api';
最终响应数据=等待http.post(
网址,
正文:{'token':_-token,'page':“$_-page”,'order':过滤器,'sort':sort},
标题:{
“接受”:“应用程序/json”
});
//打印(“$url/$filters/$sort”);
如果(responseData.statusCode==200){
最终数据=jsonDecode(responseData.body);
设置状态(){
用于(数据['data']中的地图i){
_players.add(Player.fromJson(i));
}
});
}
_page++;
}
//没有互联网案例
});
}
@凌驾
void initState(){
super.initState();
_getDatafromSF();
getData();
_scrollController.addListener((){
if(_scrollController.position.pixels==_scrollController.position.maxScrollExtent){
getData();
}
});
}
@凌驾
无效处置(){
super.dispose();
_scrollController.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
扩展体:是的,
floatingActionButtonLocation:floatingActionButtonLocation.endDocked,
floatingActionButton:floatingActionButton(按下时:_showFilter,标高:8,子项:图标(FontAwesomeIcons.filter)),
bottomNavigationBar:BottomAppBar(
形状:CircularNotchedRectangle(),
子:容器(
身高:20.0,
颜色:颜色,白色,
),
),
主体:容器(
子项:ListView.builder(
控制器:\ u滚动控制器,
itemBuilder:(上下文,i){
如果(i==\u.length-1){
返回loadingView();
}
最终数据列表=_玩家[i];
返回玩家卡(nDalist);
如果(i<\u玩家长度){
最终数据列表=_玩家[i];
返回玩家卡(nDalist);
}否则{
getData();
返回loadingView();
}
},
itemCount:_players.length,
),
),
);
}
//已定义用于检查internet连接的方法
Future isConnected()异步{
var connectivityResult=await(Connectivity().checkConnectivity());
if(connectivityResult==connectivityResult.mobile){
返回true;
}else if(connectivityResult==connectivityResult.wifi){
返回true;
}
返回false;
}
Future\u showFilter()异步{
返回警报(
上下文:上下文,
标题:“过滤器”,
内容:专栏(
儿童:[
文本(“订购人”,样式:TextStyle(颜色:Colors.black54,字体大小:16),),
分隔器(高度:3.0,颜色:颜色。黑色),
无线电按钮组(
方向:GroupedButtonOrientation.VERTICAL,
activeColor:Colors.blue[800],
onSelected:(选择字符串)=>setState((){
_过滤器=已选择;
开关(_过滤器){
案例“白金”:过滤器=‘白金’;中断;
大小写“Name”:过滤器='Name';中断;
案例“总奖杯”:过滤器=‘总’;中断;
默认值:过滤器='platinum';中断;
}
打印(过滤器);
}),
标签:[
“白金”,
“姓名”,
“总奖杯”,
],
标签样式:文本样式(字体大小:14),
选择:_过滤器,
),
分隔器(高度:5.0,颜色:颜色。黑色),
文本(“排序依据”,样式:TextStyle(颜色:Colors.black54,fontSize:16),),
新填料(
填充:新的边缘设置。全部(5.0),
),
无线电按钮组(
方向:GroupedButtonOrientation.VERTICAL,
activeColor:Colors.blue[800],
onSelected:(选择字符串)=>setState((){
_排序=选中;
_排序==“升序”?排序=“asc”:排序=“desc”;
打印(排序);
}),
标签:[
“上升”,
“下降”,
],
标签样式:文本样式(字体大小:14),
挑选:_排序,
)
],
),
按钮:[
对话框按钮(
按下时:_savetoSF,
子:文本(
“保存更改”,
样式:TextStyle(颜色:Colors.white,字体大小:20),
),
)
]).show();
}
_萨维托斯
    return showDialog(
      context: context,
      builder: (context) {
        String contentText = "Content of Dialog";
        return StatefulBuilder(
          builder: (context, setState) {
            return AlertDialog(
              title: Text("Filter"),
              content: _buildDialogContent,
              actions: <Widget>[
                FlatButton(
                  onPressed: () => Navigator.pop(context),
                  child: Text("Cancel"),
                ),
                DialogButton(
                  onPressed: _savetoSF,
                  child: Text(
                    "Save Changes",
                    style: TextStyle(color: Colors.white, fontSize: 16),
                  ),
                ),
              ],
            );
          },
        );
      },
    );