当我按 Icon 键时,它的颜色只会改变几秒钟,然后在 Futter 中消失

When I tab on Icon, its color changes only for seconds and disappears in Futter

提问人:Badriya Haddad 提问时间:11/1/2022 更新时间:11/1/2022 访问量:44

问:

所以我在图标选项卡上改变颜色时遇到了问题 因此,当我点击图标时,它只会改变其探测器颜色,但会持续几秒钟,然后消失 我使用了 Provider,如下面的代码所示,我也使用了,但是当我点击一个图标时,它们也会发生变化。 那么我该如何处理这个问题呢? 这是代码,但我的问题仍然存在于图标按钮中,它将位于它下方isChecked = true

import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/container.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:note/Designs/Favorite_List.dart';
import 'package:note/Models/Favorite_List_Provider.dart';
import 'package:note/Models/Food_Models.dart';
import 'package:provider/provider.dart';

import '../Services/Fetch_Data.dart';
import 'Details_DesignOfDesignOne.dart';

class DesignOne extends StatefulWidget {
  const DesignOne({super.key, required this.Image, required this.Desc});
  final String Image;
  final String Desc;
  @override
  State<DesignOne> createState() => _DesignOneState();
}

class _DesignOneState extends State<DesignOne> {
  late Future<Food> futureFood;
  @override
  void initState() {
    super.initState();
    futureFood = fetchData(widget.Image, widget.Desc);
  }

  bool ischecked = false;
  @override
  Widget build(BuildContext context) {
    final provider = favorite.of(context);
    return Scaffold(
      backgroundColor: Colors.grey.shade200,
      appBar: AppBar(
        title: Text('Design one'),
        actions: [
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: InkWell(
              onTap: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => FavoriteScreen(Desc: '', Image: ''),
                  ),
                );
              },
              child: Icon(
                Icons.list,
                size: 30,
              ),
            ),
          )
        ],
      ),
      body: Consumer<favorite>(
          builder: (BuildContext context, favorite value, child) {
        return Center(
          child: FutureBuilder<Food>(
            future: fetchData(widget.Image, widget.Desc),
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                return ListView.builder(
                    shrinkWrap: true,
                    itemCount: snapshot.data!.categories.length,
                    itemBuilder: (contxt, index) {
                      final fav = snapshot.data!.categories[index];

                      return InkWell(
                        onTap: () {
                          Navigator.push(
                            context,
                            MaterialPageRoute(
                              builder: (context) => DetailsDo(
                                Desc: snapshot.data!.categories[index]
                                    .strCategoryDescription,
                                Image: snapshot
                                    .data!.categories[index].strCategoryThumb,
                              ),
                            ),
                          );
                        },
                        child: Card(
                          elevation: 2,
                          shape: RoundedRectangleBorder(
                            side: BorderSide(color: Colors.white70, width: 1),
                            borderRadius: BorderRadius.circular(50),
                          ),
                          child: ListTile(
                            title: Text(
                              snapshot.data!.categories[index].strCategory
                                  .toString(),
                              style: GoogleFonts.montserrat(
                                fontSize: 20,
                                fontWeight: FontWeight.w600,
                                fontStyle: FontStyle.italic,
                              ),
                            ),
                            leading: CircleAvatar(
                              backgroundColor:
                                  Color.fromARGB(213, 255, 251, 251),
                              child: Text(
                                snapshot.data!.categories[index].idCategory
                                    .toString(),
                                style: GoogleFonts.montserrat(
                                    fontSize: 20,
                                    fontWeight: FontWeight.w600,
                                    fontStyle: FontStyle.italic,
                                    color: Color.fromARGB(255, 148, 148, 135)),
                              ),
                            ),
                            trailing: IconButton(
                              icon: (provider.isExist(fav) && ischecked)
                                  ? const Icon(Icons.favorite,
                                      color: Colors.red)
                                  : const Icon(Icons.favorite_border),
                              onPressed: () {
                                provider.toggleFavorite(fav);
                                setState(() {
                                  ischecked = !ischecked;
                                });
                              },
                            ),
                          ),
                        ),
                      );
                    });
              } else if (snapshot.hasError) {
                return Text('${snapshot.error}');
              }
              return const CircularProgressIndicator();
            },
          ),
        );
      }),
    );
  }
}

这是图标按钮的具体问题:

trailing: IconButton(
                              icon: (provider.isExist(fav) && ischecked)
                                  ? const Icon(Icons.favorite,
                                      color: Colors.red)
                                  : const Icon(Icons.favorite_border),
                              onPressed: () {
                                provider.toggleFavorite(fav);
                                setState(() {
                                  ischecked = !ischecked;
                                });
                              },
                            ),

这就是问题所在:The Problem

Flutter 图标 提供者

评论


答:

0赞 Ye Lwin Oo 11/1/2022 #1

你会尝试这种方式而不是变量吗??isChecked

class _DesignOneState extends State<DesignOne>{
 static late List<bool> isChecked;
 
 ///*** your code ****
 Widgetbuild(BuildContext context){
   ///*** your code ***
   if(snapshot.hasData){
    isChecked = List.filled(snapshot.data!.categories.length,false);

    /// *** your code ***
    icon: (provider.isExist(fav) && isChecked[index])

    /// *** your code ***
    setState((){
      isChecked[index] = !isChecked[index];
    });
   }
 }

}

评论

0赞 Badriya Haddad 11/1/2022
同样的问题!!但谢谢你!<3