首页 > 解决方案 > 无效的 radix-10 数字(在字符 1 处)//flutter-update-4bb0a-default-rtdb.firebaseio.com/ ^

问题描述

我正在尝试为产品添加新集合,但我收到错误 Invalid radix-10 number (at character 1) //flutter-update-4bb0a-default-rtdb.firebaseio.com/ ^

我确保所有输入的值都是字符串,搜索错误并没有真正帮助我

class EditProductScreen extends StatefulWidget {
      static const routeName = '/edit-product';
    
      @override
      _EditProductScreenState createState() => _EditProductScreenState();
    }
    
    class _EditProductScreenState extends State<EditProductScreen> {
      final _priceFocusNode = FocusNode();
      final _descriptionFocusNode = FocusNode();
      final _imageUrlController = TextEditingController();
      final _imageUrlFocusNode = FocusNode();
      final _form = GlobalKey<FormState>();
      var _editedProduct = Product(
        id: null,
        title: '',
        price: 0,
        description: '',
        imageUrl: '',
      );
      var _initValues = {
        'title': '',
        'description': '',
        'price': '',
        'imageUrl': '',
      };
      var _isInit = true;
    
      @override
      void initState() {
        _imageUrlFocusNode.addListener(_updateImageUrl);
        super.initState();
      }
    
      @override
      void didChangeDependencies() {
        if (_isInit) {
          final productId = ModalRoute.of(context).settings.arguments as String;
          if (productId != null) {
            _editedProduct =
                Provider.of<Products>(context, listen: false).findById(productId);
            _initValues = {
              'title': _editedProduct.title,
              'description': _editedProduct.description,
              'price': _editedProduct.price.toString(),
              // 'imageUrl': _editedProduct.imageUrl,
              'imageUrl': '',
            };
            _imageUrlController.text = _editedProduct.imageUrl;
          }
        }
        _isInit = false;
        super.didChangeDependencies();
      }
    
      @override
      void dispose() {
        _imageUrlFocusNode.removeListener(_updateImageUrl);
        _priceFocusNode.dispose();
        _descriptionFocusNode.dispose();
        _imageUrlController.dispose();
        _imageUrlFocusNode.dispose();
        super.dispose();
      }
    
      void _updateImageUrl() {
        if (!_imageUrlFocusNode.hasFocus) {
          if ((!_imageUrlController.text.startsWith('http') &&
                  !_imageUrlController.text.startsWith('https')) ||
              (!_imageUrlController.text.endsWith('.png') &&
                  !_imageUrlController.text.endsWith('.jpg') &&
                  !_imageUrlController.text.endsWith('.jpeg'))) {
            return;
          }
          setState(() {});
        }
      }
    
      void _saveForm() {
        final isValid = _form.currentState.validate();
        if (!isValid) {
          return;
        }
        _form.currentState.save();
        if (_editedProduct.id != null) {
          Provider.of<Products>(context, listen: false)
              .updateProduct(_editedProduct.id, _editedProduct);
        } else {
          Provider.of<Products>(context, listen: false).addProduct(_editedProduct);
        }
        Navigator.of(context).pop();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Edit Product'),
            actions: <Widget>[
              IconButton(
                icon: Icon(Icons.save),
                onPressed: _saveForm,
              ),
            ],
          ),
          body: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Form(
              key: _form,
              child: ListView(
                children: <Widget>[
                  TextFormField(
                    initialValue: _initValues['title'],
                    decoration: InputDecoration(labelText: 'Title'),
                    textInputAction: TextInputAction.next,
                    onFieldSubmitted: (_) {
                      FocusScope.of(context).requestFocus(_priceFocusNode);
                    },
                    validator: (value) {
                      if (value.isEmpty) {
                        return 'Please provide a value.';
                      }
                      return null;
                    },
                    onSaved: (value) {
                      _editedProduct = Product(
                          title: value,
                          price: _editedProduct.price,
                          description: _editedProduct.description,
                          imageUrl: _editedProduct.imageUrl,
                          id: _editedProduct.id,
                          isFavorite: _editedProduct.isFavorite);
                    },
                  ),
                  TextFormField(
                    initialValue: _initValues['price'],
                    decoration: InputDecoration(labelText: 'Price'),
                    textInputAction: TextInputAction.next,
                    keyboardType: TextInputType.number,
                    focusNode: _priceFocusNode,
                    onFieldSubmitted: (_) {
                      FocusScope.of(context).requestFocus(_descriptionFocusNode);
                    },
                    validator: (value) {
                      if (value.isEmpty) {
                        return 'Please enter a price.';
                      }
                      if (double.tryParse(value) == null) {
                        return 'Please enter a valid number.';
                      }
                      if (double.parse(value) <= 0) {
                        return 'Please enter a number greater than zero.';
                      }
                      return null;
                    },
                    onSaved: (value) {
                      _editedProduct = Product(
                          title: _editedProduct.title,
                          price: double.parse(value),
                          description: _editedProduct.description,
                          imageUrl: _editedProduct.imageUrl,
                          id: _editedProduct.id,
                          isFavorite: _editedProduct.isFavorite);
                    },
                  ),
                  TextFormField(
                    initialValue: _initValues['description'],
                    decoration: InputDecoration(labelText: 'Description'),
                    maxLines: 3,
                    keyboardType: TextInputType.multiline,
                    focusNode: _descriptionFocusNode,
                    validator: (value) {
                      if (value.isEmpty) {
                        return 'Please enter a description.';
                      }
                      if (value.length < 10) {
                        return 'Should be at least 10 characters long.';
                      }
                      return null;
                    },
                    onSaved: (value) {
                      _editedProduct = Product(
                        title: _editedProduct.title,
                        price: _editedProduct.price,
                        description: value,
                        imageUrl: _editedProduct.imageUrl,
                        id: _editedProduct.id,
                        isFavorite: _editedProduct.isFavorite,
                      );
                    },
                  ),
                  Row(
                    crossAxisAlignment: CrossAxisAlignment.end,
                    children: <Widget>[
                      Container(
                        width: 100,
                        height: 100,
                        margin: EdgeInsets.only(
                          top: 8,
                          right: 10,
                        ),
                        decoration: BoxDecoration(
                          border: Border.all(
                            width: 1,
                            color: Colors.grey,
                          ),
                        ),
                        child: _imageUrlController.text.isEmpty
                            ? Text('Enter a URL')
                            : FittedBox(
                                child: Image.network(
                                  _imageUrlController.text,
                                  fit: BoxFit.cover,
                                ),
                              ),
                      ),
                      Expanded(
                        child: TextFormField(
                          decoration: InputDecoration(labelText: 'Image URL'),
                          keyboardType: TextInputType.url,
                          textInputAction: TextInputAction.done,
                          controller: _imageUrlController,
                          focusNode: _imageUrlFocusNode,
                          onFieldSubmitted: (_) {
                            _saveForm();
                          },
                          validator: (value) {
                            if (value.isEmpty) {
                              return 'Please enter an image URL.';
                            }
                            if (!value.startsWith('http') &&
                                !value.startsWith('https')) {
                              return 'Please enter a valid URL.';
                            }
                            if (!value.endsWith('.png') &&
                                !value.endsWith('.jpg') &&
                                !value.endsWith('.jpeg')) {
                              return 'Please enter a valid image URL.';
                            }
                            return null;
                          },
                          onSaved: (value) {
                            _editedProduct = Product(
                              title: _editedProduct.title,
                              price: _editedProduct.price,
                              description: _editedProduct.description,
                              imageUrl: value,
                              id: _editedProduct.id,
                              isFavorite: _editedProduct.isFavorite,
                            );
                          },
                        ),
                      ),
                    ],
                  ),
                ],
              ),
            ),
          ),
        );
      }
    }

我的添加方法是:

void addProduct(Product product) {
    var url = Uri.https(
        'https://flutter-update-4bb0a-default-rtdb.firebaseio.com',
        '/products.json');
    http.post(
      url,
      body: json.encode({
        'title': product.title,
        'description': product.description,
        'imageUrl': product.imageUrl,
        'price': product.price,
        'isFavorite': product.isFavorite,
      }),
    );

    final newProduct = Product(
        title: product.title,
        description: product.description,
        price: product.price,
        imageUrl: product.imageUrl,
        id: DateTime.now().toString());

    _items.add(newProduct);
    notifyListeners();
  }

知道为什么会这样吗?

标签: flutterdartfirebase-realtime-database

解决方案


'https://flutter-update-4bb0a-default-rtdb.firebaseio.com', '/products.json'

=>> 只需删除 https://


推荐阅读