首页 > 解决方案 > 在 Flutter 中从 JSON 创建动态小部件

问题描述

我正在尝试从从 API 获取的 JSON 创建动态小部件。我只是关注博客https://medium.com/@limonadev/rendering-flutter-widgets-from-json-easily-3db02490519e 但是在做了所有的事情之后我们得到了一些错误“/C:/Users/user/AppData /Local/Pub/Cache/hosted/pub.dartlang.org/json_dynamic_widget-1.4.1/lib/src/builders/json_scaffold_builder.dart:246:7:错误:没有名为“resizeToAvoidBottomPadding”的命名参数。” 我的 main.dart 文件是:

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:json_dynamic_widget/json_dynamic_widget.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Simple Example',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: DynamicText());
  }
}

class DynamicText extends StatefulWidget {
  final url = 'https://medium-json-dynamic-widget.herokuapp.com/mainpage';

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

class _DynamicTextState extends State<DynamicText> {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      builder: (context, AsyncSnapshot<http.Response> snapshot) {
        if (snapshot.hasData) {
          var widgetJson = json.decode(snapshot.data.body);
          var widget = JsonWidgetData.fromDynamic(
            widgetJson,
          );
          return widget.build(context: context);
        } else {
          return Scaffold(
            body: Center(
              child: CircularProgressIndicator(),
            ),
          );
        }
      },
      future: _getWidget(),
    );
  }

  Future<http.Response> _getWidget() async {
    return http.get(widget.url);
  }
}


class SimpleText extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Static Widget'),
      ),
      body: Center(
        child: Text('This is a very important message!'),
      ),
    );
  }
}

并且 pubspec.yaml 文件是:

 name: json_to_v
description: A new Flutter project.
publish_to: 'none'

version: 1.0.0+1

environment:
  sdk: ">=2.7.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^1.0.2
  http: ^0.12.2
  json_dynamic_widget: ^1.0.3

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: true

如果我将json_dynamic_widget: ^1.0.3 升级到 ^2.1.0 我们会收到以下错误:

因为 json_dynamic_widget >=2.0.0 <2.1.0 依赖于 json_schema2 ^2.0.0 而 json_schema2 >=2.0.0 <=2.0.0 依赖于 rest_client ^2.0.0,所以 json_dynamic_widget >=2.0.0 <2.1.0 需要 rest_client ^2.0.0 或 json_schema2 ^2.0.0+1。并且因为 json_dynamic_widget >=2.1.0 依赖于 json_schema2 ^2.0.0+1,json_dynamic_widget >=2.0.0 需要 rest_client ^2.0.0 或 json_schema2 ^2.0.0+1。并且因为 json_schema2 >=2.0.0+1 依赖于 rest_client ^2.0.1+1 依赖于 http ^0.13.0,所以 json_dynamic_widget >=2.0.0 需要 http ^0.13.0。所以,因为 json_to_v 依赖于 http ^0.12.2 和 json_dynamic_widget ^2.0.0,版本求解失败。pub get failed (1; 所以,因为 json_to_v 依赖于 http ^0.12.2 和 json_dynamic_widget ^2.0.0,版本解析失败。)

如果我们在该行和相关代码下方评论,那么错误就消失了。

import 'package:json_dynamic_widget/json_dynamic_widget.dart';

请让我知道我在哪里做错了。谢谢

标签: androidflutterflutter-dependencies

解决方案


尝试将此添加到您的pubspec.yaml

http: ^0.13.3

json_dynamic_widget: ^3.0.0


推荐阅读