Как обновить sh главную страницу после открытия страницы из меню ящика android с помощью Flutter - PullRequest
0 голосов
/ 26 апреля 2020

У меня проблема, у меня есть основной вид деятельности, где я загрузил несколько классов виджетов, пока все хорошо. Теперь я хочу обновить sh главную страницу после закрытия страницы, которая была запущена в меню Drawer.

Это работает, если кнопка находится непосредственно на главной странице, но если действие запускается из меню «Ящик», он не работает.

Пример экрана или он работает очень хорошо enter image description here

Вариант 2 Это должно выглядеть следующим образом. но это не работает, когда я вызываю страницу из меню Drawer enter image description here

ссылка: Как go вернуть назад и обновить sh предыдущую страницу во флаттере? Как обновить sh страницу после нажатия кнопки возврата

У кого-нибудь есть идея. Вот код, который нужно использовать для варианта 1 с кнопкой на главной странице:

new RaisedButton(
          onPressed: ()=>
              Navigator.of(context).push(new MaterialPageRoute(builder: (_)=>new PageHomeContent()),)
                  .then((val)=>{getRefreshRequests()}),
          child: Text('Refresh', style: TextStyle(color: Colors.white), ), color: Colors.purple,
          elevation: 2.0,
        ),

enter image description here

Важно знать, что я создал класс для меню Drawer здесь. это немного долго, но я вам необходим

final Color primaryColor = Colors.white;
final Color activeColor = Colors.grey.shade800;
final Color dividerColor = Colors.grey.shade600;

class BuildDrawer extends StatefulWidget{
  @override
  _BuildDrawer createState() => _BuildDrawer();
}

class _BuildDrawer extends State<BuildDrawer> {
  //region [ ATTRIUTS ]
  final String image = 'https://avatars2.githubusercontent.com/u/3463865?s=460&u=c0fab43e4b105e9745dc3b5cf61e21e79c5406c2&v=4';

  List<dynamic> menuGroupList = [];
  Future<List<dynamic>> _futureMenuGroupList;
  bool _infiniteStop;

  //MenuItemGroupModel menuItemGroup = new MenuItemGroupModel();
  List<dynamic> menuItemList = [];
  Future<List<dynamic>> _futureMenuItemList;
  //Future<MenuItemGroupModel> _futureMenuItemGroup;
  bool _infiniteItemStop;

  //endregion

  @override
  void initState() {
    _futureMenuGroupList = fetchMenuWPList();
    _infiniteStop = false;
  }

