【问题标题】:Why this shake functionality not working in flutter?为什么这个抖动功能在颤振中不起作用?
【发布时间】:2020-10-20 09:12:41
【问题描述】:

这个 ShakePlugin 不能使用这段代码,当我只是使用这段代码而没有这些 api 调用并且它工作正常时。

class MyAppState extends State<MyApp> {
  List data;
  String _search = 'nature';
  int index = 0;
  File imageFile;
  String imageData;
  bool dataLoaded;
  var path;
  int count = 10;
  FlutterShakePlugin _shakePlugin;
  void initState() {
    super.initState();
    _shakePlugin = FlutterShakePlugin(
      onPhoneShaken: () {
        setState(() {
      count=count+10;
    });
  },
      },
    )..startListening();
  }

  void dispose() {
    super.dispose();
    _shakePlugin.stopListening();
  }

  Future<String> getjsondata() async {
    try {
      var response = await http.get(
          'https://api.unsplash.com/search/photos?per_page=${count}&client_id=TcAQEO3JoMG90U7Rl-YUiDo1x9XbZukzMOMQhxUVCV4&query=${_search}');
      setState(() {
        var converted = json.decode(response.body);
        data = converted['results'];
      });
    } catch (e) {}
    return 'success';
  }
  void saveImage(int i) async {
    var url = data[i]['urls']['small'].toString();

    var imageId = await ImageDownloader.downloadImage(url);
    path = await ImageDownloader.findPath(imageId);
  }

  @override
  Widget build(BuildContext context) {
    getjsondata();
    return GestureDetector(
      child: SwipeDetector(
        child: Container(
          child: Image.network(
            data[index]['urls']['small'],

我想增加屏幕抖动时从 api 接收到的图像数量,但即使我已经安装了所有库和所有库,这也不起作用。

【问题讨论】:

    标签: flutter dart shake


    【解决方案1】:

    build 方法中调用getjsondata 方法将导致ui 无限渲染,因为您在getjsondata 中调用setState。我认为抖动插件工作正常,但它的结果是无效的,因为屏幕处于无限渲染状态。

    如果您将getjsondata 移动到FutureBuilder,请从getjsondata 方法中删除setState 调用,并在Future 的结果上呈现您的用户界面,您的代码应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-14
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 2019-10-06
      相关资源
      最近更新 更多