  @override
  Widget build(BuildContext context) {
    return ClipPath(
      clipper: OvalRightBorderClipper(),
      child: Drawer(
        child: Container(
          padding: const EdgeInsets.only(left: 16.0, right: 40),
          decoration: BoxDecoration(
              color: primaryColor,
              boxShadow: [BoxShadow(color: Colors.black45)]),
          width: 300,
          child: SafeArea(
            child: SingleChildScrollView(
              child: Column(
                children: <Widget>[
                  Container(
                    padding: const EdgeInsets.symmetric(vertical: 5.0),
                    child: InkWell(
                      onTap: () {
                        //Navigator.push( context, MaterialPageRoute(builder: (context) => PageHomeContent(),),);
                        Navigator.of(context).push(new MaterialPageRoute(builder: (_)=>new PageHomeContent()),)
                            .then((val)=>{ new MainPage() });
                      },
                      child:
                      Column(
                        children: <Widget>[
                          Row(
                              children: [
                                Icon(
                                  Icons.format_list_bulleted,
                                  color: activeColor,
                                ),
                                SizedBox(width: 10.0),
                                Text("Home Content",  ),
                                Spacer(),
                              ]
                          ),
                        ],
                      ),

                    ),
                  ),
                  Divider(
                    color: dividerColor,
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}
//end Class

//region [ MENU ITEM PAGE ]

//endregion

Класс главной страницы [MainPage]

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

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

class _MainPageState extends State<WPMainPage> {

  //region [ ATTRIBUTS ]
  List<dynamic> featuredArticles = [];
  List<dynamic> latestArticles = [];
  List<dynamic> pageList = [];
  List<dynamic> menuGroupList = [];
  List<dynamic> categoryHomeList = [];

  Future<List<dynamic>> _futurePageList;
  Future<List<dynamic>> _futureFeaturedArticles;
  Future<List<dynamic>> _futureLastestArticles;
  Widget widgetCategoryBuilder=new Container();

  final _categoryRepository = CategoryRepository();

  ScrollController _controller;
  int page = 1;
  bool _showLoadingPage = true;
  bool _showLoadingCategoryHome = true;
  bool _infiniteStop;
  double heightNoInternet = 280.0;

  // Firebase Cloud Messeging setup
  final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
  //endregion

  @override
  void initState() {
    super.initState();
    _futureFeaturedArticles = fetchFeaturedArticles(1);
    _futureLastestArticles = fetchLatestArticles(1);
    _futurePageList = fetchPageList();
    getCategoriesOnLocal();

    _controller = ScrollController(initialScrollOffset: 0.0, keepScrollOffset: true);
    _controller.addListener(_scrollListener);

    _infiniteStop = false;
  }

  @override
  void dispose() {
    super.dispose();
    _controller.dispose();
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(Constant.APP_NAME_LONG),
          actions: getActionAppBarButton(context: context),
        ),
        drawer: BuildDrawer(),
        body: Container(
          decoration: BoxDecoration(color: Colors.white70),
          child: SingleChildScrollView(
            controller: _controller,
            scrollDirection: Axis.vertical,
            child: Column(
                children:
                getWidgetList()
            ),
          ),
        ));
  }


  getRefreshRequests() async {
    getCategoriesOnLocal();
    //Tools.mySnackBar(context, ' m s g TEST 1 ');
  }

  getWidgetList() {
    List<Widget> itemList = new List<Widget>();

    itemList.add(
        new Column(
          children: <Widget>[

            new RaisedButton(
              onPressed: ()=>
                  Navigator.of(context).push(new MaterialPageRoute(builder: (_)=>new PageHomeContent()),)
                      .then((val)=>{ getRefreshRequests() }),
              child: Text('Refresh', style: TextStyle(color: Colors.white), ), color: Colors.purple,
              elevation: 2.0,
            ),

          ],
        )

    );

    itemList.add(
        getPagebuilderList(isShowTitle: false)
    );

    itemList.add(
        featuredPostBuildSlider(_futureFeaturedArticles)
    );

    /*itemList.add(
      featuredPost(_futureFeaturedArticles),
    );*/
    itemList.add(
        widgetCategoryBuilder
    );


    itemList.add(
        latestPosts(_futureLastestArticles)
    );

    return itemList;
  }

  _scrollListener() {
    var isEnd = _controller.offset >= _controller.position.maxScrollExtent &&
        !_controller.position.outOfRange;
    if (isEnd) {
      setState(() {
        page += 1;
        _futureLastestArticles = fetchLatestArticles(page);
      });
    }
  }

  //region [ ALL POST | RECENTS POST ]
  //endregion

  //region [ POST FEATURED | Swiper ]
  //endregion

  //region [ PAGES ]
  //endregion

  //region [ CATEGORIES LOCAL --> ON LIGNE ]
  void getCategoriesOnLocal() async {
    try {
      await _categoryRepository.getCategories().then((itemList) {
        if (itemList != null) {
          setState(() {
            categoryHomeList = itemList;
          });
          getCategoryBuilder();
        }
      });
    } catch (e) {
      Tools.println("Error: getCategoriesOnLocal: $e");
    }
  }
  getCategoryBuilder() {
    List<Widget> itemWidgetList=[];
    if(  _showLoadingCategoryHome) {
      if (categoryHomeList.length > 0) {
        for (Category category in categoryHomeList) {
          if (category.count > 0) {
            itemWidgetList.add(
                getItemArticle(category: category)
            );
          }
        }
        widgetCategoryBuilder=  Column( children: itemWidgetList );
      } else {
        widgetCategoryBuilder=  Container();
      }
    } else {
      widgetCategoryBuilder= Container();
    }
    setState(() {
      widgetCategoryBuilder = widgetCategoryBuilder;
    });
    return widgetCategoryBuilder;
  }
  Widget getItemArticle({Category category}) {
    return
      Column(
        children: <Widget>[
          Padding(
            padding: EdgeInsets.only(left: 8.0, right: 8.0),
            child: Row(
              children: <Widget>[
                Text('${category.name}',
                  style: homeTitleTextStyle,
                  textAlign: TextAlign.left,),
                Spacer(),
                InkWell(
                  onTap: (){
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (context) => CategoryArticles(category.id, category.name),
                      ),
                    );
                  },
                  child:  Text('See More',
                    textAlign: TextAlign.right,
                    style: TextStyle(color: Colors.red),),
                ),

              ],),
          ),
          new CategoryHomeBuilder( categorieId: category.id),
        ],
      );
  }
//endregion

}

Есть ли у кого-нибудь предложение.

Спасибо за ваш помощь

1 Ответ

0 голосов
/ 26 апреля 2020

В ожидании лучшего ответа.

Я заменил класс BuildDrawer на метод getBuildDrawer() в основном классе.

И он работает очень хорошо, но я бы предпочел поместите его в отдельный класс, чтобы я мог использовать его на другой странице ...

getBuildDrawer() {
    return ClipPath(
      clipper: OvalRightBorderClipper(),
      child: Drawer(
        child: Container(
          padding: const EdgeInsets.only(left: 16.0, right: 40),
          decoration: BoxDecoration(
              color: primaryColor,
              boxShadow: [BoxShadow(color: Colors.black45)]),
          width: 300,
          child: SafeArea(
            child: SingleChildScrollView(
              child: Column(
                children: <Widget>[
                  Container(
                    padding: const EdgeInsets.symmetric(vertical: 5.0),
                    child: InkWell(
                      onTap: () {
                        Navigator.of(context).pop();
      Navigator.of(context).push(new MaterialPageRoute(builder: (_)=>new PageHomeContent()),)
          .then((val)=>{ getRefreshRequests() });
                      },
                      child:
                      Column(
                        children: <Widget>[
                          Row(
                              children: [
                                Icon(
                                  Icons.format_list_bulleted,
                                  color: activeColor,
                                ),
                                SizedBox(width: 10.0),
                                Text("Home Content",  ),
                                Spacer(),
                              ]
                          ),
                        ],
                      ),

                    ),
                  ),
                  Divider(
                    color: dividerColor,
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...